Guest User

Untitled

a guest
Jan 3rd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.19 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7.  
  8. namespace ConsoleApp1
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14.  
  15. //Komiwojażer
  16.  
  17. int rozmiar;
  18. int[,] tablicaOdleglosci;
  19. string[] substrings;
  20.  
  21. string linia;
  22.  
  23. //czytanie lini z pliku odleglosci.txt
  24. using (StreamReader sr = new StreamReader(@"./odleglosci.txt"))
  25. {
  26. rozmiar = Convert.ToInt32(sr.ReadLine());
  27.  
  28. //definiowanie tablicy o rozmiarach podanych w pliku .txt
  29. tablicaOdleglosci = new int[rozmiar, rozmiar];
  30.  
  31. for(int i = 0; i < rozmiar; i++)
  32. {
  33. //ucinanie spacji z końca lini
  34. linia = sr.ReadLine().Trim();
  35.  
  36. //dzielenie lini pliku .txt kiedy program napotka spacje
  37. substrings = linia.Split(' ');
  38.  
  39. for(int j = 0; j < substrings.Length; j++)
  40. {
  41. tablicaOdleglosci[i, j] = Convert.ToInt32(substrings[j]);
  42. tablicaOdleglosci[j, i] = Convert.ToInt32(substrings[j]);
  43. }
  44. }
  45.  
  46. //for (int i = 0; i < rozmiar; i++)
  47. //{
  48. // for(int j = 0; j < rozmiar; j++)
  49. // {
  50. // Console.Write(tablicaOdleglosci[i, j] + " ");
  51. // }
  52. // Console.WriteLine();
  53. //}
  54. }
  55.  
  56. //Console.WriteLine("Zakończono zczytywanie danych.\n");
  57. //Console.WriteLine();
  58. //Console.ReadKey();
  59.  
  60. //Console.Write("Ile tras(wierszy)?: ");
  61. //int liczbaTras = Convert.ToInt32(Console.ReadLine());
  62.  
  63. //Console.WriteLine();
  64.  
  65. //Console.Write("Ile miast(kolumn)?: ");
  66. //int liczbaMiast = Convert.ToInt32(Console.ReadLine());
  67.  
  68. int liczbaTras = 20;
  69. int liczbaMiast = 10;
  70.  
  71. int[,] tablicaMiast = GenerowanieMiast(liczbaTras, liczbaMiast);
  72. int[] tablicaOcen = Ocenianie(tablicaMiast, tablicaOdleglosci, liczbaTras, liczbaMiast);
  73.  
  74. //Console.WriteLine("\nJakie należy przeprowadzić losowanie?\n" +
  75. // "1. Losowanie turniejowe.\n" +
  76. // "2. Losowanie ruletką.\n");
  77. //int x = Convert.ToInt32(Console.ReadLine());
  78.  
  79. //int pom = 0;
  80. //bool pom2 = false;
  81. //do
  82. //{
  83. // switch (x)
  84. // {
  85. // case 1:
  86. // LosowanieTurniejowe(tablicaOcen, tablicaMiast, liczbaMiast);
  87. // pom2 = true;
  88. // pom++;
  89. // break;
  90.  
  91. // case 2:
  92. // LosowanieRuletka(tablicaOcen, tablicaMiast, liczbaMiast);
  93. // pom++;
  94. // break;
  95.  
  96. // default:
  97. // break;
  98. // }
  99. //}
  100. //while (pom < 1);
  101.  
  102. double PKrzyzowania = 0.75; //0.75 do 0.9
  103. double PMutacji = 0.005; //0.005 do 0.25
  104.  
  105. int[,] tablicaZwycieskiejPopulacji = LosowanieTurniejowe(tablicaOcen, tablicaMiast, liczbaMiast);
  106. //LosowanieRuletka(tablicaOcen, tablicaMiast, liczbaMiast);
  107.  
  108.  
  109.  
  110. int[,] populacjaPoKrzyzowaniu = Krzyzowanie(tablicaZwycieskiejPopulacji, PKrzyzowania);
  111.  
  112. int[,] populacjaPoMutacji = Mutacja(populacjaPoKrzyzowaniu, PMutacji);
  113.  
  114.  
  115. Console.ReadKey();
  116. }
  117.  
  118.  
  119.  
  120. public static int[,] GenerowanieMiast(int liczbaTras, int liczbaMiast)
  121. {
  122. int[,] tablicaMiast = new int[liczbaTras,liczbaMiast];
  123.  
  124. for (int i = 0; i < tablicaMiast.GetLength(0); i++)
  125. {
  126. for (int j = 0; j < liczbaMiast; j++)
  127. {
  128. tablicaMiast[i,j] = -1;
  129. }
  130. }
  131.  
  132. int liczbaDrog = liczbaMiast;
  133.  
  134. Random zmiennaLosowa = new Random();
  135.  
  136. for (int i = 0; i < tablicaMiast.GetLength(0); i++)
  137. {
  138. for (int j = 0; j < liczbaDrog; j++)
  139. {
  140. int wylosowana;
  141. do
  142. {
  143. wylosowana = zmiennaLosowa.Next(0, liczbaMiast);
  144. }
  145. while (CzyWylosowano(wylosowana, tablicaMiast, i));
  146.  
  147. tablicaMiast[i,j] = wylosowana;
  148. }
  149.  
  150. }
  151.  
  152. //Console.WriteLine("Wygenerowana tablica: ");
  153.  
  154. //for (int i = 0; i < liczbaTras; i++)
  155. //{
  156. // for (int j = 0; j < liczbaDrog; j++)
  157. // {
  158. // Console.Write(tablicaMiast[i, j] + " ");
  159. // }
  160. // Console.WriteLine();
  161. //}
  162.  
  163. //Console.WriteLine("\nLiczba miast wynosi " + liczbaMiast);
  164. //Console.WriteLine("Liczba tras/dróg wynosi " + liczbaTras);
  165. //Console.WriteLine();
  166.  
  167. Console.ReadKey();
  168.  
  169. return tablicaMiast;
  170.  
  171. }
  172.  
  173.  
  174.  
  175.  
  176. public static bool CzyWylosowano(int wylosowana, int[,] tab_m, int i)
  177. {
  178. for (int b = 0; b < tab_m.GetLength(1); b++)
  179. {
  180. if (tab_m[i, b] == wylosowana)
  181. {
  182. return true;
  183. }
  184. }
  185.  
  186. return false;
  187. }
  188.  
  189.  
  190.  
  191.  
  192. public static int[] Ocenianie(int[,] tablicaMiast, int[,] tablicaOdleglosci, int liczba_drog, int liczba_tras)
  193. {
  194. int[] tablicaOcen = new int[liczba_drog];
  195. int suma = 0;
  196.  
  197. for(int i = 0; i < liczba_drog; i++)
  198. {
  199. for(int j = 0; j < liczba_tras; j++)
  200. {
  201. if (j != liczba_tras - 1)
  202. suma += tablicaOdleglosci[tablicaMiast[i, j], tablicaMiast[i, j + 1]];
  203. else
  204. suma += tablicaOdleglosci[tablicaMiast[i, j], tablicaMiast[i, 0]];
  205. }
  206. tablicaOcen[i] = suma;
  207. suma = 0;
  208. }
  209.  
  210. //Console.WriteLine("Wyświetlanie tablicy ocen: \n");
  211.  
  212. //for(int i = 0; i < liczba_drog; i++)
  213. //{
  214. // Console.Write("Ocena trasy nr " + i + ": " + tablicaOcen[i] + " \n");
  215. //}
  216.  
  217. return tablicaOcen;
  218. }
  219.  
  220.  
  221.  
  222.  
  223. public static int[,] LosowanieTurniejowe(int[] tablicaOcen, int[,] tablicaMiast, int liczbaMiast)
  224. {
  225. //Console.Write("\nIle należy przeprowadzić losowań turniejowych?: ");
  226. //int liczbaLosowanTurniejowych = Convert.ToInt32(Console.ReadLine());
  227. int liczbaLosowanTurniejowych = 20;
  228.  
  229. //Console.Write("\nIle obiektów ma brać udział w jednym losowaniu?: ");
  230. //int liczbaObiektowLosowaniaTurniejowego = Convert.ToInt32(Console.ReadLine());
  231. int liczbaObiektowLosowaniaTurniejowego = 2;
  232.  
  233. int[] tablicaObiektowLosowaniaTurniejowego = new int[liczbaObiektowLosowaniaTurniejowego];
  234. int[,] tablicaWylosowanejPopulacji = new int[liczbaObiektowLosowaniaTurniejowego, liczbaMiast];
  235. int[,] tablicaZwycieskiejPopulacji = new int[liczbaLosowanTurniejowych, liczbaMiast];
  236.  
  237. int liczbaWszystkichObiektow = tablicaOcen.Length;
  238.  
  239. int zwycieskiIndex = 0;
  240.  
  241. int los = 0;
  242. int min = 0;
  243.  
  244. Random zmiennaLosowa = new Random();
  245.  
  246. for (int losowanieTurniejowe_i = 0; losowanieTurniejowe_i < liczbaLosowanTurniejowych; losowanieTurniejowe_i++)
  247. {
  248. //Console.Write("Losowanie nr " + losowanieTurniejowe_i + ": \n");
  249.  
  250. for (int i = 0; i < liczbaObiektowLosowaniaTurniejowego; i++)
  251. {
  252. do
  253. {
  254. los = zmiennaLosowa.Next(0, liczbaWszystkichObiektow);
  255. }
  256. while (CzyObiektIstnieje(los, tablicaObiektowLosowaniaTurniejowego));
  257.  
  258. tablicaObiektowLosowaniaTurniejowego[i] = tablicaOcen[los];
  259.  
  260. //Console.Write("Wylosowany osobnik to: ");
  261. for (int j = 0; j < tablicaMiast.GetLength(1); j++)
  262. {
  263. tablicaWylosowanejPopulacji[i, j] = tablicaMiast[los, j];
  264. //Console.Write(tablicaWylosowanejPopulacji[i, j] + " ");
  265. }
  266. //Console.Write(" a jego ocena to: ");
  267.  
  268. //Console.Write(tablicaObiektowLosowaniaTurniejowego[i] + "\n");
  269.  
  270. }
  271.  
  272. min = tablicaObiektowLosowaniaTurniejowego[0];
  273.  
  274. for (int j = 0; j < tablicaObiektowLosowaniaTurniejowego.Length; j++)
  275. {
  276. if (tablicaObiektowLosowaniaTurniejowego[j] < min)
  277. {
  278. min = tablicaObiektowLosowaniaTurniejowego[j];
  279. zwycieskiIndex = j;
  280. }
  281. }
  282.  
  283. //Console.Write("\nZwycięzca z losowania nr " + losowanieTurniejowe_i + ": " + min + "\n");
  284.  
  285. //Console.WriteLine("Zwycieski index z losowania to " + zwycieskiIndex);
  286.  
  287. //Console.Write("\nZwyciezca z populacji to: ");
  288. //for (int i = 0; i < tablicaMiast.GetLength(1); i++)
  289. //{
  290. // Console.Write(tablicaWylosowanejPopulacji[zwycieskiIndex, i] + " ");
  291. //}
  292.  
  293. //Console.WriteLine();
  294.  
  295. for (int i = 0; i < tablicaMiast.GetLength(1); i++)
  296. {
  297. //Console.WriteLine("Wykonuje się " + i + " raz.");
  298. //Console.WriteLine("Do indexu [" + losowanieTurniejowe_i + "][" + i + "] wpisuję liczbę nr " + tablicaWylosowanejPopulacji[zwycieskiIndex, i]);
  299.  
  300. tablicaZwycieskiejPopulacji[losowanieTurniejowe_i, i] = tablicaWylosowanejPopulacji[zwycieskiIndex, i];
  301. }
  302.  
  303. //Console.WriteLine();
  304. }
  305.  
  306. Console.Write("\nTablica zwycięskiej populacji losowania turniejowego: \n");
  307.  
  308. for (int i = 0; i < tablicaZwycieskiejPopulacji.GetLength(0); i++)
  309. {
  310. for (int j = 0; j < tablicaZwycieskiejPopulacji.GetLength(1); j++)
  311. {
  312. Console.Write(tablicaZwycieskiejPopulacji[i, j] + " ");
  313. }
  314. Console.WriteLine();
  315. }
  316.  
  317. Console.ReadKey();
  318.  
  319.  
  320. return tablicaZwycieskiejPopulacji;
  321. }
  322.  
  323.  
  324.  
  325.  
  326. public static bool CzyObiektIstnieje(int liczba, int[] tablica)
  327. {
  328. for (int i = 0; i < tablica.Length; i++)
  329. {
  330. if(tablica[i] == liczba)
  331. {
  332. return true;
  333. }
  334. }
  335.  
  336. return false;
  337. }
  338.  
  339.  
  340.  
  341.  
  342. public static int[,] LosowanieRuletka(int[] tablicaOcen, int[,] tablicaMiast, int liczbaMiast)
  343. {
  344. Console.Write("\nIle należy przeprowadzić losowań ruletką? ");
  345. int liczbaLosowanRuletka = Convert.ToInt32(Console.ReadLine());
  346.  
  347. Console.Write("\nIle obiektów bierze udział w losowaniu ruletką? ");
  348. int liczbaObiektowLosowaniaRuletka = Convert.ToInt32(Console.ReadLine());
  349.  
  350. int liczbaWszystkichObiektow = tablicaOcen.Length;
  351.  
  352. int[] tablicaObiektowLosowaniaRuletka = new int[liczbaObiektowLosowaniaRuletka];
  353. int[] przeksztalconaTablicaObiektowLosowaniaRuletka = new int[liczbaObiektowLosowaniaRuletka];
  354. int[] tablicaOtwarciaPrzedzialow = new int[liczbaObiektowLosowaniaRuletka];
  355. int[] tablicaZamknieciaPrzedzialow = new int[liczbaObiektowLosowaniaRuletka];
  356. int[,] tablicaWylosowanejPopulacji = new int[liczbaObiektowLosowaniaRuletka, liczbaMiast];
  357. int[,] tablicaZwycieskiejPopulacji = new int[liczbaLosowanRuletka, liczbaMiast];
  358.  
  359. Random zmiennaLosowa = new Random();
  360. int los = 0;
  361.  
  362. int max = 0;
  363. int zwycieskiIndex = 0;
  364.  
  365. for (int losowanieRuletka_i = 0; losowanieRuletka_i < liczbaLosowanRuletka; losowanieRuletka_i++)
  366. {
  367.  
  368. Console.Write("\n--------------------LOSOWANIE RULETKĄ NR " + (losowanieRuletka_i + 1) + "--------------------\n\n");
  369.  
  370. for (int i = 0; i < liczbaObiektowLosowaniaRuletka; i++)
  371. {
  372. do
  373. {
  374. los = zmiennaLosowa.Next(0, liczbaWszystkichObiektow);
  375. }
  376. while (CzyObiektIstnieje(los, tablicaObiektowLosowaniaRuletka));
  377.  
  378. tablicaObiektowLosowaniaRuletka[i] = tablicaOcen[los];
  379.  
  380. Console.Write("Wylosowany osobnik to: ");
  381. for (int j = 0; j < tablicaMiast.GetLength(1); j++)
  382. {
  383. tablicaWylosowanejPopulacji[i, j] = tablicaMiast[los, j];
  384. Console.Write(tablicaWylosowanejPopulacji[i, j] + " ");
  385. }
  386. Console.Write(" a jego ocena to: ");
  387.  
  388. Console.Write(tablicaObiektowLosowaniaRuletka[i] + "\n");
  389. }
  390.  
  391. max = tablicaObiektowLosowaniaRuletka[0];
  392.  
  393. for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
  394. {
  395. if (tablicaObiektowLosowaniaRuletka[j] > max)
  396. {
  397. max = tablicaObiektowLosowaniaRuletka[j];
  398. }
  399. }
  400.  
  401. Console.WriteLine("\nNajwiększa wartość z wylosowanych obiektów to: " + max + "\n");
  402.  
  403. max += 1;
  404.  
  405. int sumaPrzeksztalconychObiektow = 0;
  406.  
  407. for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
  408. {
  409. przeksztalconaTablicaObiektowLosowaniaRuletka[j] = max - tablicaObiektowLosowaniaRuletka[j];
  410.  
  411. sumaPrzeksztalconychObiektow = sumaPrzeksztalconychObiektow + przeksztalconaTablicaObiektowLosowaniaRuletka[j];
  412.  
  413. Console.Write("Przekształcony obiekt nr " + j + ": " + przeksztalconaTablicaObiektowLosowaniaRuletka[j] + "\n");
  414. }
  415.  
  416. Console.WriteLine("\nSuma przeksztalconych obiektow z losowania ruletką wynosi: " + sumaPrzeksztalconychObiektow + "\n");
  417.  
  418. int losowanieRuletka = zmiennaLosowa.Next(0, sumaPrzeksztalconychObiektow);
  419.  
  420. Console.WriteLine("Wylosowana liczba to: " + losowanieRuletka);
  421.  
  422. tablicaOtwarciaPrzedzialow[0] = 0;
  423. tablicaZamknieciaPrzedzialow[0] = przeksztalconaTablicaObiektowLosowaniaRuletka[0];
  424.  
  425. for (int j = 1; j < liczbaObiektowLosowaniaRuletka; j++)
  426. {
  427. tablicaZamknieciaPrzedzialow[j] = tablicaZamknieciaPrzedzialow[j - 1] + przeksztalconaTablicaObiektowLosowaniaRuletka[j];
  428. tablicaOtwarciaPrzedzialow[j] = tablicaZamknieciaPrzedzialow[j] - przeksztalconaTablicaObiektowLosowaniaRuletka[j];
  429. }
  430.  
  431. //Console.WriteLine("Otwarcia przedziałów: ");
  432. //for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
  433. //{
  434. // Console.Write("Indeks nr " + j + ": " + tablicaA[j] + " \n");
  435. //}
  436.  
  437. //Console.WriteLine("Zamknięcia przedziałów: ");
  438. //for (int j = 0; j < liczbaObiektowLosowaniaRuletka; j++)
  439. //{
  440. // Console.Write("Indeks nr " + j + ": " + tablicaB[j] + " \n");
  441. //}
  442.  
  443. for (int j = 0; j < przeksztalconaTablicaObiektowLosowaniaRuletka.Length; j++)
  444. {
  445. Console.Write("Sprawdzam przedział zawierający się od <" + tablicaOtwarciaPrzedzialow[j] + "," + tablicaZamknieciaPrzedzialow[j] + "): ");
  446.  
  447. if (losowanieRuletka >= tablicaOtwarciaPrzedzialow[j] && losowanieRuletka < tablicaZamknieciaPrzedzialow[j])
  448. {
  449. Console.Write("TO TEN PRZEDZIAŁ!\n");
  450. zwycieskiIndex = j;
  451. }
  452. else
  453. {
  454. Console.Write("To nie ten przedział\n");
  455. }
  456. }
  457.  
  458. Console.WriteLine("Zwycięski index: " + zwycieskiIndex);
  459.  
  460. Console.Write("\nZwyciezca z populacji to: ");
  461. for (int i = 0; i < tablicaMiast.GetLength(1); i++)
  462. {
  463. Console.Write(tablicaWylosowanejPopulacji[zwycieskiIndex, i] + " ");
  464. }
  465.  
  466. for (int i = 0; i < tablicaMiast.GetLength(1); i++)
  467. {
  468. //Console.WriteLine("Wykonuje się " + i + " raz.");
  469. //Console.WriteLine("Do indexu [" + losowanieRuletka_i + "][" + i + "] wpisuję liczbę nr " + tablicaWylosowanejPopulacji[zwycieskiIndex, i]);
  470.  
  471. tablicaZwycieskiejPopulacji[losowanieRuletka_i, i] = tablicaWylosowanejPopulacji[zwycieskiIndex, i];
  472. }
  473.  
  474. Console.WriteLine();
  475.  
  476. }
  477.  
  478. Console.Write("\nTablica zwycięskiej populacji losowania ruletką: \n");
  479.  
  480. for (int i = 0; i < tablicaZwycieskiejPopulacji.GetLength(0); i++)
  481. {
  482. for (int j = 0; j < tablicaZwycieskiejPopulacji.GetLength(1); j++)
  483. {
  484. Console.Write(tablicaZwycieskiejPopulacji[i, j] + " ");
  485. }
  486. Console.WriteLine();
  487. }
  488.  
  489. return tablicaZwycieskiejPopulacji;
  490. }
  491.  
  492.  
  493.  
  494.  
  495. public static int[,] Krzyzowanie(int[,] tablicaPopulacji, double PKrzyzowania)
  496. {
  497. int[,] tablicaPopulacjiPoKrzyzowaniu = tablicaPopulacji; //do usuniecia po zrobieniu metody
  498. int[] tablicaPotomek1 = new int[tablicaPopulacji.GetLength(1)];
  499. int[] tablicaPotomek2 = new int[tablicaPopulacji.GetLength(1)];
  500.  
  501. int[] tablicapom = new int[tablicaPopulacji.GetLength(1)];
  502. int[] tablicapom2 = new int[tablicaPopulacji.GetLength(1)];
  503.  
  504. //GetLength(1) zwróci liczbe miast w jednej trasie
  505. //GetLength(0) zwróci liczbe wszystkich tras
  506.  
  507. Random zmiennaLosowaPrzedzialow = new Random();
  508. Random zmiennaLosowaPrawdopodobienstwa = new Random();
  509.  
  510. int los1 = 0;
  511. int los2 = 0;
  512. double p = 0;
  513.  
  514. int otwarciePrzedzialu;
  515. int zamknieciePrzedzialu;
  516.  
  517. int wartoscElementu = 0;
  518. int indexElementu = 0;
  519.  
  520. Console.WriteLine("\n\n");
  521.  
  522. Console.ReadKey();
  523.  
  524. Console.WriteLine("TABLICA GOTOWA DO KRZYZOWANIA: ");
  525. for (int x = 0; x < tablicaPopulacjiPoKrzyzowaniu.GetLength(0); x++)
  526. {
  527. for (int y = 0; y < tablicaPopulacjiPoKrzyzowaniu.GetLength(1); y++)
  528. {
  529. Console.Write(tablicaPopulacjiPoKrzyzowaniu[x, y] + " ");
  530. }
  531. Console.WriteLine();
  532. }
  533.  
  534. for (int i = 0; i < tablicaPopulacjiPoKrzyzowaniu.GetLength(0) - 1; i++)
  535. {
  536. p = zmiennaLosowaPrawdopodobienstwa.NextDouble();
  537.  
  538. Console.WriteLine(p);
  539.  
  540. los1 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length - 1);
  541. los2 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length - 1);
  542.  
  543. Console.WriteLine("Wylosowane zmienne: " + los1 + " i " + los2);
  544.  
  545. if (los1 >= los2)
  546. {
  547. otwarciePrzedzialu = los2;
  548. zamknieciePrzedzialu = los1;
  549. }
  550. else
  551. {
  552. otwarciePrzedzialu = los1;
  553. zamknieciePrzedzialu = los2;
  554. }
  555.  
  556. Console.WriteLine("<" + otwarciePrzedzialu + ";" + zamknieciePrzedzialu + ">");
  557.  
  558. if (p >= PKrzyzowania)
  559. {
  560. //while(los2 >= los1)
  561. //{
  562. // los1 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length);
  563. // los2 = zmiennaLosowaPrzedzialow.Next(0, tablicaPotomek1.Length);
  564. //}
  565.  
  566. for (int j = 0; j < tablicaPotomek1.Length; j++)
  567. {
  568. tablicaPotomek1[j] = -1;
  569. tablicaPotomek2[j] = -1;
  570. }
  571.  
  572. //Console.WriteLine("Tablica pomocnicza 1");
  573. for (int j = 0; j < tablicaPopulacji.GetLength(1); j++)
  574. {
  575. tablicapom[j] = tablicaPopulacji[i, j];
  576. //Console.Write(tablicapom[j] + " ");
  577. }
  578. //Console.WriteLine();
  579.  
  580. //Console.WriteLine("Tablica pomocnicza 1");
  581. for (int j = 0; j < tablicaPopulacji.GetLength(1); j++)
  582. {
  583. tablicapom2[j] = tablicaPopulacji[i + 1, j];
  584. //Console.Write(tablicapom2[j] + " ");
  585. }
  586.  
  587. for (int j = los1; j <= los2; j++)
  588. {
  589. tablicaPotomek1[j] = tablicapom2[j];
  590. }
  591.  
  592. for (int j = los1; j <= los2; j++)
  593. {
  594. tablicaPotomek2[j] = tablicapom[j];
  595. }
  596.  
  597. for (int j = 0; j < tablicaPopulacji.GetLength(1); j++)
  598. {
  599. if (j < otwarciePrzedzialu || j > zamknieciePrzedzialu)
  600. {
  601. wartoscElementu = tablicaPopulacjiPoKrzyzowaniu[i, j];
  602.  
  603. if (CzyObiektIstnieje(wartoscElementu, tablicaPotomek1))
  604. {
  605. while (CzyObiektIstnieje(wartoscElementu, tablicaPotomek1))
  606. {
  607. indexElementu = ZbadajIndex(wartoscElementu, tablicaPotomek1);
  608. wartoscElementu = tablicaPotomek2[indexElementu];
  609. }
  610. tablicaPotomek1[j] = wartoscElementu;
  611. }
  612. else
  613. {
  614. tablicaPotomek1[j] = wartoscElementu;
  615. }
  616.  
  617. //Drugi potomek
  618.  
  619. wartoscElementu = tablicaPopulacjiPoKrzyzowaniu[i + 1, j];
  620.  
  621. if (CzyObiektIstnieje(wartoscElementu, tablicaPotomek2))
  622. {
  623. while (CzyObiektIstnieje(wartoscElementu, tablicaPotomek2))
  624. {
  625. indexElementu = ZbadajIndex(wartoscElementu, tablicaPotomek2);
  626. wartoscElementu = tablicaPotomek1[indexElementu];
  627. }
  628. tablicaPotomek2[j] = wartoscElementu;
  629. }
  630. else
  631. {
  632. tablicaPotomek2[j] = wartoscElementu;
  633. }
  634. }
  635.  
  636.  
  637. for (int k = 0; k < tablicaPopulacjiPoKrzyzowaniu.GetLength(1); j++)
  638. {
  639. tablicaPopulacjiPoKrzyzowaniu[i, k] = tablicaPotomek1[k];
  640. tablicaPopulacjiPoKrzyzowaniu[i + 1, k] = tablicaPotomek2[k];
  641. //Console.WriteLine("Wpisano kolumne " + k + "/" + (tablicaPopulacjiPoKrzyzowaniu.GetLength(1) - 1));
  642. }
  643.  
  644. //Console.WriteLine("Tablica Potomek1: ");
  645. //Console.WriteLine();
  646. //for (int k = 0; k < tablicaPotomek1.Length; k++)
  647. //{
  648. // Console.Write(tablicaPotomek1[k] + " ");
  649. //}
  650. //Console.WriteLine();
  651.  
  652. //Console.WriteLine("Tablica Potomek2: ");
  653. //Console.WriteLine();
  654. //for (int k = 0; k < tablicaPotomek2.Length; k++)
  655. //{
  656. // Console.Write(tablicaPotomek2[k] + " ");
  657. //}
  658. //Console.WriteLine();
  659.  
  660.  
  661.  
  662. }
  663.  
  664.  
  665.  
  666. //Console.WriteLine("Skrzyżowano wiersz " + i + " z wierszem " + (i + 1));
  667. i++;
  668. }
  669. else
  670. {
  671. i++;
  672. }
  673. }
  674. Console.ReadKey();
  675.  
  676. Console.WriteLine("\n\nTablica po krzyżowaniu: ");
  677. for (int x = 0; x < tablicaPopulacjiPoKrzyzowaniu.GetLength(0); x++)
  678. {
  679. for (int y = 0; y < tablicaPopulacjiPoKrzyzowaniu.GetLength(1); y++)
  680. {
  681. Console.Write(tablicaPopulacjiPoKrzyzowaniu[x, y] + " ");
  682. }
  683. Console.WriteLine();
  684. }
  685.  
  686. Console.Write("Zakończono krzyżowanie tablicy");
  687.  
  688. return tablicaPopulacjiPoKrzyzowaniu;
  689. }
  690.  
  691.  
  692.  
  693.  
  694. public static int ZbadajIndex(int wartosc, int[] tablica1)
  695. {
  696. int IndexNum = 0;
  697.  
  698. for (int i = 0; i < tablica1.Length; i++)
  699. {
  700. if(wartosc == tablica1[i])
  701. {
  702. IndexNum = i;
  703. }
  704. }
  705.  
  706. return IndexNum;
  707. }
  708.  
  709.  
  710.  
  711.  
  712. public static int[,] Mutacja(int[,] tablicaPopulacji, double PMutacji)
  713. {
  714. int[,] tablicaPopulacjiPoMutacji = tablicaPopulacji; //do usuniecia po zrobieniu metody
  715.  
  716.  
  717.  
  718. return tablicaPopulacjiPoMutacji;
  719. }
  720. }
  721. }
  722.  
  723.  
  724.  
  725.  
  726. /* Krzyżowanie:
  727. * jednopunktowe, dwupunktowe, n-punktowe
  728. *
  729. * Jednopunktowe:
  730. * 1001101001 = 100110 | 1001 \/ 100110 | 1010 = 1001101010
  731. * 0100101010 = 010010 | 1010 /\ 010010 | 1001 = 0100101001
  732. *
  733. * Dwupunktowe: dwa miejsca krzyżowań
  734. * N-punktowe: N miejsc krzyżowań
  735. *
  736. * Prawdopodobieństwo krzyżowania = 0.75 do 0.95
  737. *
  738. *
  739. *
  740. * Mutowanie:
  741. *
  742. * Przez zamianę lub przez inwersję
  743. *
  744. * Przez inwersję: dwa punkty krzyżowania (w przykladzie tylko jeden bo słaby obiekt)
  745. *
  746. * 100001 = 100 | 001 X 100 | 100 = 100100
  747. *
  748. * Przez zamianę: zmiana poszczegółnych komórek.
  749. * Prawdopodobieństwo mutacji przez zamianę: 0,005 do 0,25
  750. */
Advertisement
Add Comment
Please, Sign In to add comment