private void OnBreedingUpdate()
        {
            // Perform one generation of our GA
            genericAlgorithm.DoGeneration();

            simulation.SetCars(genericAlgorithm.GetPopulation().Cast <ICarController>());
            simulation.ResetCars();

            // Add the metrics we will use to judge our cars fitness
            simulation.GetCars().ForEach(car => this.AddFitnessMetrics(car));

            // Reset our simulation
            currentTrackIndex = 0;
            simulation.SetTrack(currentTrack);
            simulation.Reset();

            // Reset the visualisation
            if (IsVisualizationEnabled)
            {
                // Reset all cars
                simulationVisualization.InitializeCars(simulation.GetCars());

                // Reset all track visuals - not the most efficient but works really clean
                simulationVisualization.SetTrack(currentTrack);
                simulationVisualization.Reset();
            }


            trainingState = TrainState.Evaluating;
        }