public override ReprezentacjaRozwiazania[] LosujRozwiazania(ProblemOptymalizacyjny problemOptymalizacyjny, int iloscRozwiazan, int iloscElementow) { bool startowyWektor = true; Random losowy = new Random(); ReprezentacjaRozwiazania[] rozwiazania = new ReprezentacjaRozwiazania[iloscRozwiazan]; ushort[][] dostepnoscPrzedmiotow = problemOptymalizacyjny.ZwrocDostepnePrzedmioty(); LosowanieTSP losowanieTSP = new LosowanieTSP(); ReprezentacjaRozwiazania[] rozwiazaniaTSP = losowanieTSP.LosujRozwiazania(problemOptymalizacyjny, iloscRozwiazan, problemOptymalizacyjny.ZwrocDlugoscGenotypu()); for (int i = 0; i < iloscRozwiazan; i++) { ushort[] wektorTSP = rozwiazaniaTSP[i].ZwrocGenotyp1Wymiarowy(); ushort[][] macierzTTP = new ushort[wektorTSP.Length][]; double polowa = (Math.Pow(iloscRozwiazan, 2) / 2), rozpietosc = Math.Abs(Math.Pow(iloscRozwiazan, 2) - (i + losowy.Next(iloscRozwiazan)) * iloscRozwiazan); for (int j = 0; j < wektorTSP.Length; j++) { int index = wektorTSP[j] - 1, wartosc = (int)Math.Abs(polowa - rozpietosc); double dziesiecProcent = 0.1 * wartosc; macierzTTP[j] = new ushort[dostepnoscPrzedmiotow[0].Length + 1]; macierzTTP[j][0] = wektorTSP[j]; for (int k = 1; k < macierzTTP[j].Length; k++) { if ((dostepnoscPrzedmiotow[index][(k - 1)] == 1) && !startowyWektor) { if (polowa >= rozpietosc) { macierzTTP[j][k] = (ushort)((wartosc < dziesiecProcent) ? 1 : 0); if (wartosc > 0) { wartosc -= losowy.Next(wartosc); } } else { macierzTTP[j][k] = (ushort)((wartosc < dziesiecProcent) ? 1 : 0); if (wartosc > 0) { wartosc -= (losowy.Next(wartosc) * 2); } } } else { macierzTTP[j][k] = 0; } } } rozwiazania[i] = new ReprezentacjaRozwiazania(macierzTTP); startowyWektor = false; } return(rozwiazania); }
/// <summary> /// Metoda odpowiedzialna za wylosowanie rozwiązań, z uwzględnieniem problemu optymalizacyjnego /// </summary> /// <param name="problemOptymalizacyjny">Wartość pozwalająca ustalić, czy sprawdzamy ograniczenia</param> /// <param name="iloscRozwiazan">Wartość pozwalająca ustalić, czy sprawdzamy ograniczenia</param> /// <returns>Lista osobników - rozwiązań</returns> public abstract ReprezentacjaRozwiazania[] LosujRozwiazania(ProblemOptymalizacyjny problemOptymalizacyjny, int iloscRozwiazan, int iloscElementow);