private void GenerirajPocetnuGeneraciju() { for (int i = 0; i < velicinaPopulacije; i++) { Kromosom kromosom = new Kromosom(donjaGranicaVrijednosti, gornjaGranicaVrijednosti, brojZnamenkiPreciznostiRjesenja, brojVrijednostiUKromosomu); kromosomi.Add(kromosom); } }
private double FunkcijaKorisnik(Kromosom kromosom) { double[] vrijednosti = kromosom.vrijednosti; double x1 = vrijednosti[0]; double x2 = vrijednosti[1]; return(x1 * x1 + x2 * x2); }
double F(Kromosom kromosom) { switch (oznakaFunkcije) { case 1: return(Funkcija1(kromosom.vrijednosti)); case 2: return(Funkcija2(kromosom.vrijednosti)); case 3: return(Funkcija3(kromosom.vrijednosti)); case 4: return(Funkcija4(kromosom.vrijednosti)); case 0: return(FunkcijaKorisnik(kromosom)); default: return(0); } }
private void ObaviKrizanje(Kromosom dijete, Kromosom roditelj1, Kromosom roditelj2) { int duljinaVrijednosti = (int)Math.Ceiling(Math.Log(((double)(gornjaGranicaVrijednosti - donjaGranicaVrijednosti) * Math.Pow(10.0, brojZnamenkiPreciznostiRjesenja) + 1))); int[] binarniPrikazDjeteta = new int[duljinaVrijednosti * brojVrijednostiUKromosomu]; for (int i = 0; i < duljinaVrijednosti * brojVrijednostiUKromosomu; i++) { int v1 = roditelj1.binarniPrikaz[i]; int v2 = roditelj2.binarniPrikaz[i]; //binarniPrikazDjeteta[i] = v1 + v2 - v1 * v2; if (v1 == v2) { binarniPrikazDjeteta[i] = v1; } else { binarniPrikazDjeteta[i] = random.Next(0, 2); } } dijete.PostaviBinarniPrikazIOsvjezi(binarniPrikazDjeteta); }