예제 #1
0
    void EvaluateRun()
    {
        List <int> numFlockColision  = new List <int>();
        List <int> numObjectColision = new List <int>();

        //Initialize values
        for (int i = 0; i < generationSize; i++)
        {
            numFlockColision.Add(0);
            numObjectColision.Add(0);
        }

        //Find number of colisions per flock
        int numAgents        = flockManager.flockAgents_ECS_FW.Length;
        int numAgentsOnSwarm = numAgents / generationSize;

        for (int i = 0; i < numAgents; i++)
        {
            FlockWho agent = flockManager.flockAgents_ECS_FW[i];
            numFlockColision[agent.flockManagerValue]  += agent.flockCollisionCount;
            numObjectColision[agent.flockManagerValue] += agent.objectCollisionCount;
        }

        // Make the score
        for (int i = 0; i < generationSize; i++)
        {
            float meanFlockColision  = (float)numFlockColision[i] / (float)numAgentsOnSwarm;
            float meanObjectColision = (float)numObjectColision[i] / (float)numAgentsOnSwarm;
            float score = meanFlockColision + meanObjectColision;
            scoreSum[i] += score;
        }

        currentEvaluation++;

        flockManager.RestartFlocks();
    }