Решение задач безусловной и условной оптимизации методом переменного многогранника Нелдера-Мида - C#
Формулировка задачи:
Помогите написать программу на C# для решения задач безусловной и условной оптимизации методом переменного многогранника Нелдера-Мида
Решение задачи: «Решение задач безусловной и условной оптимизации методом переменного многогранника Нелдера-Мида»
textual
Листинг программы
public Form2() { InitializeComponent(); } private void button1_Click_1(object sender, EventArgs e) { double fxl, fxh, fxn, fcentr, fo, fr, fs, f1, f2, f3; double a, q, w, r, t, p, z, c, О±, ОІ, Оі, Пѓ, Оµ; О± = Convert.ToDouble(textBox27.Text); ОІ = Convert.ToDouble(textBox28.Text); Оі = Convert.ToDouble(textBox29.Text); Оµ = Convert.ToDouble(textBox30.Text); double[] s = new double[2]; double[] xl = new double[2]; double[] xh = new double[2]; double[] xn = new double[2]; double[] centrt = new double[2]; double[] ot = new double[2]; double[] ra = new double[2]; double[] m = new double[2]; double[] m2 = new double[2]; double[] m3 = new double[2]; xl[0] = Convert.ToDouble(textBox11.Text); // способ задания масивов и обращение к элементу масива xl[1] = Convert.ToDouble(textBox10.Text); a = Convert.ToDouble(textBox1.Text); w = Convert.ToDouble(textBox3.Text); p = Convert.ToDouble(textBox4.Text); t = Convert.ToDouble(textBox5.Text); z = Convert.ToDouble(textBox8.Text); c = Convert.ToDouble(textBox9.Text); xn[0] = Convert.ToDouble(textBox6.Text); xn[1] = Convert.ToDouble(textBox2.Text); xh[0] = Convert.ToDouble(textBox13.Text); xh[1] = Convert.ToDouble(textBox12.Text); fxl = 0; fxn = 0; fxh = 0; two: m = xl; m2 = xn; m3 = xh; q = m[0]; r = m[1]; f1 = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c);// Math.Pow( число, степень) q = m2[0]; r = m2[1]; f2 = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c); q = m3[0]; r = m3[1]; f3 = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c); if (f1 > f2 & f2 > f3) { xl = m3; xn = m2; xh = m; fxl = f3; fxn = f2; fxh = f1; textBox18.Text = fxl.ToString(); textBox17.Text = fxh.ToString(); textBox16.Text = fxn.ToString(); } else { if (f1 > f3 & f3 > f2) { xl = m2; xn = m3; xh = m; fxl = f2; fxn = f3; fxh = f1; textBox18.Text = fxl.ToString(); textBox17.Text = fxh.ToString(); textBox16.Text = fxn.ToString(); } else { if (f2 > f1 & f1 > f3) { xl = m3; xn = m; xh = m2; fxl = f3; fxn = f1; fxh = f2; textBox18.Text = fxl.ToString(); textBox17.Text = fxh.ToString(); textBox16.Text = fxn.ToString(); } else { if (f2 > f3 & f3 > f1) { xl = m; xn = m3; xh = m2; fxl = f1; fxn = f3; fxh = f2; textBox18.Text = fxl.ToString(); textBox17.Text = fxh.ToString(); textBox16.Text = fxn.ToString(); } else { if (f3 > f1 & f1 > f2) { xl = m2; xn = m; xh = m3; fxl = f2; fxn = f1; fxh = f3; textBox18.Text = fxl.ToString(); textBox17.Text = fxh.ToString(); textBox16.Text = fxn.ToString(); } else { if (f3 > f2 & f2 > f1) { xl = m; xn = m2; xh = m3; fxl = f1; fxn = f2; fxh = f3; textBox18.Text = fxl.ToString(); textBox17.Text = fxh.ToString(); textBox16.Text = fxn.ToString(); } } } } } }; centrt[0] = (xl[0] + xn[0]) / 2; centrt[1] = (xl[1] + xn[1]) / 2; q = centrt[0]; r = centrt[1]; fcentr = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c); Пѓ = Math.Pow((Math.Pow((fxl - fcentr + fxh - fcentr + fxn - fcentr), 2) / 3), 0.5); if (Пѓ <= Оµ) { xl[0] = Math.Round(xl[0], 3); textBox33.Text = xl[0].ToString(); xl[1] = Math.Round(xl[1], 3); textBox32.Text = xl[1].ToString(); } else {// Выполнить отражение ot[0] = centrt[0] + О± * (centrt[0] - xh[0]); ot[1] = centrt[1] + О± * (centrt[1] - xh[1]); q = ot[0]; r = ot[1]; fo = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c); if (fo <= fxl) {//Выполним растяжение ra[0] = centrt[0] + Оі * (ot[0] - centrt[0]); ra[1] = centrt[1] + Оі * (ot[1] - centrt[1]); q = ra[0]; r = ra[1]; fr = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c); if (fr < fxl) { xh = ra; goto two; } else { if (fr >= fxl) { xh = ot; fxh = fo; goto two; } } } else { if (fxn < fo & fo <= fxh) { //оператор сжатия s[0] = centrt[0] + ОІ * (xh[0] - centrt[0]); s[1] = centrt[1] + ОІ * (xh[1] - centrt[1]); xh[0] = s[0]; xh[1] = s[1]; q = s[0]; r = s[1]; fs = a * Math.Pow((q - w), z) + p * Math.Pow((r - t), c); fxh = fs; goto two; } else { if (fxl < fo & fo <= fxn) { xh = ot; fxh = fo; goto two; } else { if (fo > fxh) { m[0] = xl[0] + 0.5 * (m[0] - xl[0]); m[1] = xl[1] + 0.5 * (m[1] - xl[1]); m2[0] = xl[0] + 0.5 * (m2[0] - xl[0]); m2[1] = xl[1] + 0.5 * (m2[1] - xl[1]); m3[0] = xl[0] + 0.5 * (m3[0] - xl[0]); m3[1] = xl[1] + 0.5 * (m3[1] - xl[1]); goto two; } } } }; } label1.Text = "it's work"; } private void button2_Click(object sender, EventArgs e) { Close(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д