This is the repository for the project of the course sistemi intelligenti robotici (intelligent robotic systems), University of Bologna, A.Y. 2017/2018.
The project aims to design and implement a system in which 2D cars learn to drive on a circuit through an evolutionary robotics approach based on neural networks.
- Every car is equipped with five proximity sensors, which are placed in the front side. Each sensor provides the distance between the car and the nearest object in a certain direction.
- Every car is driven by a feedforward neural network. The net takes the five sensor values as input, and provides two value as output: the engine force (speed of the car) and direction.
- The neural net's weights make up the genotype of the car. They are initially set in a random way, and then evolved through a genetic algorithm.
- The genotype quality is given by the distance traveled by the car.
- In the evolution phase the genetic algorith performs selection, crossover and mutation to create a new generation of genotypes. More details will be provided in the project report.
We used Godot and C# for simulating the car races. We created four different circuits with different difficulty levels. If you wish to run the simulation by yourself you will need Godot with C# integration. Be aware that running the simulation on the toughest circuits will need several minutes. There is no way to speed up the simulation yet.
Easy circuit
Medium-easy circuit
Medium-hard circuit
Hard circuit