/// <summary> /// Ends the generation. Creates a new one. Updates GUI. /// </summary> public void ResetGeneration() { Debug.Log("Resetting Generation"); KillAgents(); float[] redAgentsFitness = fc.GetRedIndividualsFitness(); float[] blueAgentsFitness = fc.GetBlueIndividualsFitness(); int maxRedFitnessIndex = fc.GetMaxFitness(redAgentsFitness); Debug.Log("Local Max Fitness (RED): " + fc.fitnessForIndividual[maxRedFitnessIndex * 2 + 1]); int maxBlueFitnessIndex = fc.GetMaxFitness(blueAgentsFitness); Debug.Log("Local Max Fitness (BLUE): " + fc.fitnessForIndividual[maxBlueFitnessIndex * 2]); // Update GUI Elements. GuiManager gm = GetComponent <GuiManager> (); gm.UpdateMaxFitness(CalculateHighestFitness(redAgentsFitness[maxRedFitnessIndex], blueAgentsFitness[maxBlueFitnessIndex])); gm.UpdateGeneration(); // Perform crossover of the genes with crossover algorithm. int[][] endGenes = fc.allGenes; //Debug.Log ("RED Best Genome: " + fc.PrintGenome (endGenes[maxRedFitnessIndex * 2 + 1])); for (int i = 1; i < popSize; i += 2) { //Debug.Log ("Old Genome for index " + i + ": " + fc.PrintGenome (endGenes[i])); endGenes[i] = crossover.Crossover(endGenes[maxRedFitnessIndex * 2 + 1], endGenes[i]); //Debug.Log ("New Genome for index " + i + ": " + fc.PrintGenome (endGenes[i])); } for (int i = 0; i < popSize; i += 2) { endGenes[i] = crossover.Crossover(endGenes[maxBlueFitnessIndex * 2], endGenes[i]); } allGenes = endGenes; Initialize(popSize, false); ResetTimer(); }