Imitation is the sincerest form of flattery. Michalewicz and Fogel make no effort to conceal their admiration for Polya’s classic work, now nearly six decades old, *How to solve it: a new aspect of mathematical method* [1]. They borrow from this masterpiece not only their title, but also their predilection for using numerous puzzles as a way to engage readers’ minds and highlight discussion topics.

While reflecting Polya’s work, this volume also illustrates how the advent of the computer has changed the task facing someone with a problem to solve. For Polya, problem solving was conducted mostly in the head of the person facing the problem, perhaps with some assistance from a simple paper-and-pencil diagram. The problems presented were mostly geometric, algebraic, or numerical. The original book outlined a simple four-part process for problem solving (understand the problem, devise a plan, carry out the plan, and review the result). It devoted most of its space to a short dictionary of heuristics, with encyclopedia-like articles, including principles, such as “analogy”; leading questions, such as “Could you derive something useful from the data?”; and individuals, such as Bolzano and Leibniz, who had also occupied themselves with the process of problem solving. It invited readers to browse nonlinearly rather than read straight through.

Michalewicz and Fogel seek to prepare readers for problems that require the use of a computer. Three canonical examples recur frequently throughout the book: Boolean satisfiability (SAT), the traveling salesman (TSP), and nonlinear programming (NLP). While touching briefly on techniques such as neural networks and fuzzy logic, their main focus is on evolutionary methods, and the book’s central purpose is to teach readers how to apply an evolutionary approach to problems with various characteristics. The text is an organized exposition of different kinds of challenges and how they can be met, and is much more suitable for linear study than for browsing. Each chapter is introduced with a problem (intended for human solution in the spirit of Polya, not computer programming) that highlights the theme of the chapter. Further puzzles appear within the exposition at various points, often presenting novel approaches to old chestnuts.

The first two chapters introduce the basic concepts of problem solving, including search space, issues of representation, and evaluation, and discuss what makes a problem hard to solve (for instance, change over time, constraints, or local optima). These chapters introduce the three prototype problems of SAT, TSP, and NLP. Chapters 3 and 4 discuss traditional approaches to these problems, including exhaustive search, linear programming, greedy algorithms, dynamic programming, branch and bound, and A*. Chapter 5 raises the challenge of local optima faced by many of these methods and introduces simulated annealing and tabu search as ways of escaping such situations.

Chapters 6 through 11 cover all aspects of evolutionary approaches to computational problem solving. Chapter 6 introduces the basic ideas by exhibiting evolutionary approaches to the three canonical problems. Chapter 7 discusses the four basic elements of any evolutionary approach: representation, evaluation, variation, and selection. Chapter 8 discusses evolutionary approaches to the TSP in depth, as an illustration of the importance of good variation operators. Chapter 9 introduces the problem of managing constraints. Constraints effectively divide the search space into feasible and infeasible regions. Such a binary distinction can frustrate evolutionary approaches, which need to progress incrementally from more to less infeasible solutions and eventually to feasible ones, so the problem solver needs to consider the relative fitness of different infeasible solutions. Like other weak methods, evolutionary algorithms bristle with parameters that need to be tuned (such as mutation rate, population size, and crossover location), and chapter 10 discusses techniques to tune these parameters. Chapter 11 discusses application of these methods to time-varying and noisy environments.

The next two chapters are high-level summaries of alternative solution techniques, neural networks in chapter 12 and fuzzy logic in chapter 13. These chapters pave the way for a discussion in chapter 14 of hybrid systems, which merge different solution approaches (for example, using evolution to adjust the weights of a neural network).

The summary in chapter 15 steps back from the technical details of the previous chapters to consider problem solving in the large. Returning to the spirit of Polya, it enumerates ten high-level heuristics (applicable by humans, not just by computers) for solving problems.

As appendices, the book includes a succinct but thorough review of probability and statistics, and a collection of problems that invite students to try out the techniques they have learned. A list of 394 references through 1999 includes not only a comprehensive list of sources on evolutionary algorithms, but also pointers to further information on neural and fuzzy methods.

Like its predecessor, the new *How to solve it* combines deep mathematical insight with skilled pedagogy. Puzzle lovers will seek out the book for its insightful discussion of many intriguing brain twisters. Students of computational methods will find it an accessible but rigorous introduction to evolutionary algorithms. Teachers will learn from its exposition how to make their own subject matter clearer to their students. Polya would be honored to know that his spirit lives on in the computer age.