No README.md file, it is not easy to understand your idea immediately just looking at code.
No comments on code.
Code is a bit disorganized overall.
It is a good idea to use as fitness measure the number of games won against an other fixed strategy like "eliminate_one_row".
The evolution strategy here is in adapting weights of strategies to choose: every strategy, at the beginning, has the same probability to be chosen, but it can be seen, as the game continues, it ends up in choosing the "optimal" strategy always (all other strategies ends up having a p=0 to be chosen) in the end. So the player is really adapting itself in using the best strategy possible as the game proceeds.
Some minor problems:
It is a good idea to use as fitness measure the number of games won against an other fixed strategy like "eliminate_one_row".
The evolution strategy here is in adapting weights of strategies to choose: every strategy, at the beginning, has the same probability to be chosen, but it can be seen, as the game continues, it ends up in choosing the "optimal" strategy always (all other strategies ends up having a p=0 to be chosen) in the end. So the player is really adapting itself in using the best strategy possible as the game proceeds.