コード例 #1
0
        public CataclysmModule(PopulationInitialization initialization, int percentage, int epochs)
        {
            epochCount     = 0;
            epochThreshold = epochs;
            Action         = population =>
            {
                if (epochCount++ != epochThreshold)
                {
                    return;
                }

                epochCount = 0;
                int populationSize = population.Length;
                int eliminated     = populationSize - populationSize * (100 - percentage) / 100;

                int[][] newIndividuals           = initialization.InitializePopulation(population[0], populationSize, population[0][0]);
                var     populationAfterCataclysm = population.Take(populationSize - eliminated).Concat(newIndividuals).ToArray();
                for (int i = 0; i < populationSize; i++)
                {
                    for (int j = 0; j < population[0].Length; j++)
                    {
                        population[i][j] = populationAfterCataclysm[i][j];
                    }
                }
            };
        }
コード例 #2
0
        public static PopulationInitialization CreatePopulationInitialization(PopulationInitializationMethod method, Random random)
        {
            PopulationInitialization initialization = method switch
            {
                PopulationInitializationMethod.UniformInitialization => new UniformInitialization(random),
                PopulationInitializationMethod.NonUniformInitialization => new NonUniformInitialization(random),
                PopulationInitializationMethod.StandardPathInitialization => new StandardPathInitialization(random),
                PopulationInitializationMethod.PreferedCloseDistancePathInitialization =>
                new PreferedCloseDistancePathInitialization(random),
                _ => throw new ArgumentException("Wrong population initialization method name")
            };

            return(initialization);
        }