/// <summary> /// Selected Individuals are returned /// </summary> /// <param name="targetIndividuals"></param> /// <returns></returns> public IndividualsGroup ExecuteSelection(IndividualsGroup _targetIndividuals) { IndividualsGroup selectedIndividuals = new IndividualsGroup(); IndividualsGroup targetIndividuals = new IndividualsGroup(_targetIndividuals); var elite = EliteSelection(targetIndividuals); SelectedIndividualsIndex[0] = targetIndividuals.IndexOf(elite); targetIndividuals.IndivisualsGroup.Remove(elite); var roulette = RouletteSelection(targetIndividuals); if (SelectedIndividualsIndex[0] <= targetIndividuals.IndexOf(roulette)) { SelectedIndividualsIndex[1] = targetIndividuals.IndexOf(roulette) + 1; } else { SelectedIndividualsIndex[1] = targetIndividuals.IndexOf(roulette); } selectedIndividuals.AddIndivisual(elite); selectedIndividuals.AddIndivisual(roulette); return(selectedIndividuals); }
/// <summary> /// Create Individuals from parameters and fitnesses /// </summary> /// <param name="parameters"></param> /// <param name="fitnesses"></param> /// <returns></returns> private IndividualsGroup CreateIndividuals(double[][] parameters, double[] fitnesses) { // Evaluate generated offspring IndividualsGroup offspring = new IndividualsGroup(); var nCrossover = parameters.Length; for (int i = 0; i < nCrossover; i++) { offspring.AddIndivisual(new Individual(parameters[i], fitnesses[i])); } return(offspring); }