/// <summary> /// Kontruktor CESTA /// </summary> /// <param name="list">Kolekce měst, která obsahuje tato CESTA</param> /// <param name="id">Identifikátor dané CESTY</param> public Cesta(List <Mesto> list, int id) { Id = id; seznamMest = new List <Mesto>(); seznamMest.AddRange(list); for (int i = 0; i < 34; i++) { Mesto prvni = seznamMest[i]; Mesto druhe = seznamMest[i + 1]; // Ve vzdalenostech mam uz ulozene vzdalenosti od tohoto mesta ke vsem dalsim, a podle ID si vyberu druhe mesto Vzdalenost += prvni.Vzdalenost[druhe.Id]; } }
/// <summary> /// Náhodná mutace členů generace. /// </summary> public void Mutace() { int cisloPrvku = 0; // Projdu všechny Cesty v generaci foreach (Cesta c in Generace) { for (int i = 0; i < 35; i++) { cisloPrvku++; // Zbytek po dělení 400 je roven 0, tedy jedná se o 400 prvek (Město) // Jedná se o 0.5 % měst. Děleno 400, nikoliv 200 protože při mutaci měním dva prvky, mutovaný zaměňuji s jiným if (cisloPrvku % 400 == 0) { // Náhodně vygenerovaná hodnota města od 0 do 34, jedná se o město, kterým bude zaměněn 400. prvek int indexNove = random.Next(35); // Kontrola zda mutace i náhodné číslo neukazují na ten samý prvek if (indexNove == i) { // Generuji do té doby, dokud se nejedná o odlišné ID od mutovaného while (true) { indexNove = random.Next(35); if (indexNove != i) { break; } } } Mesto zaloha = c.seznamMest[i]; Mesto nove = c.seznamMest[indexNove]; // Prohození měst c.seznamMest[i] = nove; c.seznamMest[indexNove] = zaloha; } } } // Zobrazení inforamací do konzole VykresliInfo(IdGenerace, 2); }