public static Osobnik Oblicz(Osobnik trasa) { int czasObliczeń = 1000 * 60 * 30; //30 minut Stopwatch stoper = new Stopwatch(); stoper.Start(); while (stoper.ElapsedMilliseconds <= czasObliczeń) { Osobnik sąsiad = new Osobnik(); sąsiad.genotyp = trasa.genotyp.GetRange(0, trasa.genotyp.Count); int punkt1 = Program.random.Next(trasa.genotyp.Count); int punkt2 = Program.random.Next(trasa.genotyp.Count); int temp; temp = sąsiad.genotyp[punkt1]; sąsiad.genotyp[punkt1] = sąsiad.genotyp[punkt2]; sąsiad.genotyp[punkt2] = temp; if (sąsiad.SzybkośćTrasy() != 0 && sąsiad.SzybkośćTrasy() < trasa.SzybkośćTrasy()) { trasa = sąsiad; //Console.WriteLine(trasa.SzybkośćTrasy()); } } stoper.Stop(); Console.WriteLine("Znaleziona ścieżka: "); for (int i = 0; i < trasa.genotyp.Count; i++) { Console.Write(Osobnik.listaMiast[trasa.genotyp[i]].indeks + " "); } Console.WriteLine("\nSzybkość trasy: " + trasa.SzybkośćTrasy()); Console.WriteLine("\nLiczba baterii: " + trasa.liczbaBateriiOsobnika); using (System.IO.StreamWriter zapisator = new System.IO.StreamWriter(@"../../Wyniki/Z" + Program.nazwaPlikuWejściowego + "-" + Program.liczbaBaterii + "-" + DateTime.Now.ToString().Replace(':', '-') + ".txt")) { zapisator.WriteLine("\nSzybkość trasy: " + trasa.SzybkośćTrasy()); zapisator.WriteLine("\nLiczba baterii: " + trasa.liczbaBateriiOsobnika); zapisator.WriteLine(); for (int i = 0; i < trasa.genotyp.Count; i++) { zapisator.Write(Osobnik.listaMiast[trasa.genotyp[i]].indeks + " "); } zapisator.WriteLine(); } return(trasa); }
public static void Oblicz(Osobnik[] populacja, string nazwaPlikuWejściowego, int wielkośćPopulacji, int liczbaPokoleń, string krzyżowanie, int liczbaBaterii, string selekcja, double prawdopodobieństwoMutacji) { for (int i = 0; i < liczbaPokoleń; i++) { Osobnik[] nowaPopulacja = new Osobnik[wielkośćPopulacji]; for (int j = 0; j < wielkośćPopulacji; j++) { Osobnik tata = Selekcja.Selekcjonuj(Program.selekcja, populacja); Osobnik mama = Selekcja.Selekcjonuj(Program.selekcja, populacja); Osobnik dziecko = Krzyżowanie.Krzyżuj(krzyżowanie, tata, mama); //konkurencja między rodzicami i dzieckiem if (tata.SzybkośćTrasy() < mama.SzybkośćTrasy()) { nowaPopulacja[j] = tata; } else { nowaPopulacja[j] = mama; } if (dziecko.SzybkośćTrasy() < nowaPopulacja[j].SzybkośćTrasy()) { nowaPopulacja[j] = dziecko; } } populacja = nowaPopulacja; } Console.WriteLine("Znaleziona ścieżka: "); for (int i = 0; i < Program.niebo.genotyp.Count; i++) { Console.Write(Osobnik.listaMiast[Program.niebo.genotyp[i]].indeks + " "); } Console.WriteLine("\nSzybkość trasy: " + Program.niebo.SzybkośćTrasy()); Console.WriteLine("\nLiczba baterii: " + Program.niebo.liczbaBateriiOsobnika); using (System.IO.StreamWriter zapisator = new System.IO.StreamWriter(@"../../Wyniki/" + nazwaPlikuWejściowego + "-" + wielkośćPopulacji + "-" + liczbaPokoleń + "-" + krzyżowanie + "-" + liczbaBaterii + "-" + prawdopodobieństwoMutacji + "-" + selekcja + "-" + DateTime.Now.ToString().Replace(':', '-') + ".txt")) { zapisator.WriteLine("\nSzybkość trasy: " + Program.niebo.SzybkośćTrasy()); zapisator.WriteLine("\nLiczba baterii: " + Program.niebo.liczbaBateriiOsobnika); zapisator.WriteLine(); for (int i = 0; i < Program.niebo.genotyp.Count; i++) { zapisator.Write(Osobnik.listaMiast[Program.niebo.genotyp[i]].indeks + " "); } zapisator.WriteLine(); } }
public static Osobnik PorównajOsobników(Osobnik osobnik1, Osobnik osobnik2) { if (osobnik1.SzybkośćTrasy() < osobnik2.SzybkośćTrasy()) { if (osobnik1.SzybkośćTrasy() != 0) { return(osobnik1); } else if (osobnik2.SzybkośćTrasy() != 0) { return(osobnik2); } else { return(osobnik1); } } else { return(osobnik2); } }