public override void ZnajdzOptimum() { int poprawy = 0; ushort[] genotyp = reprezentacjaRozwiazania.ZwrocGenotyp1Wymiarowy(), tmpGenotyp = (ushort[])genotyp.Clone(); AOsobnik osobnik = losowanie.ZwrocOsobnika(); ProblemOptymalizacyjny problemOptymalizacyjny = osobnik.ZwrocInstancjeProblemu(); Dictionary <string, float[]> wynik = osobnik.FunkcjaDopasowania(reprezentacjaRozwiazania); ReprezentacjaRozwiazania tmpReprezentacjaRozwiazanie = new ReprezentacjaRozwiazania(tmpGenotyp); do { int start = 1, koniec = problemOptymalizacyjny.ZwrocDlugoscGenotypu() - 1; poprawy = 0; for (int i = start; i < koniec; i++) { int liczba1 = losowy.Next(2, problemOptymalizacyjny.ZwrocDlugoscGenotypu()), liczba2 = losowy.Next(2, problemOptymalizacyjny.ZwrocDlugoscGenotypu()); ushort tmpWartosc = tmpGenotyp[liczba1]; tmpGenotyp[liczba1] = tmpGenotyp[liczba2]; tmpGenotyp[liczba2] = tmpWartosc; tmpReprezentacjaRozwiazanie.ZmienGenotyp(tmpGenotyp); Dictionary <string, float[]> tmpWynik = osobnik.FunkcjaDopasowania(tmpReprezentacjaRozwiazanie); if (tmpWynik["max"][0] > wynik["max"][0]) { if (problemOptymalizacyjny.CzyIstniejaOgraniczenia() && (tmpWynik["min"][0] > problemOptymalizacyjny.ZwrocOgraniczeniaProblemu()[0])) { continue; } genotyp = (ushort[])tmpGenotyp.Clone(); reprezentacjaRozwiazania.ZmienGenotyp(genotyp); wynik["max"][0] = tmpWynik["max"][0]; wynik["min"][0] = tmpWynik["min"][0]; poprawy++; } else { tmpGenotyp = (ushort[])genotyp.Clone(); tmpReprezentacjaRozwiazanie.ZmienGenotyp(genotyp); } } } while (poprawy > 0); }
public AAnalityka(AOsobnik rozwiazanie, short liczbaIteracji, short czasDzialaniaAlgorytmu) { this.rozwiazanie = rozwiazanie; this.liczbaIteracji = liczbaIteracji; this.czasDzialaniaAlgorytmu = czasDzialaniaAlgorytmu; liczbaWCzasie = new int[liczbaIteracji][]; najlepszaWartoscFunkcji = new Dictionary <string, float[]>(); minWartoscProcesuPoszukiwan = new double[liczbaIteracji][]; maxWartoscProcesuPoszukiwan = new double[liczbaIteracji][]; sredniaWartoscProcesuPoszukiwan = new double[liczbaIteracji][]; for (short i = 0; i < liczbaIteracji; i++) { liczbaWCzasie[i] = new int[czasDzialaniaAlgorytmu + 1]; minWartoscProcesuPoszukiwan[i] = new double[czasDzialaniaAlgorytmu + 1]; maxWartoscProcesuPoszukiwan[i] = new double[czasDzialaniaAlgorytmu + 1]; sredniaWartoscProcesuPoszukiwan[i] = new double[czasDzialaniaAlgorytmu + 1]; } najlepszaWartoscFunkcji["max"] = new float[] { -100000 }; }
public LosowanieKP(AOsobnik osobnik) : base(osobnik) { }
public ASelekcja(AOsobnik rozwiazanie, ushort dlugoscGenotypu, string typSelekcji) { this.dlugoscGenotypu = dlugoscGenotypu; this.rozwiazanie = rozwiazanie; this.typSelekcji = typSelekcji; }
public AnalizaRLS_RS(AOsobnik rozwiazanie, short liczbaIteracji, short czasDzialania) : base(rozwiazanie, liczbaIteracji, czasDzialania) { }
public override void ZnajdzOptimum() { int poprawy = 0, marginesBledu = parametrP; ushort[][] genotyp = reprezentacjaRozwiazania.ZwrocGenotyp2Wymiarowy(), tmpGenotyp = (ushort[][])genotyp.Clone(); string stan = "kp"; AOsobnik osobnik = losowanie.ZwrocOsobnika(); ProblemOptymalizacyjny problemOptymalizacyjny = osobnik.ZwrocInstancjeProblemu(); Dictionary <string, float[]> wynik = osobnik.FunkcjaDopasowania(reprezentacjaRozwiazania); ReprezentacjaRozwiazania tmpReprezentacjaRozwiazanie = new ReprezentacjaRozwiazania(tmpGenotyp); ushort[][] dostepnePrzedmioty = (ushort[][])problemOptymalizacyjny.ZwrocDostepnePrzedmioty().Clone(); Dictionary <string, float[]> tmpWynik = wynik; double wspolczynnik = wynik["min"][0] / problemOptymalizacyjny.ZwrocOgraniczeniaProblemu()[0]; do { poprawy = 0; if (stan == "kp") { // problem plecakowy for (int i = 1; i < tmpGenotyp.Length - 1; i++) { for (int j = 1; j < tmpGenotyp[i].Length; j++) { if (dostepnePrzedmioty[i][j - 1] == 1) { if (wspolczynnik < 1) { tmpGenotyp[i][j] = 1; } else { tmpGenotyp[i][j] = 0; } tmpReprezentacjaRozwiazanie.ZmienGenotyp(tmpGenotyp); tmpWynik = osobnik.FunkcjaDopasowania(tmpReprezentacjaRozwiazanie); wspolczynnik = tmpWynik["min"][0] / problemOptymalizacyjny.ZwrocOgraniczeniaProblemu()[0]; if (wspolczynnik > 1) { tmpGenotyp[i][j] = 0; } } } } stan = "tsp"; } if (stan == "tsp") { // problem komiwojażera for (int i = 1; i < tmpGenotyp.Length - 1; i++) { int los = losowy.Next(2, tmpGenotyp.Length - 2); ushort[] tmp = (ushort[])tmpGenotyp[i].Clone(); tmpGenotyp[i] = (ushort[])tmpGenotyp[los].Clone(); tmpGenotyp[los] = (ushort[])tmp.Clone(); } tmpReprezentacjaRozwiazanie.ZmienGenotyp(tmpGenotyp); tmpWynik = osobnik.FunkcjaDopasowania(tmpReprezentacjaRozwiazanie); stan = "kp"; } if (tmpWynik["min"][0] > problemOptymalizacyjny.ZwrocOgraniczeniaProblemu()[0]) { tmpGenotyp = (ushort[][])genotyp.Clone(); if (marginesBledu > 0) { poprawy++; marginesBledu--; } } else { if (tmpWynik["max"][0] > wynik["max"][0]) { wynik = tmpWynik; genotyp = (ushort[][])tmpGenotyp.Clone(); reprezentacjaRozwiazania.ZmienGenotyp(genotyp); poprawy++; marginesBledu = 50; } else { if (marginesBledu > 0) { poprawy++; marginesBledu--; } } } } while (poprawy > 0); }
public RekombinacjaTSP(float pwoMutacji, AOsobnik rozwiazanie, string rodzajKrzyzowania) : base(pwoMutacji, rozwiazanie, rodzajKrzyzowania) { }
public RekombinacjaKP(float pwoMutacji, AOsobnik rozwiazanie) : base(pwoMutacji, rozwiazanie) { }
public RekombinacjaTTP(float pwoMutacji, AOsobnik rozwiazanie, string rodzajKrzyzowania) : base(pwoMutacji, rozwiazanie, rodzajKrzyzowania) { rekombinacjaTSP = new RekombinacjaTSP(pwoMutacji, rozwiazanie, rodzajKrzyzowania); rekombinacjaKP = new RekombinacjaKP(0, rozwiazanie); rekombinacjaKP.ZmienSprawdzanieOgraniczen(false); }
public SelekcjaWektora(AOsobnik rozwiazanie, ushort dlugoscGenotypu, string typSelekcji) : base(rozwiazanie, dlugoscGenotypu, typSelekcji) { }
public ARekombinacja(float pwoMutacji, AOsobnik rozwiazanie, string rodzajKrzyzowania) { this.pwoMutacji = pwoMutacji; this.rozwiazanie = rozwiazanie; this.rodzajKrzyzowania = rodzajKrzyzowania; }
public ARekombinacja(float pwoMutacji, AOsobnik rozwiazanie) { this.pwoMutacji = pwoMutacji; this.rozwiazanie = rozwiazanie; rodzajKrzyzowania = "Proste"; }
public AnalizaEwolucyjny(AOsobnik rozwiazanie, short liczbaIteracji, short czasDzialania) : base(rozwiazanie, liczbaIteracji, czasDzialania) { }
public ALosowanie(AOsobnik osobnik) { this.osobnik = osobnik; }