示例#1
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);
        }
示例#2
0
文件: AAnalityka.cs 项目: lqasz/BiPA
        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 };
        }
示例#3
0
文件: LosowanieKP.cs 项目: lqasz/BiPA
 public LosowanieKP(AOsobnik osobnik) : base(osobnik)
 {
 }
示例#4
0
文件: ASelekcja.cs 项目: lqasz/BiPA
 public ASelekcja(AOsobnik rozwiazanie, ushort dlugoscGenotypu, string typSelekcji)
 {
     this.dlugoscGenotypu = dlugoscGenotypu;
     this.rozwiazanie     = rozwiazanie;
     this.typSelekcji     = typSelekcji;
 }
示例#5
0
 public AnalizaRLS_RS(AOsobnik rozwiazanie, short liczbaIteracji, short czasDzialania) : base(rozwiazanie, liczbaIteracji, czasDzialania)
 {
 }
示例#6
0
        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);
        }
示例#7
0
 public RekombinacjaTSP(float pwoMutacji, AOsobnik rozwiazanie, string rodzajKrzyzowania) : base(pwoMutacji, rozwiazanie, rodzajKrzyzowania)
 {
 }
示例#8
0
 public RekombinacjaKP(float pwoMutacji, AOsobnik rozwiazanie) : base(pwoMutacji, rozwiazanie)
 {
 }
示例#9
0
 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);
 }
示例#10
0
 public SelekcjaWektora(AOsobnik rozwiazanie, ushort dlugoscGenotypu, string typSelekcji) : base(rozwiazanie, dlugoscGenotypu, typSelekcji)
 {
 }
示例#11
0
 public ARekombinacja(float pwoMutacji, AOsobnik rozwiazanie, string rodzajKrzyzowania)
 {
     this.pwoMutacji        = pwoMutacji;
     this.rozwiazanie       = rozwiazanie;
     this.rodzajKrzyzowania = rodzajKrzyzowania;
 }
示例#12
0
 public ARekombinacja(float pwoMutacji, AOsobnik rozwiazanie)
 {
     this.pwoMutacji   = pwoMutacji;
     this.rozwiazanie  = rozwiazanie;
     rodzajKrzyzowania = "Proste";
 }
示例#13
0
 public AnalizaEwolucyjny(AOsobnik rozwiazanie, short liczbaIteracji, short czasDzialania) : base(rozwiazanie, liczbaIteracji, czasDzialania)
 {
 }
示例#14
0
 public ALosowanie(AOsobnik osobnik)
 {
     this.osobnik = osobnik;
 }