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 }
private void btnAlgoritam_Click(object sender, EventArgs e) { Console.WriteLine("-------------------------"); Jedinka resenje = ga.genetskiAlgoritam(gradoviPanel1); gradoviPanel1.resenje = resenje; gradoviPanel1.Refresh(); }
public Populacija() { jedinke = new Jedinka[velicinaPopulacije]; for (int i = 0; i < velicinaPopulacije; i++) { jedinke[i] = new Jedinka(); } }
public Jedinka(Jedinka aJedinka) { hromozomi = new int[Gradovi.cBrojGradova]; for (int i = 0; i < Gradovi.cBrojGradova; i++) { hromozomi[i] = aJedinka.hromozomi[i]; } }
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(); }
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; } } }
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(); }
public void mutacija(double k, Jedinka j) { //TODO 3: Implementirati operaciju mutacije }