int[] GeneticAlgorythm() { string fName = "C:\\Users\\user\\Documents\\GitHub\\SI-Inteligentna_Smieciarka\\Śmieciarka\\dataWasteland.cjc"; IFormatter formatter = new BinaryFormatter(); int[] alpha = board1; Plansze generation = new Plansze(); if (File.Exists(fName)) { Plansze a = Plansze.DeserializeItem(fName, formatter); generation.plansza1 = a.plansza1; generation.plansza2 = a.plansza2; generation.plansza3 = a.plansza3; generation.plansza4 = a.plansza4; } else { //Plansze z 4 śmietniskami generation.plansza1 = Generate(Generate(board1)); generation.plansza2 = Generate(Generate(board2)); //Plansze z 2 śmietniskami generation.plansza3 = Generate(board3); generation.plansza4 = Generate(board4); } //Ocenianie osobników int mark1 = WaterDistance(generation.plansza1) + EntranceProximity(generation.plansza1) + CityDistance(generation.plansza1) + WasteDistance(generation.plansza1); int mark2 = WaterDistance(generation.plansza2) + EntranceProximity(generation.plansza2) + CityDistance(generation.plansza2) + WasteDistance(generation.plansza2); int mark3 = WaterDistance(generation.plansza3) + EntranceProximity(generation.plansza3) + CityDistance(generation.plansza3) + WasteDistance(generation.plansza3); int mark4 = WaterDistance(generation.plansza4) + EntranceProximity(generation.plansza4) + CityDistance(generation.plansza4) + WasteDistance(generation.plansza4); int[] marks = { mark1, mark2, mark3, mark4 }; string info = "Początek:\n" + WaterDistance(generation.plansza1) + " " + EntranceProximity(generation.plansza1) + " " + CityDistance(generation.plansza1) + " " + WasteDistance(generation.plansza1) + "\n" + " " + WaterDistance(generation.plansza2) + " " + EntranceProximity(generation.plansza2) + " " + CityDistance(generation.plansza2) + " " + WasteDistance(generation.plansza2) + "\n" + " " + WaterDistance(generation.plansza3) + " " + EntranceProximity(generation.plansza3) + " " + CityDistance(generation.plansza3) + " " + WasteDistance(generation.plansza3) + "\n" + " " + WaterDistance(generation.plansza4) + " " + EntranceProximity(generation.plansza4) + " " + CityDistance(generation.plansza4) + " " + WasteDistance(generation.plansza4) + "\n"; //542 teraz return(alpha); }
int[] AlgorythmGenetic() { // This is the name of the file holding the data. You can use any file extension you like. string fileName = "C:\\Users\\user\\Documents\\GitHub\\SI-Inteligentna_Smieciarka\\Śmieciarka\\dataOsobniki.cjc"; // Use a BinaryFormatter or SoapFormatter. IFormatter formatter = new BinaryFormatter(); int[] osobnik = plansza1; //generacja genów Plansze osobniki = new Plansze(); if (File.Exists(fileName)) { Plansze a = Plansze.DeserializeItem(fileName, formatter); // Deserialize the instance. osobniki.plansza1 = a.plansza1; osobniki.plansza2 = a.plansza2; osobniki.plansza3 = a.plansza3; osobniki.plansza4 = a.plansza4; } else { //generacja genów osobniki.plansza1 = Generuj(Generuj(Generuj(plansza1))); osobniki.plansza2 = Generuj(Generuj(Generuj(plansza2))); osobniki.plansza3 = Generuj(Generuj(Generuj(Generuj(plansza3)))); osobniki.plansza4 = Generuj(Generuj(plansza4)); } //ocena genów int ocena1 = Filtr1(osobniki.plansza1) + Filtr2(osobniki.plansza1, 1) + Filtr2(osobniki.plansza1, 2) + Filtr2(osobniki.plansza1, 3) + Filtr4(osobniki.plansza1); int ocena2 = Filtr1(osobniki.plansza2) + Filtr2(osobniki.plansza2, 1) + Filtr2(osobniki.plansza2, 2) + Filtr2(osobniki.plansza2, 3) + Filtr4(osobniki.plansza2); int ocena3 = Filtr1(osobniki.plansza3) + Filtr2(osobniki.plansza3, 1) + Filtr2(osobniki.plansza3, 2) + Filtr2(osobniki.plansza3, 3) + Filtr4(osobniki.plansza3); int ocena4 = Filtr1(osobniki.plansza4) + Filtr2(osobniki.plansza4, 1) + Filtr2(osobniki.plansza4, 2) + Filtr2(osobniki.plansza4, 3) + Filtr4(osobniki.plansza4); string wiadomosc = "start:\n" + Filtr1(osobniki.plansza1) + " " + Filtr2(osobniki.plansza1, 1) + " " + Filtr2(osobniki.plansza1, 2) + " " + Filtr2(osobniki.plansza1, 3) + " " + Filtr3(osobniki.plansza1) + " " + Filtr4(osobniki.plansza1) + " " + Filtr5(osobniki.plansza1) + "\n" + Filtr1(osobniki.plansza2) + " " + Filtr2(osobniki.plansza2, 1) + " " + Filtr2(osobniki.plansza2, 2) + " " + Filtr2(osobniki.plansza2, 3) + " " + Filtr3(osobniki.plansza2) + " " + Filtr4(osobniki.plansza2) + " " + Filtr5(osobniki.plansza2) + "\n" + Filtr1(osobniki.plansza3) + " " + Filtr2(osobniki.plansza3, 1) + " " + Filtr2(osobniki.plansza3, 2) + " " + Filtr2(osobniki.plansza3, 3) + " " + Filtr3(osobniki.plansza3) + " " + Filtr4(osobniki.plansza3) + " " + Filtr5(osobniki.plansza3) + "\n" + Filtr1(osobniki.plansza4) + " " + Filtr2(osobniki.plansza4, 1) + " " + Filtr2(osobniki.plansza4, 2) + " " + Filtr2(osobniki.plansza4, 3) + " " + Filtr3(osobniki.plansza4) + " " + Filtr4(osobniki.plansza4) + " " + Filtr5(osobniki.plansza4) + "\n"; int[] tabela_ocen = { ocena1, ocena2, ocena3, ocena4 }; for (int i = 0; i < 4; i++) { if (tabela_ocen[i] < 1) { tabela_ocen[i] = 1; } } int ilosc_skrzyzowan = 0; int suma_ocen; int[] szansa = new int[3]; wiadomosc = wiadomosc + "Tabela ocen: " + tabela_ocen[0] + " " + tabela_ocen[1] + " " + tabela_ocen[2] + " " + tabela_ocen[3] + "\n"; while (ilosc_skrzyzowan < 20) { suma_ocen = tabela_ocen[0] + tabela_ocen[1] + tabela_ocen[2] + tabela_ocen[3]; wiadomosc = wiadomosc + "Suma ocen: " + suma_ocen + "\n"; for (int i = 0; i < 3; i++) { if (suma_ocen != 0) { szansa[i] = (tabela_ocen[i] * 100) / suma_ocen; } else { szansa[i] = 0; } } int wybrany_osobnik11 = Random.Range(1, 101); wiadomosc = wiadomosc + "Wylosowany numer: " + wybrany_osobnik11 + "\nszanse wylosowania: " + szansa[0] + " " + szansa[1] + " " + szansa[2] + "\nWylosowane osobniki: "; if (wybrany_osobnik11 <= szansa[0]) { int wybrany_osobnik12 = Random.Range(szansa[0] + 1, 101); if (wybrany_osobnik12 <= szansa[0] + szansa[1]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza3 = Mutacja(osobniki.plansza1); } else { osobniki.plansza3 = osobniki.plansza1; } if (mutacja2 == 20) { osobniki.plansza4 = Mutacja(osobniki.plansza2); } else { osobniki.plansza4 = osobniki.plansza2; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza1, osobniki.plansza2); osobniki.plansza1 = wynik_skrzyrzowania.plansza1; osobniki.plansza2 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "12\n"; } if (wybrany_osobnik12 > szansa[0] + szansa[1] && wybrany_osobnik12 <= szansa[0] + szansa[1] + szansa[2]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza2 = Mutacja(osobniki.plansza1); } else { osobniki.plansza2 = osobniki.plansza1; } if (mutacja2 == 20) { osobniki.plansza4 = Mutacja(osobniki.plansza3); } else { osobniki.plansza4 = osobniki.plansza3; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza1, osobniki.plansza3); osobniki.plansza1 = wynik_skrzyrzowania.plansza1; osobniki.plansza3 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "13\n"; } if (wybrany_osobnik12 > szansa[0] + szansa[1] + szansa[2]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza2 = Mutacja(osobniki.plansza1); } else { osobniki.plansza2 = osobniki.plansza1; } if (mutacja2 == 20) { osobniki.plansza3 = Mutacja(osobniki.plansza4); } else { osobniki.plansza3 = osobniki.plansza4; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza1, osobniki.plansza4); osobniki.plansza1 = wynik_skrzyrzowania.plansza1; osobniki.plansza4 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "14\n"; } } if (wybrany_osobnik11 > szansa[0] && wybrany_osobnik11 <= szansa[0] + szansa[1]) { int wybrany_osobnik13 = Random.Range(1, 101); while (wybrany_osobnik13 > szansa[0] && wybrany_osobnik13 <= szansa[0] + szansa[1]) { wybrany_osobnik13 = Random.Range(1, 101); } if (wybrany_osobnik13 <= szansa[0]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza3 = Mutacja(osobniki.plansza2); } else { osobniki.plansza3 = osobniki.plansza2; } if (mutacja2 == 20) { osobniki.plansza4 = Mutacja(osobniki.plansza1); } else { osobniki.plansza4 = osobniki.plansza1; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza2, osobniki.plansza1); osobniki.plansza1 = wynik_skrzyrzowania.plansza1; osobniki.plansza2 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "21\n"; } if (wybrany_osobnik13 > szansa[0] + szansa[1] && wybrany_osobnik13 <= szansa[0] + szansa[1] + szansa[2]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza1 = Mutacja(osobniki.plansza2); } else { osobniki.plansza1 = osobniki.plansza2; } if (mutacja2 == 20) { osobniki.plansza4 = Mutacja(osobniki.plansza3); } else { osobniki.plansza4 = osobniki.plansza3; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza2, osobniki.plansza3); osobniki.plansza3 = wynik_skrzyrzowania.plansza1; osobniki.plansza2 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "23\n"; } if (wybrany_osobnik13 > szansa[0] + szansa[1] + szansa[2]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza1 = Mutacja(osobniki.plansza2); } else { osobniki.plansza1 = osobniki.plansza2; } if (mutacja2 == 20) { osobniki.plansza3 = Mutacja(osobniki.plansza4); } else { osobniki.plansza3 = osobniki.plansza4; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza2, osobniki.plansza4); osobniki.plansza4 = wynik_skrzyrzowania.plansza1; osobniki.plansza2 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "24\n"; } } if (wybrany_osobnik11 > szansa[0] + szansa[1] && wybrany_osobnik11 <= szansa[0] + szansa[1] + szansa[2]) { int wybrany_osobnik14 = Random.Range(1, 101); while (wybrany_osobnik14 > szansa[0] + szansa[1] && wybrany_osobnik14 <= szansa[0] + szansa[1] + szansa[2]) { wybrany_osobnik14 = Random.Range(1, 101); } if (wybrany_osobnik14 <= szansa[0]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza2 = Mutacja(osobniki.plansza3); } else { osobniki.plansza2 = osobniki.plansza3; } if (mutacja2 == 20) { osobniki.plansza4 = Mutacja(osobniki.plansza1); } else { osobniki.plansza4 = osobniki.plansza1; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza3, osobniki.plansza1); osobniki.plansza1 = wynik_skrzyrzowania.plansza1; osobniki.plansza3 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "31\n"; } if (wybrany_osobnik14 > szansa[0] && wybrany_osobnik14 <= szansa[0] + szansa[1]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza1 = Mutacja(osobniki.plansza3); } else { osobniki.plansza1 = osobniki.plansza3; } if (mutacja2 == 20) { osobniki.plansza4 = Mutacja(osobniki.plansza2); } else { osobniki.plansza4 = osobniki.plansza2; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza3, osobniki.plansza2); osobniki.plansza2 = wynik_skrzyrzowania.plansza1; osobniki.plansza3 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "32\n"; } if (wybrany_osobnik14 > szansa[0] + szansa[1] + szansa[2]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza1 = Mutacja(osobniki.plansza3); } else { osobniki.plansza1 = osobniki.plansza3; } if (mutacja2 == 20) { osobniki.plansza2 = Mutacja(osobniki.plansza4); } else { osobniki.plansza2 = osobniki.plansza4; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza3, osobniki.plansza4); osobniki.plansza4 = wynik_skrzyrzowania.plansza1; osobniki.plansza3 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "34\n"; } } if (wybrany_osobnik11 > szansa[0] + szansa[1] + szansa[2]) { int wybrany_osobnik15 = Random.Range(1, szansa[0] + szansa[1] + szansa[2] + 1); if (wybrany_osobnik15 <= szansa[0]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza2 = Mutacja(osobniki.plansza4); } else { osobniki.plansza2 = osobniki.plansza4; } if (mutacja2 == 20) { osobniki.plansza3 = Mutacja(osobniki.plansza1); } else { osobniki.plansza3 = osobniki.plansza1; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza4, osobniki.plansza1); osobniki.plansza1 = wynik_skrzyrzowania.plansza1; osobniki.plansza4 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "41\n"; } if (wybrany_osobnik15 > szansa[0] && wybrany_osobnik15 <= szansa[0] + szansa[1]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza1 = Mutacja(osobniki.plansza4); } else { osobniki.plansza1 = osobniki.plansza4; } if (mutacja2 == 20) { osobniki.plansza3 = Mutacja(osobniki.plansza2); } else { osobniki.plansza3 = osobniki.plansza2; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza4, osobniki.plansza2); osobniki.plansza2 = wynik_skrzyrzowania.plansza1; osobniki.plansza4 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "42\n"; } if (wybrany_osobnik15 > szansa[0] + szansa[1] && wybrany_osobnik15 <= szansa[0] + szansa[1] + szansa[2]) { int mutacja1 = Random.Range(1, 21); int mutacja2 = Random.Range(1, 21); if (mutacja1 == 20) { osobniki.plansza1 = Mutacja(osobniki.plansza4); } else { osobniki.plansza1 = osobniki.plansza4; } if (mutacja2 == 20) { osobniki.plansza2 = Mutacja(osobniki.plansza3); } else { osobniki.plansza2 = osobniki.plansza3; } Plansze wynik_skrzyrzowania = Skrzyzowanie(osobniki.plansza4, osobniki.plansza3); osobniki.plansza3 = wynik_skrzyrzowania.plansza1; osobniki.plansza4 = wynik_skrzyrzowania.plansza2; wiadomosc = wiadomosc + "43\n"; } } tabela_ocen[0] = Filtr1(osobniki.plansza1) + Filtr2(osobniki.plansza1, 1) + Filtr2(osobniki.plansza1, 2) + Filtr2(osobniki.plansza1, 3) + Filtr4(osobniki.plansza1); tabela_ocen[1] = Filtr1(osobniki.plansza2) + Filtr2(osobniki.plansza2, 1) + Filtr2(osobniki.plansza2, 2) + Filtr2(osobniki.plansza2, 3) + Filtr4(osobniki.plansza2); tabela_ocen[2] = Filtr1(osobniki.plansza3) + Filtr2(osobniki.plansza3, 1) + Filtr2(osobniki.plansza3, 2) + Filtr2(osobniki.plansza3, 3) + Filtr4(osobniki.plansza3); tabela_ocen[3] = Filtr1(osobniki.plansza4) + Filtr2(osobniki.plansza4, 1) + Filtr2(osobniki.plansza4, 2) + Filtr2(osobniki.plansza4, 3) + Filtr4(osobniki.plansza4); for (int i = 0; i < 4; i++) { if (tabela_ocen[i] < 1) { tabela_ocen[i] = 1; } } ilosc_skrzyzowan++; } wiadomosc = wiadomosc + "\n" + Filtr1(osobniki.plansza1) + " " + Filtr2(osobniki.plansza1, 1) + " " + Filtr2(osobniki.plansza1, 2) + " " + Filtr2(osobniki.plansza1, 3) + " " + Filtr3(osobniki.plansza1) + " " + Filtr4(osobniki.plansza1) + " " + Filtr5(osobniki.plansza1) + "\n" + Filtr1(osobniki.plansza2) + " " + Filtr2(osobniki.plansza2, 1) + " " + Filtr2(osobniki.plansza2, 2) + " " + Filtr2(osobniki.plansza2, 3) + " " + Filtr3(osobniki.plansza2) + " " + Filtr4(osobniki.plansza2) + " " + Filtr5(osobniki.plansza2) + "\n" + Filtr1(osobniki.plansza3) + " " + Filtr2(osobniki.plansza3, 1) + " " + Filtr2(osobniki.plansza3, 2) + " " + Filtr2(osobniki.plansza3, 3) + " " + Filtr3(osobniki.plansza3) + " " + Filtr4(osobniki.plansza3) + " " + Filtr5(osobniki.plansza3) + "\n" + Filtr1(osobniki.plansza4) + " " + Filtr2(osobniki.plansza4, 1) + " " + Filtr2(osobniki.plansza4, 2) + " " + Filtr2(osobniki.plansza4, 3) + " " + Filtr3(osobniki.plansza4) + " " + Filtr4(osobniki.plansza4) + " " + Filtr5(osobniki.plansza4) + "\n"; Plansze.SerializeItem(fileName, formatter, osobniki); // Serialize an instance of the class. int max = ocena1; int numer = 0; for (int i = 1; i < 4; i++) { if (max < tabela_ocen[i]) { max = tabela_ocen[i]; numer = i; } } if (numer == 0) { osobnik = osobniki.plansza1; } if (numer == 1) { osobnik = osobniki.plansza2; } if (numer == 2) { osobnik = osobniki.plansza3; } if (numer == 3) { osobnik = osobniki.plansza4; } wiadomosc = wiadomosc + "Wybrany osobnik: " + numer; string[] wiadomoscie = { wiadomosc }; System.IO.File.WriteAllLines("C:\\Users\\user\\Documents\\GitHub\\SI-Inteligentna_Smieciarka\\Śmieciarka\\wiadomosc.txt", wiadomoscie); return(osobnik); }