Решение задач безусловной и условной оптимизации методом переменного многогранника Нелдера-Мида - 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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы