A suggestion about algorithm
After letting run a simulation with 100 evolutions, I've noticed something: For each iteration is saved the best behavior (fitness, horizontal distance), but has no memory of the best.
I suggest that the best global evolution be saved to improve accuracy and performance; so that when you get the best, if the next three evolutions do not improve, take the best saved.
So for example, if in generation 33 fitness or distance horzontal were maximum, 30% or 15 m. if in the evolutions 34-35-36 an improvement is not obtained in comparison to the 33, the parameters of the neural network for the evolution 37 are those of the best generation 33.
In this way we seek to improve the best global generation, and not for each iteration.
Why 3 yevolutions later? Because the evolutions can improve. In fact, in the test I did with 100 evolutions, after 10 or 15 evolutions a new maximum was generated, although during these 10 or 15 it worsened