Eiben and Smith’s second edition of Introduction to Evolutionary Computing is an excellent and readable text that should find a place on the bookshelf of anyone who researches and/or teaches in this domain. Suitable for a graduate course or upper-level undergraduate course in Evolutionary Computing, it is also a superior and well-organized reference book. Note that this text focuses on evolutionary computation per se, and not the broader areas of computational intelligence found in many texts in this area.

The text is divided into three main parts, comprising 17 chapters in all.

1 Part I: The basics

The opening part consists of six chapters. These begin with an introduction to the problems to be solved and provide an historical overview of the field in its many variants. This is followed by an overview of the basics of evolutionary algorithms, with representation, mutation, recombination, selection, fitness and population management. Subsequent chapters revisit these concepts in considerable depth. Throughout the exposition, and indeed the entire text, the authors cite related research works that introduce and explore variations on the themes, with relevant results. This part concludes with brief treatments of evolutionary and genetic programming, learning classifier systems, differential evolution and particle swarm optimization, which serve mostly to whet the reader’s appetite, with references for further exploration.

2 Part II: Methodological issues

The three chapters that make up this portion go beyond the mechanics of algorithm components to delve more deeply into issues that must be confronted when solving problems with evolutionary computation. Extensive discussion of parameter selection and parameter tuning in Chapter 7 give way to adaptive parameter adjustment, e.g., the 1/5 mutation rule in Chapter 8.

Chapter 9, “Working with Evolutionary Algorithms” gives good practical advice on designing, implementing, analyzing and using evolutionary approaches for problem solving. This should be mandatory reading for any student entering research. The discussion begins with the simple question of whether the objective is to find one high caliber solution once (as might be the case in a design problem), or to produce consistently good solutions in a repetitive situation (as occurs in online control problems). We are soon visiting the criteria for academic research, and how to demonstrate that a given algorithm is superior to others in at least some cases. A solid treatment of performance analysis, comparative measures, test suites and benchmarks ensues, concluding with a discussion of “bad practice” versus “better practice” in performing a meaningful performance analysis for academic publication.

Although specifically targeted at research in evolutionary computation, the treatment of performance analysis is more generally applicable, and provides useful discussion points for anyone in an applied academic discipline, vis-à-vis identifying the usefulness of one’s results rather than simply relative performance against standard benchmarks. While their assertions are likely to be controversial, they provide a worthy starting point for conversations about research studies. Lest their tone seem too preachy, the authors are quick to point out that they have themselves practiced some of the procedures they criticize here.

3 Part III: Advanced topics

The remainder of the text contains eight shorter chapters on a wide selection of topics. A course in Evolutionary Computing can safely pick and choose from this section, which include memetic algorithms, optimization issues ranging from nonstationary and noisy functions to multiobjective problems, constraint handling and more. Those I found most interesting were the discussion of interactive evolutionary algorithms, i.e., those in which fitness is determined via human intervention, and a brief treatment of coevolution.

The text concludes fittingly with a chapter on Evolutionary Robotics (Chapter 17), which should be of special interest to readers of this journal. Whether physical or virtual, robots are construed here as autonomous entities that may evolve while in deployment. These provide special opportunities, for instance the opportunity to select one’s own mate, and continuously evolve fitness functions, reproduction operators and even genotypes. They are also subject to special perils, notably that evaluating the fitness of a poorly evolved controller may be fatal to the entity it intends to control. In the final section of the chapter, the authors muse on the implications of self-reproducing physical artifacts, which hold the promise of being as revolutionary as evolutionary.

The 500 papers and presentations cited in the text provide a marvelous literature review.

The companion website is well-organized, stylistically appealing and promises to continue improving its content. Resources for each chapter include references for further reading and comprehensive Powerpoint slides, with PDF’s promised in the future. Exercises are given for each chapter, but they are not as robust as the other materials. At this writing (February 2016), there are not yet materials for the newest chapter, Evolutionary Robotics.

As much as I truly enjoyed this text, I will admit to two disappointments, which are perhaps more a lament of the state of the art in this discipline than a shortcoming of the text.

The first disappointment as someone who teaches a course in evolutionary computing, is the shortage of good exercises to assign ones’ students. This is sadly the status quo for many texts in this domain. The text points the reader to the authors’ website for exercises. The exercises available (February 2016) do not yet match the depth of the text.

The second disappointment is that there is no guide, or even discussion of software for evolutionary computing. Again, this is a difficult target to hit, as the landscape is constantly changing. Yet it is a shame for each student or new researcher to begin from scratch when designing and implementing code, in lieu of using flexible software and code libraries that have been tested and used in other studies. Considering the dynamic nature of such material, the website is a more natural home than a printed text for this activity however, and some links there will be most welcome for the reader.

In conclusion, I was delighted by Eiben and Smith’s coverage of and overall perspective on the evolutionary computing field. The clarity of exposition and detail are excellent in both their discussions and online lecture slides. I will be quite happy to use “Introduction to Evolutionary Computing” (Edition 2) for my own classes in the future.