Your README is very clear and helpful to understand your code. The code is also well organized and commented.
The algorithms Adaptive (μ+λ)-ES and Adaptive (μ, λ)-ES have been correctly implemented. The mutation part is also consistent.
I really appreciated that you created and used your own strategies for the evaluation (I think that was the goal of the lab) and not the nim_sum (there is not always an optimal strategy).
In this case, as regards the code, I used six strategies and since there are many like yours, I thought of putting the functions in a list, this speeds up coding and makes the code cleaner and any changes quicker. In your case you have executed some cascading ifs which could (in my opinion) give you management problems in the case of an expansion of strategies
However, I think you should have checked the strategies move by move and not on the total, furthermore it seems to me that the weights you entered were not used correctly.
Furthermore, to generate a better strategy I would have combined more opponents while you only used "pure_random".
Maybe it could have been interesting to play more games and show the win rate at the end (for better testing)
In conclusion I think you did a good job even if it needs some improvement.
Your README is very clear and helpful to understand your code. The code is also well organized and commented. The algorithms Adaptive (μ+λ)-ES and Adaptive (μ, λ)-ES have been correctly implemented. The mutation part is also consistent.
I really appreciated that you created and used your own strategies for the evaluation (I think that was the goal of the lab) and not the nim_sum (there is not always an optimal strategy). In this case, as regards the code, I used six strategies and since there are many like yours, I thought of putting the functions in a list, this speeds up coding and makes the code cleaner and any changes quicker. In your case you have executed some cascading ifs which could (in my opinion) give you management problems in the case of an expansion of strategies
However, I think you should have checked the strategies move by move and not on the total, furthermore it seems to me that the weights you entered were not used correctly.
Furthermore, to generate a better strategy I would have combined more opponents while you only used "pure_random".
Maybe it could have been interesting to play more games and show the win rate at the end (for better testing)
In conclusion I think you did a good job even if it needs some improvement.
I hope this review can be useful to you!