This book gives a good introduction to evolutionary computation for those who are first entering the field and are looking for insight into the underlying mechanisms behind them. Emphasizing the scientific and machine learning applications of genetic algorithms instead of applications to optimization and engineering, the book could serve well in an actual course on adaptive algorithms. The authors include excellent problem sets, these being divided up into "thought exercises" and "computer exercises" in genetic algorithm. Practical use of genetic algorithms demands an understanding of how to implement them, and the authors do so in the last two chapters of the book by giving the applications in various fields. This book also outlines some ideas on when genetic algorithms and genetic programming should be used, and this is useful since a newcomer to the field may be tempted to view a genetic algorithm as merely a fancy Monte Carlo simulation. The most difficult part of using a genetic algorithm is how to encode the population, and the authors discuss various ways to do this. Various "exotic" approaches to improve the performance of genetic algorithms are also discussed such as the "messy" genetic algorithms, adaptive genetic algorithm and hybrid genetic algorithm. less