Two agents in a simulation where they shoot at each other, controled by a neural network with a genetic algorithm. They both learn how to fight during the training process. The agents are learning by playing a lot of games, but never see a human player telling them how to win the game.
The agent outputs a command based on the distance relative to its opponent, the angle and the number of ticks since its last shot.
This data is processed by a single hidden layer neural network with 1 bias per layer. The adjustement of this bias value by the algorithm leads to anticipation of the future position of the ennemy AI (overfitting?).
At each generation, a tournament assigns a score for each agent. The probability of an agent to reproduce and give birth to a mutated agent is proportional to the square of its score.
It works! In the first generations, the agents barely move, and, generation after generation, they try differents moves: they approach or avoid the ennemy, try to scope ...
The game needs :
- Python 3
- Numpy
- Pygame (Only for the -display part)
To train a new set of agents, type :
- python3 main.py -simulate
To continue the training of other agents, type :
- python3 main.py -simulate
The default output of the save command is located at saves/save_{save_number}/{generation} \
To visualize a tournament with all the agents:
- python3 main.py -display