示例#1
0
        public Genotype(int length, EvolutionStrategy algorithm)
        {
            EvolutionStrategy = algorithm;
            Length = length;

            Genes = GenerateGenes();
        }
示例#2
0
        public Genotype(int length, EvolutionStrategy algorithm)
        {
            EvolutionStrategy = algorithm;
            Length            = length;

            Genes = GenerateGenes();
        }
示例#3
0
        static void Main(string[] args)
        {
            int mu = 70; //liczba osobnikow w populacji P, parametr μ, mu
            int lambda = 230; // liczba osobnikow w populacji O, parametr sigma
            int generationSize = 250; //liczba mozliwych generacji populacji
            int genotypeSize = 2; //rozmiar genotypu, ilość wymiarów funkcji
            float mutationRate = 0.8F; //współczynnik mutacji
            float crossoverRate = 0.8F; //wspołczynnik krzyżowania

            var argsCount = args.Count();
            if (argsCount >= 1)
            {
                if (args[0] == "-help")
                {
                    Console.WriteLine("#### Optimization of Rosenbrock function. Enjoy! ####");
                    Console.WriteLine("Please use space between your parameters.");
                    Console.WriteLine("1. Size of population (μ parameter)");
                    Console.WriteLine("2. Size of next population (lambda parameter)");
                    Console.WriteLine("3. Size of generation");
                    Console.WriteLine("4. Size of genotype");
                    Console.WriteLine("5. Mutation rate <0,1>");
                    Console.WriteLine("6. Crossover rate <0,1>");
                    return;
                }
                else if (argsCount > 6 || argsCount < 0)
                {
                    Console.WriteLine("Wrong q-ty of given parameters. Type -help to see help msg.");
                    return;
                }
                else
                {
                    mu = Convert.ToInt32(args[0]);
                    lambda = Convert.ToInt32(args[1]);
                    generationSize = Convert.ToInt32(args[2]);
                    genotypeSize = Convert.ToInt32(args[3]);
                    mutationRate = Convert.ToSingle(args[4]);
                    crossoverRate = Convert.ToSingle(args[5]);
                }

            }
            Console.WriteLine("Start #Rosenbrock function optymalization. Use standard values....");

            //zmienne tymczasowe
            var function = new FunctionToOptimize(Function);
            var BestGenotypes = new List<double>();

            Console.WriteLine("Otrzymalem dane: ");
            Console.WriteLine("1. Rozmiar pierwszej populacji (mu): " + mu);
            Console.WriteLine("2. Rozmiar populacji potomków (sigma): " + lambda);
            Console.WriteLine("3. Liczba generacji: " + generationSize);
            Console.WriteLine("4. Prawdopodobieństwo mutacji <0,1>: " + mutationRate);
            Console.WriteLine("5. Prawdopodobieństwo krzyżowania: " + crossoverRate);
            Console.WriteLine("6. Rozmiar genotypu (argumentów funkcji): " + genotypeSize);
            var algorithm = new EvolutionStrategy(mu, lambda, generationSize, mutationRate, crossoverRate, genotypeSize, function);
            Program.results.WriteLine("Data: {0} Parametry: mu: {1} lambda: {2}", DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss"), mu, lambda);
            //wykonanie algorytmu dokladnie 10 razy
            for (int i = 1; i <= 10; i++)
            {
                Console.WriteLine();
                Console.WriteLine("Iteracja numer: " + i);
                Program.results.WriteLine("Iteracja numer: {0}. Poniżej najlepsze genotypy", i);
                algorithm.Run();
                Program.results.WriteLine("    BEST: {0}", algorithm.BestGenotype.Min().ToString("0.000000000"));
                Console.WriteLine("\t\tBEST: {0}", algorithm.BestGenotype.Min().ToString("0.000000000"));
                BestGenotypes.Add(algorithm.BestGenotype.Min());
            }

            Program.results.WriteLine("KONIEC: Najgorszy: {0}", BestGenotypes.Max().ToString("0.000000000"));
            Program.results.WriteLine("KONIEC: Średni: {0}", BestGenotypes.Average().ToString("0.000000000"));
            Program.results.WriteLine("KONIEC: Najlepszy: {0}", BestGenotypes.Min().ToString("0.000000000"));
            //zamkniecie pliku
            results.WriteLine();
            results.Close();
        }
示例#4
0
        static void Main(string[] args)
        {
            int   mu             = 70;   //liczba osobnikow w populacji P, parametr μ, mu
            int   lambda         = 230;  // liczba osobnikow w populacji O, parametr sigma
            int   generationSize = 250;  //liczba mozliwych generacji populacji
            int   genotypeSize   = 2;    //rozmiar genotypu, ilość wymiarów funkcji
            float mutationRate   = 0.8F; //współczynnik mutacji
            float crossoverRate  = 0.8F; //wspołczynnik krzyżowania

            var argsCount = args.Count();

            if (argsCount >= 1)
            {
                if (args[0] == "-help")
                {
                    Console.WriteLine("#### Optimization of Rosenbrock function. Enjoy! ####");
                    Console.WriteLine("Please use space between your parameters.");
                    Console.WriteLine("1. Size of population (μ parameter)");
                    Console.WriteLine("2. Size of next population (lambda parameter)");
                    Console.WriteLine("3. Size of generation");
                    Console.WriteLine("4. Size of genotype");
                    Console.WriteLine("5. Mutation rate <0,1>");
                    Console.WriteLine("6. Crossover rate <0,1>");
                    return;
                }
                else if (argsCount > 6 || argsCount < 0)
                {
                    Console.WriteLine("Wrong q-ty of given parameters. Type -help to see help msg.");
                    return;
                }
                else
                {
                    mu             = Convert.ToInt32(args[0]);
                    lambda         = Convert.ToInt32(args[1]);
                    generationSize = Convert.ToInt32(args[2]);
                    genotypeSize   = Convert.ToInt32(args[3]);
                    mutationRate   = Convert.ToSingle(args[4]);
                    crossoverRate  = Convert.ToSingle(args[5]);
                }
            }
            Console.WriteLine("Start #Rosenbrock function optymalization. Use standard values....");

            //zmienne tymczasowe
            var function      = new FunctionToOptimize(Function);
            var BestGenotypes = new List <double>();

            Console.WriteLine("Otrzymalem dane: ");
            Console.WriteLine("1. Rozmiar pierwszej populacji (mu): " + mu);
            Console.WriteLine("2. Rozmiar populacji potomków (sigma): " + lambda);
            Console.WriteLine("3. Liczba generacji: " + generationSize);
            Console.WriteLine("4. Prawdopodobieństwo mutacji <0,1>: " + mutationRate);
            Console.WriteLine("5. Prawdopodobieństwo krzyżowania: " + crossoverRate);
            Console.WriteLine("6. Rozmiar genotypu (argumentów funkcji): " + genotypeSize);
            var algorithm = new EvolutionStrategy(mu, lambda, generationSize, mutationRate, crossoverRate, genotypeSize, function);

            Program.results.WriteLine("Data: {0} Parametry: mu: {1} lambda: {2}", DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss"), mu, lambda);
            //wykonanie algorytmu dokladnie 10 razy
            for (int i = 1; i <= 10; i++)
            {
                Console.WriteLine();
                Console.WriteLine("Iteracja numer: " + i);
                Program.results.WriteLine("Iteracja numer: {0}. Poniżej najlepsze genotypy", i);
                algorithm.Run();
                Program.results.WriteLine("    BEST: {0}", algorithm.BestGenotype.Min().ToString("0.000000000"));
                Console.WriteLine("\t\tBEST: {0}", algorithm.BestGenotype.Min().ToString("0.000000000"));
                BestGenotypes.Add(algorithm.BestGenotype.Min());
            }

            Program.results.WriteLine("KONIEC: Najgorszy: {0}", BestGenotypes.Max().ToString("0.000000000"));
            Program.results.WriteLine("KONIEC: Średni: {0}", BestGenotypes.Average().ToString("0.000000000"));
            Program.results.WriteLine("KONIEC: Najlepszy: {0}", BestGenotypes.Min().ToString("0.000000000"));
            //zamkniecie pliku
            results.WriteLine();
            results.Close();
        }