Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- namespace ConsoleApp1
- {
- class Program
- {
- static void Main(string[] args)
- {
- //Komiwojażer
- int rozmiar;
- int[,] tablicaOdleglosci;
- string[] substrings;
- string linia;
- //czytanie lini z pliku odleglosci.txt
- using (StreamReader sr = new StreamReader(@"./odleglosci.txt"))
- {
- rozmiar = Convert.ToInt32(sr.ReadLine());
- //definiowanie tablicy o rozmiarach podanych w pliku .txt
- tablicaOdleglosci = new int[rozmiar, rozmiar];
- for(int i = 0; i < rozmiar; i++)
- {
- //ucinanie spacji z końca lini
- linia = sr.ReadLine().Trim();
- //dzielenie lini pliku .txt kiedy program napotka spacje
- substrings = linia.Split(' ');
- for(int j = 0; j < substrings.Length; j++)
- {
- tablicaOdleglosci[i, j] = Convert.ToInt32(substrings[j]);
- tablicaOdleglosci[j, i] = Convert.ToInt32(substrings[j]);
- }
- }
- //for (int i = 0; i < rozmiar; i++)
- //{
- // for(int j = 0; j < rozmiar; j++)
- // {
- // Console.Write(tablicaOdleglosci[i, j] + " ");
- // }
- // Console.WriteLine();
- //}
- }
- //Console.WriteLine("Zakończono zczytywanie danych.\n");
- //Console.WriteLine();
- //Console.ReadKey();
- //Console.Write("Ile tras(wierszy)?: ");
- //int liczbaTras = Convert.ToInt32(Console.ReadLine());
- //Console.WriteLine();
- //Console.Write("Ile miast(kolumn)?: ");
- //int liczbaMiast = Convert.ToInt32(Console.ReadLine());
- int liczbaTras = 20;
- int liczbaMiast = 10;
- int[,] tablicaMiast = GenerowanieMiast(liczbaTras, liczbaMiast);
- int[] tablicaOcen = Ocenianie(tablicaMiast, tablicaOdleglosci, liczbaTras, liczbaMiast);
- //Console.WriteLine("\nJakie należy przeprowadzić losowanie?\n" +
- // "1. Losowanie turniejowe.\n" +
- // "2. Losowanie ruletką.\n");
- //int x = Convert.ToInt32(Console.ReadLine());
- //int pom = 0;
- //bool pom2 = false;
- //do
- //{
- // switch (x)
- // {
- // case 1:
- // LosowanieTurniejowe(tablicaOcen, tablicaMiast, liczbaMiast);
- // pom2 = true;
- // pom++;
- // break;
- // case 2:
- // LosowanieRuletka(tablicaOcen, tablicaMiast, liczbaMiast);
- // pom++;
- // break;
- // default:
- // break;
- // }
- //}
- //while (pom < 1);
- double PKrzyzowania = 0.75; //0.75 do 0.9
- double PMutacji = 0.005; //0.005 do 0.25
- int[,] tablicaZwycieskiejPopulacji = LosowanieTurniejowe(tablicaOcen, tablicaMiast, liczbaMiast);
- //LosowanieRuletka(tablicaOcen, tablicaMiast, liczbaMiast);
- int[,] populacjaPoKrzyzowaniu = Krzyzowanie(tablicaZwycieskiejPopulacji, PKrzyzowania);
- int[,] populacjaPoMutacji = Mutacja(populacjaPoKrzyzowaniu, PMutacji);
- Console.ReadKey();
- }
- public static int[,] GenerowanieMiast(int liczbaTras, int liczbaMiast)
- {
- int[,] tablicaMiast = new int[liczbaTras,liczbaMiast];
- for (int i = 0; i < tablicaMiast.GetLength(0); i++)
- {
- for (int j = 0; j < liczbaMiast; j++)
- {
- tablicaMiast[i,j] = -1;
- }
- }
- int liczbaDrog = liczbaMiast;
- Random zmiennaLosowa = new Random();
- for (int i = 0; i < tablicaMiast.GetLength(0); i++)
- {
- for (int j = 0; j < liczbaDrog; j++)
- {
- int wylosowana;
- do
- {
- wylosowana = zmiennaLosowa.Next(0, liczbaMiast);
- }
- while (CzyWylosowano(wylosowana, tablicaMiast, i));
- tablicaMiast[i,j] = wylosowana;
- }
- }
- //Console.WriteLine("Wygenerowana tablica: ");
- //for (int i = 0; i < liczbaTras; i++)
- //{
- // for (int j = 0; j < liczbaDrog; j++)
- // {
- // Console.Write(tablicaMiast[i, j] + " ");
- // }
- // Console.WriteLine();
- //}
- //Console.WriteLine("\nLiczba miast wynosi " + liczbaMiast);
- //Console.WriteLine("Liczba tras/dróg wynosi " + liczbaTras);
- //Console.WriteLine();
- Console.ReadKey();
- return tablicaMiast;
- }
- public static bool CzyWylosowano(int wylosowana, int[,] tab_m, int i)
- {
- for (int b = 0; b < tab_m.GetLength(1); b++)
- {
- if (tab_m[i, b] == wylosowana)
- {
- return true;
- }
- }
- return false;
- }
- public static int[] Ocenianie(int[,] tablicaMiast, int[,] tablicaOdleglosci, int liczba_drog, int liczba_tras)
- {
- int[] tablicaOcen = new int[liczba_drog];
- int suma = 0;
- for(int i = 0; i < liczba_drog; i++)
- {
- for(int j = 0; j < liczba_tras; j++)
- {
- if (j != liczba_tras - 1)
- suma += tablicaOdleglosci[tablicaMiast[i, j], tablicaMiast[i, j + 1]];
- else
- suma += tablicaOdleglosci[tablicaMiast[i, j], tablicaMiast[i, 0]];
- }
- tablicaOcen[i] = suma;
- suma = 0;
- }
- //Console.WriteLine("Wyświetlanie tablicy ocen: \n");
- //for(int i = 0; i < liczba_drog; i++)
- //{
- // Console.Write("Ocena trasy nr " + i + ": " + tablicaOcen[i] + " \n");
- //}
- return tablicaOcen;
- }
- public static int[,] LosowanieTurniejowe(int[] tablicaOcen, int[,] tablicaMiast, int liczbaMiast)
- {
- //Console.Write("\nIle należy przeprowadzić losowań turniejowych?: ");
- //int liczbaLosowanTurniejowych = Convert.ToInt32(Console.ReadLine());
- int liczbaLosowanTurniejowych = 20;
- //Console.Write("\nIle obiektów ma brać udział w jednym losowaniu?: ");
- //int liczbaObiektowLosowaniaTurniejowego = Convert.ToInt32(Console.ReadLine());
- int liczbaObiektowLosowaniaTurniejowego = 2;
- int[] tablicaObiektowLosowaniaTurniejowego = new int[liczbaObiektowLosowaniaTurniejowego];
- int[,] tablicaWylosowanejPopulacji = new int[liczbaObiektowLosowaniaTurniejowego, liczbaMiast];
- int[,] tablicaZwycieskiejPopulacji = new int[liczbaLosowanTurniejowych, liczbaMiast];
- int liczbaWszystkichObiektow = tablicaOcen.Length;
- int zwycieskiIndex = 0;
- int los = 0;
- int min = 0;
- Random zmiennaLosowa = new Random();
- for (int losowanieTurniejowe_i = 0; losowanieTurniejowe_i < liczbaLosowanTurniejowych; losowanieTurniejowe_i++)
- {
- //Console.Write("Losowanie nr " + losowanieTurniejowe_i + ": \n");
- for (int i = 0; i < liczbaObiektowLosowaniaTurniejowego; i++)
- {
- do
- {
- los = zmiennaLosowa.Next(0, liczbaWszystkichObiektow);
- }
- while (CzyObiektIstnieje(los, tablicaObiektowLosowaniaTurniejowego));
- tablicaObiektowLosowaniaTurniejowego[i] = tablicaOcen[los];
- //Console.Write("Wylosowany osobnik to: ");
- for (int j = 0; j < tablicaMiast.GetLength(1); j++)
- {
- tablicaWylosowanejPopulacji[i, j] = tablicaMiast[los, j];
- //Console.Write(tablicaWylosowanejPopulacji[i, j] + " ");
- }
- //Console.Write(" a jego ocena to: ");
- //Console.Write(tablicaObiektowLosowaniaTurniejowego[i] + "\n");
- }
- min = tablicaObiektowLosowaniaTurniejowego[0];
- for (int j = 0; j < tablicaObiektowLosowaniaTurniejowego.Length; j++)
- {
- if (tablicaObiektowLosowaniaTurniejowego[j] < min)
- {
- min = tablicaObiektowLosowaniaTurniejowego[j];
- zwycieskiIndex = j;
- }
- }
- //Console.Write("\nZwycięzca z losowania nr " + losowanieTurniejowe_i + ": " + min + "\n");
- //Console.WriteLine("Zwycieski index z losowania to " + zwycieskiIndex);
- //Console.Write("\nZwyciezca z populacji to: ");
- //for (int i = 0; i < tablicaMiast.GetLength(1); i++)
- //{
- // Console.Write(tablicaWylosowanejPopulacji[zwycieskiIndex, i] + " ");
- //}
- //Console.WriteLine();
- for (int i = 0; i < tablicaMiast.GetLength(1); i++)
- {
- //Console.WriteLine("Wykonuje się " + i + " raz.");
- //Console.WriteLine("Do indexu [" + losowanieTurniejowe_i + "][" + i + "] wpisuję liczbę nr " + tablicaWylosowanejPopulacji[zwycieskiIndex, i]);
- tablicaZwycieskiejPopulacji[losowanieTurniejowe_i, i] = tablicaWylosowanejPopulacji[zwycieskiIndex, i];
- }
- //Console.WriteLine();
- }
- Console.Write("\nTablica zwycięskiej populacji losowania turniejowego: \n");
- for (int i = 0; i < tablicaZwycieskiejPopulacji.GetLength(0); i++)
- {
- for (int j = 0; j < tablicaZwycieskiejPopulacji.GetLength(1); j++)
- {
- Console.Write(tablicaZwycieskiejPopulacji[i, j] + " ");
- }
- Console.WriteLine();
- }
- Console.ReadKey();
- return tablicaZwycieskiejPopulacji;
- }
- public static bool CzyObiektIstnieje(int liczba, int[] tablica)
- {
- for (int i = 0; i < tablica.Length; i++)
- {
- if(tablica[i] == liczba)
- {
- return true;
- }
- }
- return false;
- }
- public static int[,] LosowanieRuletka(int[] tablicaOcen, int[,] tablicaMiast, int liczbaMiast)
- {
- Console.Write("\nIle należy przeprowadzić losowań ruletką? ");
- int liczbaLosowanRuletka = Convert.ToInt32(Console.ReadLine());
- Console.Write("\nIle obiektów bierze udział w losowaniu ruletką? ");
- int liczbaObiektowLosowaniaRuletka = Convert.ToInt32(Console.ReadLine());
- int liczbaWszystkichObiektow = tablicaOcen.Length;
- int[] tablicaObiektowLosowaniaRuletka = new int[liczbaObiektowLosowaniaRuletka];
- int[] przeksztalconaTablicaObiektowLosowaniaRuletka = new int[liczbaObiektowLosowaniaRuletka];
- int[] tablicaOtwarciaPrzedzialow = new int[liczbaObiektowLosowaniaRuletka];
- int[] tablicaZamknieciaPrzedzialow = new int[liczbaObiektowLosowaniaRuletka];
- int[,] tablicaWylosowanejPopulacji = new int[liczbaObiektowLosowaniaRuletka, liczbaMiast];
- int[,] tablicaZwycieskiejPopulacji = new int[liczbaLosowanRuletka, liczbaMiast];
- Random zmiennaLosowa = new Random();
- int los = 0;
- int max = 0;
- int zwycieskiIndex = 0;
- for (int losowanieRuletka_i = 0; losowanieRuletka_i < liczbaLosowanRuletka; losowanieRuletka_i++)
- {
- Console.Write("\n--------------------LOSOWANIE RULETKĄ NR " + (losowanieRuletka_i + 1) + "--------------------\n\n");
- for (int i = 0; i < liczbaObiektowLosowaniaRuletka; i++)
- {
- do
- {
- los = zmiennaLosowa.Next(0, liczbaWszystkichObiektow);
- }
- while (CzyObiektIstnieje(los, tablicaObiektowLosowaniaRuletka));
- tablicaObiektowLosowaniaRuletka[i] = tablicaOcen[los];
- Console.Write("Wylosowany osobnik to: ");
- for (int j = 0; j < tablicaMiast.GetLength(1); j++)
- {
- tablicaWylosowanejPopulacji[i, j] = tablicaMiast[los, j];
- Console.Write(tablicaWylosowanejPopulacji[i, j] + " ");
- }
- Console.Write(" a jego ocena to: ");
- Console.Write(tablicaObiektowLosowaniaRuletka[i] + "\n");
- }
- max = tablicaObiektowLosowaniaRuletka[0];
- for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
- {
- if (tablicaObiektowLosowaniaRuletka[j] > max)
- {
- max = tablicaObiektowLosowaniaRuletka[j];
- }
- }
- Console.WriteLine("\nNajwiększa wartość z wylosowanych obiektów to: " + max + "\n");
- max += 1;
- int sumaPrzeksztalconychObiektow = 0;
- for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
- {
- przeksztalconaTablicaObiektowLosowaniaRuletka[j] = max - tablicaObiektowLosowaniaRuletka[j];
- sumaPrzeksztalconychObiektow = sumaPrzeksztalconychObiektow + przeksztalconaTablicaObiektowLosowaniaRuletka[j];
- Console.Write("Przekształcony obiekt nr " + j + ": " + przeksztalconaTablicaObiektowLosowaniaRuletka[j] + "\n");
- }
- Console.WriteLine("\nSuma przeksztalconych obiektow z losowania ruletką wynosi: " + sumaPrzeksztalconychObiektow + "\n");
- int losowanieRuletka = zmiennaLosowa.Next(0, sumaPrzeksztalconychObiektow);
- Console.WriteLine("Wylosowana liczba to: " + losowanieRuletka);
- tablicaOtwarciaPrzedzialow[0] = 0;
- tablicaZamknieciaPrzedzialow[0] = przeksztalconaTablicaObiektowLosowaniaRuletka[0];
- for (int j = 1; j < liczbaObiektowLosowaniaRuletka; j++)
- {
- tablicaZamknieciaPrzedzialow[j] = tablicaZamknieciaPrzedzialow[j - 1] + przeksztalconaTablicaObiektowLosowaniaRuletka[j];
- tablicaOtwarciaPrzedzialow[j] = tablicaZamknieciaPrzedzialow[j] - przeksztalconaTablicaObiektowLosowaniaRuletka[j];
- }
- //Console.WriteLine("Otwarcia przedziałów: ");
- //for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
- //{
- // Console.Write("Indeks nr " + j + ": " + tablicaA[j] + " \n");
- //}
- //Console.WriteLine("Zamknięcia przedziałów: ");
- //for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
- //{
- // Console.Write("Indeks nr " + j + ": " + tablicaB[j] + " \n");
- //}
- for (int j = 0; j < przeksztalconaTablicaObiektowLosowaniaRuletka.Length; j++)
- {
- Console.Write("Sprawdzam przedział zawierający się od <" + tablicaOtwarciaPrzedzialow[j] + "," + tablicaZamknieciaPrzedzialow[j] + "): ");
- if (losowanieRuletka >= tablicaOtwarciaPrzedzialow[j] && losowanieRuletka < tablicaZamknieciaPrzedzialow[j])
- {
- Console.Write("TO TEN PRZEDZIAŁ!\n");
- zwycieskiIndex = j;
- }
- else
- {
- Console.Write("To nie ten przedział\n");
- }
- }
- Console.WriteLine("Zwycięski index: " + zwycieskiIndex);
- Console.Write("\nZwyciezca z populacji to: ");
- for (int i = 0; i < tablicaMiast.GetLength(1); i++)
- {
- Console.Write(tablicaWylosowanejPopulacji[zwycieskiIndex, i] + " ");
- }
- for (int i = 0; i < tablicaMiast.GetLength(1); i++)
- {
- //Console.WriteLine("Wykonuje się " + i + " raz.");
- //Console.WriteLine("Do indexu [" + losowanieRuletka_i + "][" + i + "] wpisuję liczbę nr " + tablicaWylosowanejPopulacji[zwycieskiIndex, i]);
- tablicaZwycieskiejPopulacji[losowanieRuletka_i, i] = tablicaWylosowanejPopulacji[zwycieskiIndex, i];
- }
- Console.WriteLine();
- }
- Console.Write("\nTablica zwycięskiej populacji losowania ruletką: \n");
- for (int i = 0; i < tablicaZwycieskiejPopulacji.GetLength(0); i++)
- {
- for (int j = 0; j < tablicaZwycieskiejPopulacji.GetLength(1); j++)
- {
- Console.Write(tablicaZwycieskiejPopulacji[i, j] + " ");
- }
- Console.WriteLine();
- }
- return tablicaZwycieskiejPopulacji;
- }
- public static int[,] Krzyzowanie(int[,] tablicaPopulacji, double PKrzyzowania)
- {
- int[,] tablicaPopulacjiPoKrzyzowaniu = tablicaPopulacji; //do usuniecia po zrobieniu metody
- int[] tablicaPotomek1 = new int[tablicaPopulacji.GetLength(1)];
- int[] tablicaPotomek2 = new int[tablicaPopulacji.GetLength(1)];
- int[] tablicapom = new int[tablicaPopulacji.GetLength(1)];
- int[] tablicapom2 = new int[tablicaPopulacji.GetLength(1)];
- //GetLength(1) zwróci liczbe miast w jednej trasie
- //GetLength(0) zwróci liczbe wszystkich tras
- Random zmiennaLosowaPrzedzialow = new Random();
- Random zmiennaLosowaPrawdopodobienstwa = new Random();
- int los1 = 0;
- int los2 = 0;
- double p = 0;
- int otwarciePrzedzialu;
- int zamknieciePrzedzialu;
- int wartoscElementu = 0;
- int indexElementu = 0;
- Console.WriteLine("\n\n");
- Console.ReadKey();
- Console.WriteLine("TABLICA GOTOWA DO KRZYZOWANIA: ");
- for (int x = 0; x < tablicaPopulacjiPoKrzyzowaniu.GetLength(0); x++)
- {
- for (int y = 0; y < tablicaPopulacjiPoKrzyzowaniu.GetLength(1); y++)
- {
- Console.Write(tablicaPopulacjiPoKrzyzowaniu[x, y] + " ");
- }
- Console.WriteLine();
- }
- for (int i = 0; i < tablicaPopulacjiPoKrzyzowaniu.GetLength(0) - 1; i++)
- {
- p = zmiennaLosowaPrawdopodobienstwa.NextDouble();
- Console.WriteLine(p);
- los1 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length - 1);
- los2 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length - 1);
- Console.WriteLine("Wylosowane zmienne: " + los1 + " i " + los2);
- if (los1 >= los2)
- {
- otwarciePrzedzialu = los2;
- zamknieciePrzedzialu = los1;
- }
- else
- {
- otwarciePrzedzialu = los1;
- zamknieciePrzedzialu = los2;
- }
- Console.WriteLine("<" + otwarciePrzedzialu + ";" + zamknieciePrzedzialu + ">");
- if (p >= PKrzyzowania)
- {
- //while(los2 >= los1)
- //{
- // los1 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length);
- // los2 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length);
- //}
- for (int j = 0; j < tablicaPotomek1.Length; j++)
- {
- tablicaPotomek1[j] = -1;
- tablicaPotomek2[j] = -1;
- }
- //Console.WriteLine("Tablica pomocnicza 1");
- for (int j = 0; j < tablicaPopulacji.GetLength(1); j++)
- {
- tablicapom[j] = tablicaPopulacji[i, j];
- //Console.Write(tablicapom[j] + " ");
- }
- //Console.WriteLine();
- //Console.WriteLine("Tablica pomocnicza 1");
- for (int j = 0; j < tablicaPopulacji.GetLength(1); j++)
- {
- tablicapom2[j] = tablicaPopulacji[i + 1, j];
- //Console.Write(tablicapom2[j] + " ");
- }
- for (int j = los1; j <= los2; j++)
- {
- tablicaPotomek1[j] = tablicapom2[j];
- }
- for (int j = los1; j <= los2; j++)
- {
- tablicaPotomek2[j] = tablicapom[j];
- }
- for (int j = 0; j < tablicaPopulacji.GetLength(1); j++)
- {
- if (j < otwarciePrzedzialu || j > zamknieciePrzedzialu)
- {
- wartoscElementu = tablicaPopulacjiPoKrzyzowaniu[i, j];
- if (CzyObiektIstnieje(wartoscElementu, tablicaPotomek1))
- {
- while (CzyObiektIstnieje(wartoscElementu, tablicaPotomek1))
- {
- indexElementu = ZbadajIndex(wartoscElementu, tablicaPotomek1);
- wartoscElementu = tablicaPotomek2[indexElementu];
- }
- tablicaPotomek1[j] = wartoscElementu;
- }
- else
- {
- tablicaPotomek1[j] = wartoscElementu;
- }
- //Drugi potomek
- wartoscElementu = tablicaPopulacjiPoKrzyzowaniu[i + 1, j];
- if (CzyObiektIstnieje(wartoscElementu, tablicaPotomek2))
- {
- while (CzyObiektIstnieje(wartoscElementu, tablicaPotomek2))
- {
- indexElementu = ZbadajIndex(wartoscElementu, tablicaPotomek2);
- wartoscElementu = tablicaPotomek1[indexElementu];
- }
- tablicaPotomek2[j] = wartoscElementu;
- }
- else
- {
- tablicaPotomek2[j] = wartoscElementu;
- }
- }
- for (int k = 0; k < tablicaPopulacjiPoKrzyzowaniu.GetLength(1); j++)
- {
- tablicaPopulacjiPoKrzyzowaniu[i, k] = tablicaPotomek1[k];
- tablicaPopulacjiPoKrzyzowaniu[i + 1, k] = tablicaPotomek2[k];
- //Console.WriteLine("Wpisano kolumne " + k + "/" + (tablicaPopulacjiPoKrzyzowaniu.GetLength(1) - 1));
- }
- //Console.WriteLine("Tablica Potomek1: ");
- //Console.WriteLine();
- //for (int k = 0; k < tablicaPotomek1.Length; k++)
- //{
- // Console.Write(tablicaPotomek1[k] + " ");
- //}
- //Console.WriteLine();
- //Console.WriteLine("Tablica Potomek2: ");
- //Console.WriteLine();
- //for (int k = 0; k < tablicaPotomek2.Length; k++)
- //{
- // Console.Write(tablicaPotomek2[k] + " ");
- //}
- //Console.WriteLine();
- }
- //Console.WriteLine("Skrzyżowano wiersz " + i + " z wierszem " + (i + 1));
- i++;
- }
- else
- {
- i++;
- }
- }
- Console.ReadKey();
- Console.WriteLine("\n\nTablica po krzyżowaniu: ");
- for (int x = 0; x < tablicaPopulacjiPoKrzyzowaniu.GetLength(0); x++)
- {
- for (int y = 0; y < tablicaPopulacjiPoKrzyzowaniu.GetLength(1); y++)
- {
- Console.Write(tablicaPopulacjiPoKrzyzowaniu[x, y] + " ");
- }
- Console.WriteLine();
- }
- Console.Write("Zakończono krzyżowanie tablicy");
- return tablicaPopulacjiPoKrzyzowaniu;
- }
- public static int ZbadajIndex(int wartosc, int[] tablica1)
- {
- int IndexNum = 0;
- for (int i = 0; i < tablica1.Length; i++)
- {
- if(wartosc == tablica1[i])
- {
- IndexNum = i;
- }
- }
- return IndexNum;
- }
- public static int[,] Mutacja(int[,] tablicaPopulacji, double PMutacji)
- {
- int[,] tablicaPopulacjiPoMutacji = tablicaPopulacji; //do usuniecia po zrobieniu metody
- return tablicaPopulacjiPoMutacji;
- }
- }
- }
- /* Krzyżowanie:
- * jednopunktowe, dwupunktowe, n-punktowe
- *
- * Jednopunktowe:
- * 1001101001 = 100110 | 1001 \/ 100110 | 1010 = 1001101010
- * 0100101010 = 010010 | 1010 /\ 010010 | 1001 = 0100101001
- *
- * Dwupunktowe: dwa miejsca krzyżowań
- * N-punktowe: N miejsc krzyżowań
- *
- * Prawdopodobieństwo krzyżowania = 0.75 do 0.95
- *
- *
- *
- * Mutowanie:
- *
- * Przez zamianę lub przez inwersję
- *
- * Przez inwersję: dwa punkty krzyżowania (w przykladzie tylko jeden bo słaby obiekt)
- *
- * 100001 = 100 | 001 X 100 | 100 = 100100
- *
- * Przez zamianę: zmiana poszczegółnych komórek.
- * Prawdopodobieństwo mutacji przez zamianę: 0,005 do 0,25
- */
Advertisement
Add Comment
Please, Sign In to add comment