コード例 #1
0
ファイル: Population.cs プロジェクト: jump4r/Genetic-Project
    /// <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();
    }