Evolutionary Algorithms (*EAs*) are a fascinating class of algorithms for meta-heuristic optimisation. There exist many books on the topic of EAs, ranging from their theory to practice. The first book I read on the topic was *Genetic algorithms in search, optimization, and machine learning* by David E. Goldberg (1989), and to this day I still recommend it to new students in the field.

However, there is a re-occurring difficulty when my students are starting out in the field, *"how do I move from theory to practice?"*. Most books will have some chapters dedicated to applications of EAs, but what's missing is an up-to-date book dedicated to using modern technology and concepts.

When writing this book, I had to answer some difficult questions:

- What programming language will my examples be written in?
- What software libraries will I use?
- How do I structure the chapters and sections, do I lead entirely by example or do I dedicate some parts to the theory?
- Do I focus on single-objective EAs or multi-objective EAs?

Nevertheless, the decisions had to be made. I selected Python as the programming language simply due to its rise in popularity (in 2019), and this was only a difficult choice because there is a wealth of resources written for MATLAB. Of the resources written in MATLAB, it is a shame to not be able to use PlatEMO, which is a well-maintained open-source platform for Evolutionary Multi-objective Optimisation. In its place, when a software library is needed, I will turn to Platypus, which provides optimisation algorithms and analysis tools for multi-objective optimisation.

For the structure of the chapters and sections, I have decided to lead entirely by example. There will be code to demonstrate every concept used, and I will show how we can implement algorithms from their mathematical representation. In these cases, I will focus on the readability of the implementations rather than their performance.

Finally, I will focus on multi-objective EAs as this represents the majority of real-world problems. However, single-objective EAs will make an appearance to highlight the differences between the two.

Perhaps the most difficult question to answer is *where do we start?* There is so much to cover, and many potential starting points. For this book, I will start with a definition of objective functions, and illustrate the relationship between what we call the problem space and the objective space. With this approach, I hope there will be a clear understanding of what the various operators within an EA are affecting.

Note

I aim to generate everything in this book through code. This means you will see the code for all my figures and tables, including things like flowcharts.

Every section is intended to be independent, so you will find some repetition as you progress from one section to another.