This genetic algorithm runs multiple versions of slightly different behaving rockets.
After each iteration the rocket with the highest fitness is used as a base for the next generations.
Fitness is calculated by combining three values:
The selected rocket is then used to generate copies with minor changes that will influence its behavior.
It can take some iterations to find a rocket that lands smoothly.