Пример #1
0
        public override void Execute(PopulationBase population, out IndividualBase chosenIndividual1, out IndividualBase chosenIndividual2)
        {
            IndividualBase[] selectedParents = new IndividualBase[2];

            for (int individualIdx = 0; individualIdx < 2; ++individualIdx)
            {
                selectedParents[individualIdx] = population.GetRandomIndividual();
                for (int selectionIdx = 1; selectionIdx < tourSize; ++selectionIdx)
                {
                    IndividualBase randomIndividual = population.GetRandomIndividual();
                    if (randomIndividual.GetFitnessForObjective(Problem.MonoObjectiveGoal) > selectedParents[individualIdx].GetFitnessForObjective(Problem.MonoObjectiveGoal))
                    {
                        selectedParents[individualIdx] = randomIndividual;
                    }
                }
            }
            chosenIndividual1 = selectedParents[0];
            chosenIndividual2 = selectedParents[1];
        }
        private IndividualBase Execute(int numberOfExecutions, out int bestResultCount)
        {
            IndividualBase bestIndividual   = Execute();
            double         bestCurrentValue = bestIndividual.GetFitnessForObjective(Problem.MonoObjectiveGoal);

            bestResultCount = 1;
            for (int executionCount = 1; executionCount < numberOfExecutions; ++executionCount)
            {
                IndividualBase currentIndividual = Execute();
                double         currentValue      = currentIndividual.GetFitnessForObjective(Problem.MonoObjectiveGoal);
                if (currentValue > bestCurrentValue)
                {
                    bestIndividual   = currentIndividual;
                    bestCurrentValue = currentValue;
                    bestResultCount  = 1;
                }
                else if (currentValue == bestCurrentValue)
                {
                    ++bestResultCount;
                }
            }
            return(bestIndividual);
        }