Evolutionary Computing (Kenneth A. De Jong; The MIT Press, 2006)
Solving problems using biological principles
The principles of biological evolution can be used to solve problems in science and engineering. You can use evolutionary computing to find solutions which obey given constraints. Also optimization problems can be tackled, such as finding a schedule which minimizes costs.
Kenneth A. De Jong belongs to the key experts in genetic algorithms. He has written several influential papers on the foundations of evolutionary computing, striving towards an integrated view of the research field.
The book "Evolutionary Computing" is not just a summary of the field, but aims towards a coherent overview of evolutionary computing. Many advanced topics are covered in a concise manner. However, a detailed discussion is not possible in such a short book.
The book is not an introduction for the novice. It works best when the reader has experience of evolutionary computing in problem solving, and thus can use his or her practical experience to gain understanding of the reasoning in the book.
The summaries at the end of each chapter make it easier to grasp the central arguments of the author. The book also contains some exercises.
Although using the principles of evolution is in principle easy, in practice there arise questions which are not easy to answer.
Evolutionary algorithms are applied to distinct individuals which form a population of solution candidates. But how to define the individuals to solve a given problem? The individuals may be real-valued vectors specifying a point in the solution space. Or the individuals may be computer algorithms which are modified to solve a particular programming task.
After determining how to code the solution space to the individuals, one has to decide how the solution candidates will compete with each other. How to find out how good an individual is (the fitness value) compared to another?
When such comparisons have been made to determine the winners, how these successful individuals will pass on their properties to the next generation? Also, there are quite a lot additional features you can include in your implementation. For example, many evolutionary algorithms use mutations to escape from local optima and to avoid premature convergence.
As the above questions indicate, there are many details of evolutionary computing which need to be decided in practice. The researcher has to make a lot of choices which determine the speed and robustness of the solution algorithm.
In many cases evolutionary algorithms are quite robust and work with a wide range of parameter values and designs. However, this is not always the case, and having an understanding of the basic principles and the theoretical framework helps to avoid pitfalls.