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; }
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; }