コード例 #1
0
        private void GEO_Click(object sender, EventArgs e)
        {
            //zmienne od użytkownika
            double a     = Convert.ToDouble(textBoxA.Text);
            double b     = Convert.ToDouble(textBoxB.Text);
            double d     = Convert.ToDouble(textBoxD.Text);
            string dHelp = textBoxD.Text.Split(',').Last();
            double l     = Math.Ceiling(Math.Log(((1 / d) * (b - a) + 1), 2)); // obliczanie l czyli na ilu bitach się liczba zmiejsci
            int    T     = Convert.ToInt32(textBoxT.Text);
            double tau   = Convert.ToDouble(textBoxTau.Text);


            List <double> xreal       = new List <double>();
            List <double> xrealChange = new List <double>();
            List <double> fx          = new List <double>();
            List <int>    xint        = new List <int>();
            //List<string> xbin = new List<string>();
            string xbin;
            int    i       = 0;
            int    counter = 0;
            //najlepsze wyniki
            double xrealbest = 0;
            double fxbest    = 0;
            string xbinbest  = "0";

            string xbinb;
            //wyniki po zmianie bitu
            List <string> xbinChange = new List <string>();
            //rangi
            List <int> rangs = new List <int>();
            //Losowe liczby
            List <double> randomNumbers = new List <double>();

            List <double> px = new List <double>(); //Prawdopodobieństwo wystąpienia zmiany
            List <int>    r  = new List <int>();    //nadanie rang


            ConvertFromAndToDecimal convertFromAndToDecimal = new ConvertFromAndToDecimal();
            GEO geo = new GEO();

            //czyszczenie serii dla wykresu, zeby dla kazdego nowego start generował od zera
            chart2.Titles.Clear();
            chart2.Series["Fx"].Points.Clear();
            chart2.Series["FxBest"].Points.Clear();
            chart2.Titles.Add("Historia");
            counter = 0;

            xreal = InitPopulation(a, b, 1);

            do
            {
                fx   = CalculateFunction(xreal);
                xint = FromXrealToXint(xreal, a, b, l);
                xbin = convertFromAndToDecimal.intToBinarty(xint[0], l);

                counter++;
                //przypisanie najlepszego wyniku
                if (fxbest < fx[0])
                {
                    xrealbest = xreal[0];
                    fxbest    = fx[0];
                    xbinbest  = xbin;
                    //generowanie pliku
                    geo.generateFileGEO("plikGEO.txt", xrealbest, xbinbest, fxbest, counter);
                }

                chart2.Series["Fx"].Points.AddXY((counter), fx[0]);
                chart2.Series["FxBest"].Points.AddXY((counter), fxbest);

                //zmiana bitów
                xbinChange.Clear();
                for (i = 0; i < xbin.Length; i++)
                {
                    xbinChange.Add(geo.changeBit(xbin, i));
                }

                //zmina z xbin -> xint aby wyznaczyć wartości funkcji
                xint.Clear();
                foreach (var item in xbinChange)    // wygenerowanie xint (xbin -> xint)
                {
                    xint.Add(convertFromAndToDecimal.convertFrom(item, 2));
                }

                xrealChange = FromXintToXreal(xint, a, b, l); //wygenerowanie z xint do xreal

                //obliczanie funkji
                fx = CalculateFunction(xrealChange);

                //nadawanie rangi
                rangs = geo.doRang(fx);

                //obliczanie prawdopodobieństwa
                px.Clear();
                for (i = 0; i < fx.Count(); i++)
                {
                    px.Add(geo.px(i + 1, tau));
                }
                //losowanie l liczb z zakresu 0-1
                randomNumbers = RandomNumber(l);

                xbinb = "";
                for (i = 0; i < xbin.Length; i++)
                {
                    xbinb = xbinb + geo.doMutationGEO(xbin[i], randomNumbers[i], px[i]);
                }

                xint.Clear();
                xint.Add(convertFromAndToDecimal.convertFrom(xbinb, 2)); //xbin --> xint)

                xreal = FromXintToXreal(xint, a, b, l);                  //wygenerowanie z xint do xreal
                T--;
            } while (T > 0);


            richTextBox.Text = "GEO Najlepszy wynik: \nxreal: " + xrealbest + " \nxbin: " + xbinbest + " \nfx: " + fxbest;
        }
コード例 #2
0
        private void ANW_Click(object sender, EventArgs e)
        {
            //zmienne od użytkownika
            double a     = Convert.ToDouble(textBoxA.Text);
            double b     = Convert.ToDouble(textBoxB.Text);
            double d     = Convert.ToDouble(textBoxD.Text);
            string dHelp = textBoxD.Text.Split(',').Last();
            double l     = Math.Ceiling(Math.Log(((1 / d) * (b - a) + 1), 2)); // obliczanie l czyli na ilu bitach się liczba zmiejsci
            int    T     = Convert.ToInt32(textBoxT.Text);

            List <double> xreal       = new List <double>();
            List <double> xrealChange = new List <double>();
            double        xrealc      = 0;
            List <double> fx          = new List <double>();
            List <double> fxc         = new List <double>();
            List <double> fxlocal     = new List <double>();

            double     fxcc = 0;
            List <int> xint = new List <int>();
            //wyniki po zmianie bitu
            List <string> xbinChange = new List <string>();
            string        xbin       = "";
            string        xbinc      = "";

            //zmienne do zapisania najlepszych wyników
            double xrealbest = 0;
            double fxbest    = 0;
            string xbinbest  = "";

            //zmienne pętle
            int    t       = 0;
            int    i       = 0;
            double w       = 0.0;
            int    licznik = 0;
            double measure = 0.0;
            bool   local   = false;

            ConvertFromAndToDecimal convertFromAndToDecimal = new ConvertFromAndToDecimal();
            GEO geo = new GEO();

            chart3.Series.Clear();
            chart3.Titles.Clear();
            chart3.Series.Add("FxBest");
            chart3.Series["FxBest"].ChartType  = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            chart3.Series["FxBest"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
            chart3.Titles.Add("Historia");

            for (t = 0; t < T; t++)
            {
                xreal   = InitPopulation(a, b, 1);
                local   = false;
                licznik = 0;
                while (!local)
                {
                    fxc  = CalculateFunction(xreal);
                    xint = FromXrealToXint(xreal, a, b, l);
                    xbin = convertFromAndToDecimal.intToBinarty(xint[0], l);

                    //zmiana bitów
                    xbinChange.Clear();
                    for (i = 0; i < xbin.Length; i++)
                    {
                        xbinChange.Add(geo.changeBit(xbin, i));
                    }

                    //zmina z xbin -> xint aby wyznaczyć wartości funkcji
                    xint.Clear();
                    foreach (var item in xbinChange)    // wygenerowanie xint (xbin -> xint)
                    {
                        xint.Add(convertFromAndToDecimal.convertFrom(item, 2));
                    }

                    xrealChange = FromXintToXreal(xint, a, b, l); //wygenerowanie z xint do xreal

                    //obliczanie funkji
                    fx = CalculateFunction(xrealChange);

                    i = 0;
                    //obliczanie na którym elemencie jest najlepsze fx
                    foreach (var os in fx)
                    {
                        if (os == fx.Max())
                        {
                            break;
                        }
                        i++;
                    }

                    //sprawdzanie warunku stopu
                    if (fxc[0] < fx.Max())
                    {
                        xreal[0] = xrealChange[i];
                        fxc[0]   = fx.Max();


                        xrealc = xrealChange[i];
                        fxcc   = fx.Max();
                        xbinc  = xbinChange[i];
                    }
                    else
                    {
                        local = true;
                    }
                    fxlocal.Add(fxcc);
                    licznik++;

                    geo.generateFileANW("plikANW.txt", xrealc, xbinc, fxcc, licznik, t);
                }

                measure = (double)1 / (double)licznik;
                i       = 0;
                chart3.Series.Add("local" + t);
                chart3.Series["local" + t].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                for (w = measure; w <= 1; w = w + measure)
                {
                    //dodawanie lokalnych wartości do wykresu
                    chart3.Series["local" + t].Points.AddXY((t + w), fxlocal[i]);
                    if (fxbest < fxlocal[i])
                    {
                        chart3.Series["FxBest"].Points.AddXY((t + w), fxlocal[i]);
                    }

                    i++;
                }
                fxlocal.Clear();

                if (fxbest < fxcc)
                {
                    xrealbest = xrealc;
                    fxbest    = fxcc;
                    xbinbest  = xbinc;
                }

                chart3.Series["FxBest"].Points.AddXY(t + 1, fxbest);
            }


            //wypisywanie na okienko
            richTextBox.Text = "ANW Najlepszy wynik: \nxreal: " + xrealbest + " \nxbin: " + xbinbest + " \nfx: " + fxbest;
        }