Example #1
0
        static void Main(string[] args)
        {
            var    r                  = new Random(DateTime.Now.Millisecond);
            var    p                  = new pole();
            double sumaFitness        = 0;
            double maxFitnessJedinca  = 0;
            var    descendingComparer = Comparer <int> .Create((x, y) => y.CompareTo(x));

            var  generacia = 1;
            bool koniec    = false;

            var elite          = new List <jedinec>();
            var povodniJedinci = new List <jedinec>();
            var jedinci        = new List <jedinec>();

            Console.WriteLine("Zadaj velkost populacie: (100)");
            var vp = Console.ReadLine();
            var velkostPopulacie = Convert.ToInt32(vp);
            var napln            = velkostPopulacie;

            Console.WriteLine("Zadaj typ selekcie - 1 pre ruletu, 2 pre turnaj:");
            var vyb = Console.ReadLine();
            var typ = Convert.ToInt32(vyb);

            Console.WriteLine("Zadaj pocet jedincov, ktori sa maju vytvorit novi krizenim: (70)");
            var ko    = Console.ReadLine();
            var kolko = Convert.ToInt32(ko);

            var pocetInstr = 500;

            Console.WriteLine("Chces zadat maximalny pocet instrukcii, ktore moze jedinec vykonat? Default je 500. Ano/Nie?:");
            var rozhodnutie = Console.ReadLine();

            if (rozhodnutie.ToLower() == "ano")
            {
                Console.WriteLine("Zadaj pocet:");
                var ins = Console.ReadLine();
                pocetInstr = Convert.ToInt32(ins);
            }

            while (napln-- > 0)
            {
                jedinci.Add(new jedinec(r));
            }


            var vypis = 100;

            while (!koniec)        // tu je cyklus v ktorom vsetko bezi, jedinci sa krizia
            {
                /*if (generacia == 1 || generacia % vypis == 0 || p.pocetPokladov == 5)
                 * {
                 *  Console.WriteLine("---------- Generacia: " + generacia + " ----------");
                 * }*/

                maxFitnessJedinca = 0;
                sumaFitness       = 0;
                foreach (var j in jedinci)
                {
                    var steps = j.run(pocetInstr);
                    j.fitness    = p.fitness(steps);
                    sumaFitness += j.fitness;
                    if (p.pocetPokladov == 5)
                    {
                        koniec = true;
                    }

                    if (maxFitnessJedinca > j.fitness)
                    {
                        maxFitnessJedinca *= 1;
                    }
                    else
                    {
                        maxFitnessJedinca = j.fitness;
                    }

                    if (p.pocetPokladov == 5)
                    {
                        Console.WriteLine("Koniec! Nasli sme vsetky poklady.");
                        Console.WriteLine("Generacia: " + generacia);
                        Console.WriteLine("Suma fitness doterajsich jedincov: " + sumaFitness);
                        Console.WriteLine("Konecna fitness jedinca: " + j.fitness);       // vypisuje fitness
                        Console.WriteLine("Vysledne kroky:");
                        var s = string.Join(" ", steps.Select(x => x.ToString()));
                        Console.WriteLine(s);       // vypisuje postupnost krokov
                        Console.WriteLine("Pocet najdenych pokladov: " + p.pocetPokladov);
                        Console.WriteLine();
                    }
                }

                //jedinci.AddRange(elite);

                /*if (generacia == 1 || generacia % vypis == 0)
                 * {
                 *  Console.WriteLine("Suma fitness: " + sumaFitness + " Max fitness jedinca: " + maxFitnessJedinca);
                 * }*/

                if (generacia == 1 || generacia % 10000 == 0)
                {
                    Console.WriteLine("Hladam poklady...");
                }


                //povodniJedinci = jedinci.ToList();
                povodniJedinci.AddRange(jedinci);
                jedinci.Clear();
                if (typ == 1)
                {
                    jedinci = ruleta(sumaFitness, povodniJedinci, kolko).ToList();
                }
                else if (typ == 2)
                {
                    jedinci = turnaj(povodniJedinci, kolko).ToList();
                }

                if (kolko < velkostPopulacie)
                {
                    for (int i = 0; i < (velkostPopulacie - kolko); i++)
                    {
                        jedinci.Add(new jedinec(r));
                    }
                }
                povodniJedinci.Clear();

                /*elite.Clear();
                 * for(int t = 0; t < 5; t++)
                 * {
                 *  elite.Add(jedinci[t]);
                 * }*/

                generacia++;
            }

            Console.Read();
        }