During the holidays I got to have some fun together with JonasRSV (he is top 0.3 % on a few kaggle competitions and a wonderfully kind human being). He and his friend have developed flappyMind a genetic algorithm solution for FlappyBird. This approach also provides the corresponding learning curve for each agent in a plot. This way you can see the development of the agents as they traverse the different generations.
This uses a standard neural network architecture with abstractions for dealing with mutation and inheritance for the different families of generations. The model is trained faster by using the number keys <1,..5> for rendering so the progress can be seen from each generation. If you really want to get the high score of flappy bird, just press 0 and it stops to render and just trains; once you feel like the model has been trained enough. Just press whatever rendering button speed you want.
model is in
$ ls ANNGenetic
EvolutionDemoOn2Dfunction.ipynb __pycache__
README.md ann.py
__init__.py test.py
Rendering uses
$ cat nnplayer.py
...
MEAN_SCORE.append(mean)
GEN.append(GENERATION)
plt.plot(GEN, MEAN_SCORE)
plt.show()
plt.pause(0.5)
...
Known issues
If you get a familiar error with (MAC OSX rendering problems :(. ))
2019-01-03 13:20:45.135 python[44873:3146187] -[SDLApplication _setup:]: unrecognized selector sent to instance 0x7f824fe98430
2019-01-03 13:20:45.139 python[44873:3146187] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SDLApplication _setup:]: unrecognized selector sent to instance 0x7f824fe98430'
Solution:
Either skip the backend setup in matplotlib and take the default from MacOSx Mojave 10.14.2 (18C54)
Install $ pip install pyqt5
$ echo "" > ~/.matplotlib/matplotlibrc
$ echo "backend: Qt5Agg" > ~/.matplotlib/matplotlibrc
Every answer gave me the same solution to my problem. Using TkAgg for backend for matplotlib. use-.matplotlibrc explicit-use-of-matplotlib.use()
EDIT: 2019-03-03
found and describing same issue. qt5-matplotlib