コード例 #1
0
        /// <summary>
        /// Metoda przeszukuje przestrzeń w celu znalezienia najlepszego rozwiązania dla tablicy 1 wymiarowej
        /// </summary>
        /// <param name="listaRozwiazan">Wartość pozwalająca ustalić, czy sprawdzamy ograniczenia</param>
        public void SzukajNajlepszegoRozwiazania(int iloscRozwiazan, int iloscElementow)
        {
            ProblemOptymalizacyjny problemOptymalizacyjny = osobnik.ZwrocInstancjeProblemu();

            ReprezentacjaRozwiazania[] listaRozwiazan = LosujRozwiazania(problemOptymalizacyjny, iloscRozwiazan, iloscElementow);

            najlepszeRozwiazanie = listaRozwiazan[0];
            najlepszyWynik       = osobnik.FunkcjaDopasowania(listaRozwiazan[0]);

            int iterator = 1;

            while (problemOptymalizacyjny.CzyIstniejaOgraniczenia())
            {
                //System.Console.WriteLine("while: "+osobnik.FunkcjaDopasowania(listaRozwiazan[iterator])["max"][0] + " " + osobnik.FunkcjaDopasowania(listaRozwiazan[iterator])["min"][0]);

                if (osobnik.FunkcjaDopasowania(listaRozwiazan[iterator])["min"][0] <= problemOptymalizacyjny.ZwrocOgraniczeniaProblemu()[0])
                {
                    najlepszeRozwiazanie = listaRozwiazan[iterator];
                    najlepszyWynik       = osobnik.FunkcjaDopasowania(listaRozwiazan[iterator]);
                }

                iterator++;

                if (listaRozwiazan.Length == iterator)
                {
                    break;
                }
            }

            foreach (ReprezentacjaRozwiazania rozwiazanie in listaRozwiazan)
            {
                Dictionary <string, float[]> wynikElementu = osobnik.FunkcjaDopasowania(rozwiazanie);

                if ((najlepszyWynik != null) && (wynikElementu["max"][0] > najlepszyWynik["max"][0]))
                {
                    if (problemOptymalizacyjny.CzyIstniejaOgraniczenia() && (wynikElementu["min"][0] > problemOptymalizacyjny.ZwrocOgraniczeniaProblemu()[0]))
                    {
                        continue;
                    }

                    najlepszeRozwiazanie = rozwiazanie;
                    najlepszyWynik       = wynikElementu;
                }
            }
        }
コード例 #2
0
        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);
        }