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; }