コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }