Preface This book is intended to be a pragmatic, hands-on guide to implementing evolutionary algorithms. The emphasis is on writing useful evolutionary programs and solving interesting problems. This is not intended to be a thorough theoretical guide. I will introduce the key evolutionary computation concepts and demonstrate their practical application, but I will endeavour to keep abstract theory and mathematics to the minimum necessary. For a more academic treatment of the material, I recommend Melanie Mitchell's An Introduction to Genetic Algorithms and A.E. Eiben and J.E. Smith's Introduction to Evolutionary Computing. Though evolutionary algorithms can be implemented in any general purpose programming language, all of the examples in this book are presented using Java. Java is one of the most widely used programming languages in the world today. As such, many software developers are already familiar with Java and able to understand programs written in it, even if they usually develop in other languages. Java provides a good balance of performance, ease-of-use and a rich standard library. The concepts discussed in this book are not tied to a particular programming language, so there is no reason why you couldn't implement the ideas in another language if you preferred.