Beispiel #1
0
        /// <summary>
        /// Creates an instance of GA with a random initial population sample
        /// </summary>
        /// <param name="adapter">GA Adapter to be used by the algorithm</param>
        public GeneticAlgorithm(IGeneticAlgorithmAdapter <TIndividual, TGene> adapter)
        {
            initialPopulation       = new Population <TIndividual, TGene>(SettingsAccessor.PopulationSize, SettingsAccessor.PopulationSize);
            currentGeneration       = new Population <TIndividual, TGene>(initialPopulation);
            nextGeneration          = new Population <TIndividual, TGene>(desiredSize: SettingsAccessor.PopulationSize);
            this.adapter            = adapter;
            CurrentGenerationNumber = 1;

            Initialised?.Invoke(new GaEventArgs <TIndividual, TGene>(initialPopulation, CurrentGenerationNumber));
        }
Beispiel #2
0
        /// <summary>
        /// Creates an instance of GA whose initial population contains certain individuals
        /// (+ additional random individuals if desired population size is larger than number of defined ones)
        /// </summary>
        /// <param name="adapter">GA Adapter to be used by the algorithm</param>
        /// <param name="include">Set of individuals to be included in the initial population</param>
        public GeneticAlgorithm(IGeneticAlgorithmAdapter <TIndividual, TGene> adapter, ICollection <TIndividual> include)
        {
            int possibleToInclude         = Math.Min(include.Count, SettingsAccessor.PopulationSize);
            int randomIndividualsRequired = SettingsAccessor.PopulationSize - possibleToInclude;

            initialPopulation = new Population <TIndividual, TGene>(randomIndividualsRequired, SettingsAccessor.PopulationSize);
            initialPopulation.AddRange(include.Take(possibleToInclude).ToArray());

            currentGeneration       = new Population <TIndividual, TGene>(initialPopulation);
            nextGeneration          = new Population <TIndividual, TGene>(desiredSize: SettingsAccessor.PopulationSize);
            this.adapter            = adapter;
            CurrentGenerationNumber = 1;

            Initialised?.Invoke(new GaEventArgs <TIndividual, TGene>(initialPopulation, CurrentGenerationNumber));
        }