Esempio n. 1
0
        /// <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];
            }
        }
Esempio n. 2
0
        /// <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);
        }