void mutacija(Jedinka jedinka, double prag) { //za svaki gen u hromozomu jednike se generise slucajni broj koji odlucuje da li se taj bit invertuje for (int i = 0; i < Jedinka.MAXSTRING; ++i) { double slucajanBroj = rand.NextDouble(); if (slucajanBroj < prag) { jedinka.chromosome[i] = 1 - jedinka.chromosome[i]; } } jedinka.x = jedinka.bin2double(jedinka.chromosome); //TODO 11: Ne zaboraviti promeniti double vrednost i druge promenljive jedinka.x2 = jedinka.bin2double2(jedinka.chromosome); }
void ukrstanje(Jedinka jedinka1, Jedinka jedinka2, double prag) { //za svaki gen se generise slucajan broj koji odlucuje da li ce se zameniti geni u dve jedinke for (int i = 0; i < Jedinka.MAXSTRING; ++i) { double slucajanBroj = rand.NextDouble(); if (slucajanBroj < prag) { int temp = jedinka1.chromosome[i]; jedinka1.chromosome[i] = jedinka2.chromosome[i]; jedinka2.chromosome[i] = temp; } } //Jedinka sadrzi i normalnu predstavu broja, mi smo menjali kodiranu predstavu, pa nju treba uskladiti jedinka1.x = jedinka1.bin2double(jedinka1.chromosome); jedinka2.x = jedinka2.bin2double(jedinka2.chromosome); //TODO 9: Ne zaboraviti promeniti double vrednost i druge promenljive jedinka1.x2 = jedinka1.bin2double2(jedinka1.chromosome); jedinka2.x2 = jedinka2.bin2double2(jedinka2.chromosome); }
void ukrstanje2(Jedinka jedinka1, Jedinka jedinka2) { //jedinka1 treba da bude N roditelj 1 - M roditelj 2 - N roditelj 1 //jedinka2 treba da bude N roditelj 2 - M roditelj 1 - N roditelj 2 int N = rand.Next(0, Jedinka.MAXSTRING / 2); //slucajno se generise N int M = Jedinka.MAXSTRING - 2 * N; //menja se centralnih M hromozoma for (int i = N; i < N + M; ++i) { int temp = jedinka1.chromosome[i]; jedinka1.chromosome[i] = jedinka2.chromosome[i]; jedinka2.chromosome[i] = temp; } //Jedinka sadrzi i normalnu predstavu broja, mi smo menjali kodiranu predstavu, pa nju treba uskladiti jedinka1.x = jedinka1.bin2double(jedinka1.chromosome); jedinka2.x = jedinka2.bin2double(jedinka2.chromosome); //TODO 10: Ne zaboraviti promeniti double vrednost i druge promenljive jedinka1.x2 = jedinka1.bin2double2(jedinka1.chromosome); jedinka2.x2 = jedinka2.bin2double2(jedinka2.chromosome); }