Disclaimer |
|
ix | |
Acknowledgments |
|
xi | |
Preface |
|
xiii | |
|
1 Writing Your First Genetic Algorithm |
|
|
1 | (14) |
|
Understanding Genetic Algorithms |
|
|
2 | (3) |
|
Introducing the One-Max Problem |
|
|
5 | (1) |
|
Initializing the Population |
|
|
6 | (1) |
|
Understanding the Flow of Genetic Algorithms |
|
|
7 | (2) |
|
|
9 | (1) |
|
|
10 | (1) |
|
|
11 | (2) |
|
|
13 | (1) |
|
|
14 | (1) |
|
2 Breaking Down Genetic Algorithms |
|
|
15 | (18) |
|
Reviewing Genetic Algorithms |
|
|
15 | (1) |
|
Looking Deeper into Genetic Algorithms |
|
|
16 | (6) |
|
Using Mix to Write Genetic Algorithms |
|
|
22 | (1) |
|
Building a Framework for Genetic Algorithms |
|
|
23 | (4) |
|
Understanding Hyperparameters |
|
|
27 | (2) |
|
Solving the One-Max Problem Again |
|
|
29 | (2) |
|
|
31 | (2) |
|
3 Encoding Problems and Solutions |
|
|
33 | (18) |
|
Using Structs to Represent Chromosomes |
|
|
33 | (4) |
|
Using Behaviours to Model Problems |
|
|
37 | (6) |
|
Understanding and Choosing Genotypes |
|
|
43 | (3) |
|
Solving One-Max for the Last Time |
|
|
46 | (1) |
|
Spelling Words with Genetic Algorithms |
|
|
47 | (3) |
|
|
50 | (1) |
|
4 Evaluating Solutions and Populations |
|
|
51 | (20) |
|
|
52 | (3) |
|
Introducing Penalty Functions |
|
|
55 | (1) |
|
Applying a Penalty to the Shipping Problem |
|
|
56 | (1) |
|
Defining Termination Criteria |
|
|
57 | (4) |
|
Applying Termination Criteria to Shipping |
|
|
61 | (1) |
|
Crafting Fitness Functions |
|
|
62 | (3) |
|
Exploring Different Types of Optimization |
|
|
65 | (4) |
|
|
69 | (2) |
|
|
71 | (16) |
|
|
72 | (3) |
|
Customizing Selection in Your Framework |
|
|
75 | (3) |
|
Implementing Common Selection Strategies |
|
|
78 | (7) |
|
|
85 | (2) |
|
6 Generating New Solutions |
|
|
87 | (20) |
|
|
87 | (4) |
|
Solving N-Queens with Order-One Crossover |
|
|
91 | (4) |
|
|
95 | (1) |
|
Implementing Other Common Crossover Strategies |
|
|
95 | (7) |
|
Crossing Over More Than Two Parents |
|
|
102 | (1) |
|
Implementing Chromosome Repairment |
|
|
103 | (2) |
|
|
105 | (2) |
|
7 Preventing Premature Convergence |
|
|
107 | (18) |
|
Breaking Codes with Genetic Algorithms |
|
|
108 | (5) |
|
|
113 | (2) |
|
Customizing Mutation in Your Framework |
|
|
115 | (2) |
|
Implementing Common Mutation Strategies |
|
|
117 | (5) |
|
Other Methods to Combat Convergence |
|
|
122 | (1) |
|
|
123 | (2) |
|
8 Replacing and Transitioning |
|
|
125 | (14) |
|
Creating a Class Schedule |
|
|
126 | (3) |
|
Understanding Reinsertion |
|
|
129 | (4) |
|
Experimenting with Reinsertion |
|
|
133 | (2) |
|
Growing and Shrinking Populations |
|
|
135 | (1) |
|
Local Versus Global Reinsertion |
|
|
136 | (1) |
|
|
137 | (2) |
|
9 Tracking Genetic Algorithms |
|
|
139 | (18) |
|
Using Genetic Algorithms to Simulate Evolution |
|
|
139 | (5) |
|
Logging Statistics Using ETS |
|
|
144 | (6) |
|
Tracking Genealogy in a Genealogy Tree |
|
|
150 | (5) |
|
|
155 | (2) |
|
10 Visualizing the Results |
|
|
157 | (12) |
|
Visualizing the Genealogy of the Tiger Evolution |
|
|
157 | (3) |
|
Visualizing Basic Statistics |
|
|
160 | (2) |
|
Playing Tetris with Genetic Algorithms |
|
|
162 | (1) |
|
Installing and Compiling ALEx |
|
|
163 | (5) |
|
|
168 | (1) |
|
11 Optimizing Your Algorithms |
|
|
169 | (18) |
|
Benchmarking and Profiling Genetic Algorithms |
|
|
170 | (5) |
|
|
175 | (2) |
|
Improving Performance with Parallellzation |
|
|
177 | (6) |
|
Improving Performance with NIFs |
|
|
183 | (2) |
|
|
185 | (2) |
|
12 Writing Tests and Code Quality |
|
|
187 | (12) |
|
|
188 | (1) |
|
Writing Property Tests with ExUnit |
|
|
189 | (3) |
|
Cleaning Up Your Framework |
|
|
192 | (3) |
|
Writing Type Specifications |
|
|
195 | (3) |
|
|
198 | (1) |
|
|
199 | (6) |
|
|
199 | (1) |
|
|
200 | (1) |
|
|
201 | (1) |
|
Networking with Evolution |
|
|
202 | (1) |
|
|
203 | (1) |
|
|
204 | (1) |
Bibliography |
|
205 | (2) |
Index |
|
207 | |