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