Пример #1
0
        public void ukrstanje(Jedinka roditelj1, Jedinka roditelj2, double k, Jedinka dete1, Jedinka dete2)
        {
            int prag = (int)(Gradovi.cBrojGradova * rnd.NextDouble());

            int[] ht1 = new int[Gradovi.cBrojGradova];
            int[] ht2 = new int[Gradovi.cBrojGradova];
            for (int i = 0; i < Gradovi.cBrojGradova; i++)
            {
                ht1[i] = 0;
                ht2[i] = 0;
            }
            for (int i = 0; i < prag; i++)
            {
                //TODO 5: Prebaciti vrednosti hromozoma i oznaciti koji su to prebaceni hromozomi
            }

            //TODO 6: Dopuniti ukrstanje za preostali deo dece
            for (int i = prag; i < Gradovi.cBrojGradova; i++)
            {
                // za prvo dete ostatak trazi u drugom roditelju
                for (int j = 0; j < Gradovi.cBrojGradova; j++)
                {
                    int x = (i + j) % Gradovi.cBrojGradova;
                }
                // za drugo dete ostatak trazi u prvom roditelju
                for (int j = 0; j < Gradovi.cBrojGradova; j++)
                {
                    int x = (i + j) % Gradovi.cBrojGradova;
                }
            }// for preostali deo dece
        }
Пример #2
0
        private void btnAlgoritam_Click(object sender, EventArgs e)
        {
            Console.WriteLine("-------------------------");
            Jedinka resenje = ga.genetskiAlgoritam(gradoviPanel1);

            gradoviPanel1.resenje = resenje;
            gradoviPanel1.Refresh();
        }
Пример #3
0
 public Populacija()
 {
     jedinke = new Jedinka[velicinaPopulacije];
     for (int i = 0; i < velicinaPopulacije; i++)
     {
         jedinke[i] = new Jedinka();
     }
 }
Пример #4
0
 public Jedinka(Jedinka aJedinka)
 {
     hromozomi = new int[Gradovi.cBrojGradova];
     for (int i = 0; i < Gradovi.cBrojGradova; i++)
     {
         hromozomi[i] = aJedinka.hromozomi[i];
     }
 }
Пример #5
0
        private void btnAlgoritam_Click(object sender, EventArgs e)
        {
            Console.WriteLine("-------------------------");
            Jedinka resenje = ga.genetskiAlgoritam(gradoviPanel1);

            lblOcena.Text         = "Ocena:" + ga.najbolja.fitness(ga.gradovi);
            gradoviPanel1.resenje = resenje;
            gradoviPanel1.Refresh();
        }
Пример #6
0
 public void mutacija(double k, Jedinka j)
 {
     //TODO 3: Implementirati operaciju mutacije
     for (int i = 0; i < Gradovi.cBrojGradova; i++)
     {
         double prag = rnd.NextDouble();
         if (prag < k)
         {
             int pos = (int)(Gradovi.cBrojGradova * rnd.NextDouble());
             int tmp = j.hromozomi[i];
             j.hromozomi[i]   = j.hromozomi[pos];
             j.hromozomi[pos] = tmp;
         }
     }
 }
Пример #7
0
        public void jednaIteracija(GradoviPanel panel)
        {
            iteracija++;
            //roditelji.print(g);
            double suma = roditelji.sumaOcena(gradovi);
            // na osnovu prethodne populacije kreiraj novu
            // elitizam
            int     najbolji = roditelji.maxOcena(gradovi);
            Jedinka elitna   = roditelji.jedinke[najbolji];

            najbolja      = elitna;
            panel.resenje = najbolja;
            panel.Refresh();

            deca.jedinke[0] = new Jedinka(elitna);
            deca.jedinke[1] = new Jedinka(elitna);
            // ostali
            for (int i = 1; i < roditelji.jedinke.Length / 2; i++)
            {
                // selekcija roditelj1
                int roditelj1Int = roditelji.selekcija(gradovi, suma);
                // selekcija roditelj2
                int     roditelj2Int = roditelji.selekcija(gradovi, suma);
                Jedinka A            = new Jedinka(roditelji.jedinke[roditelj1Int]);
                Jedinka B            = new Jedinka(roditelji.jedinke[roditelj2Int]);
                Jedinka a            = new Jedinka(roditelji.jedinke[roditelj1Int]);
                Jedinka b            = new Jedinka(roditelji.jedinke[roditelj2Int]);

                roditelji.ukrstanje(A, B, cUkrstanje, a, b);
                // mutacija dete1
                deca.mutacija(cMutacija, a);
                // mutacija dete2
                deca.mutacija(cMutacija, b);
                deca.jedinke[i * 2]     = a;
                deca.jedinke[i * 2 + 1] = b;
            }
            roditelji = deca;
            deca      = new Populacija();
        }
Пример #8
0
 public void mutacija(double k, Jedinka j)
 {
     //TODO 3: Implementirati operaciju mutacije
 }