Метод наилучшей пробы

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Вектор 1=(0,843;0,374)

Вектор 2=(0,239;0,954)

Вектор 3=(-0,159;-0,402)

 

)

=(5,60901945041116;5,7012111417641)=(5,19430094266245;6,05006473959406)=(4,81681879073984;4,87590905657051)(y1)=1,573(y2)=0,154(y3)=1,398

 

)

(y)=0,154< f(x)=0,31 Шаг удачный

 

Проверяем условие окончания:

 

k = N

 

Поиск завершен

 

х*=(5,19430094266245;6,05006473959406)(x*)=0,154

 

Всего итераций:10

 

 

ЗАКЛЮЧЕНИЕ

 

В данной курсовой работе были рассмотрены различные методы адаптивного поиска, такие как:

метод наилучшей пробы;

адаптивный метод случайного поиска.

Были указаны основные достоинства и недостатки методов случайного поиска, а также алгоритм решения данного класса задач. Был проведен сравнительный анализ с другими методами, предназначенными для решения данного класса задач.

В программном продукте реализованы следующие функции:

решение заданной функции методом наилучшей пробы;

проверка правильности вводимых значений;

вывод результата в объекте;

вывод ошибок, при условии, что вводимые данные не соответствуют необходимым правилам ввода.

 

 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

 

)Акулич И.Л. Математическое программирование в примерах и задачах: Учеб. пособие. - М.: Высш. шк., 1986.

2)Белецкая С.Ю. Решение задач математического программирования: Учеб. пособие. - Воронеж, 2001.

3)Карманов В.Г. Математическое программирование. - М.: Наука, 1975.

4)Методы оптимизации в примерах и задачах: Учеб. пособ. А.В.Пантелеев, Т.А.Летова - 2-е изд., исправл. - M.:Высш. Шк., 2005. - 544с.

 

 

ПРИЛОЖЕНИЕ А

 

При запуске программы, для реализации решения Метода наилучшей пробы откроется окно, как представлено на рисунке А.1.

 

Рисунок А.1 - Главное окно программы

 

Если пользователь не введет ни одного значения, то появится ошибка, как показано на рисунке А.2.

 

Рисунок А.2 - Ошибка

 

Также если пользователь введет не все значения, то появится сообщение об ошибке, как показано на рисунке А.3.

Рисунок А.3 - Ошибка пустого поля

 

В случаи ввода коэффициента сжатия B1, то появится сообщение об ошибки, как показано на рисунке А.4.

 

Рисунок А.4 - Ошибка ввода значения

 

При нажатии кнопки Решить функцию в окне richTextBox будет выведено решение Метода наилучшей пробы рисунок А.5.

 

Рисунок А.5 - Пример работы программы

 

Если необходимо очистить главные поля для ввода, а так же поле с решением данного алгоритма, можно воспользоваться кнопкой Очистить главные поля показанное на рисунке А.6, панели главного меню во вкладке Меню.

 

Рисунок А.6 - Пункт меню программы Очистить главные поля

 

Для просмотра алгоритма Метода наилучшей пробы необходимо нажать Справка и в открывшейся вкладке выбрать Алгоритм. На экране появится новое окно с алгоритмом метода.

 

Рисунок А.7 - Окно Алгоритм

Для просмотра информации об авторе, достаточно нажать Справка и в открывшейся вкладке выбрать Об авторе.

 

Рисунок А.8 - Окно Об авторе

 

Для выхода из программы необходимо нажать кнопку Меню и в появившейся вкладке выбрать Выход.

 

 

ПРИЛОЖЕНИЕ Б

 

Листинг программы

void Start_Click(object sender, EventArgs e)

{(textBox1.Text == "" && textBox3.Text == "" && textBox4.Text == "" && textBox5.Text == "")

{.Show("Введите данные!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxI con.Error);

=1)">}S = Convert.ToDouble(textBox1.Text);(S = 1)

{.Show("Коэффициент сжатия должен быть в приделах: 0<B<1", "Ошибка", Message BoxButtons.OK, MessageBoxIcon.Error);

}(textBox1.Text == "" || textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "")

{.Show("Не все поля были заполнены!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

{= new Thread(new ThreadStart(delegate { Algoritm(); }));.Start();

}

}void Algoritm()

{B = Convert.ToDouble(textBox1.Text);R = Convert.ToDouble(textBox4.Text);t = Convert.ToDouble(textBox3.Text);M = 3;N = Convert.ToInt32(textBox5.Text);kol = 0;j = 1;[] x = { 1, 2 };[] y1 = new double[2];[] y2 = new double[2];[] y3 = new double[2];[] ym = new double[2];X=0;Y1=0;Y2=0;Y3=0;Ym=0;kor1 = 0;kor2 = 0;kor3 = 0;("x0=(" + x[0] + ";" + x[1] + ")");("B=" + B);("M=" + M);("R=" + R);("N=" + N);("Положить k=0, j=1");[] v1 = new double[2];[] v2 = new double[2];[] v3 = new double[2];n = 0;:(n == 10)

{[0] = -0.111;[1] = -0.388;[0] = 0.227;[1] = 0.931;[0] = 0.929;[1] = 0.17;= 0;

}(n == 9)

{[0] = -0.235;[1] = -0.331;[0] = 0.722;[1] = 0.999;[0] = 0.989;[1] = 0.07;++;

}(n == 8)

{[0] = 0.1;[1] = 0.999;[0] = 0.932;[1] = 0.459;[0] = -0.519;[1] = -0.204;++;

}(n == 7)

{[0] = 0.374;[1] = 0.451;[0] = -0.899;[1] = -0.129;[0] = -0.12;[1] = 0.921;++;

}(n == 6)

{[0] = -0.593;[1] = 0.741;[0] = 0.888;[1] = 0.011;[0] = -0.333;[1] = -0.296;++;

}(n == 5)

{[0] = -0.07;[1] = -0.971;[0] = 0.507;[1] = 0.537;[0] = 0.909;[1] = 0.022;++;

}(n == 4)

{[0] = 0.507;[1] = 0.537;[0] = -0.587;[1] = 0.461;[0] = 0.911;[1] = 0.018;++;

}(n == 3)

{[0] = 0.05;[1] = 0.171;[0] = 0.251;[1] = -0.447;[0] = -0.812;[1] = 0.102;++;

}(n == 2)

{[0] = 0.674;[1] = 0.551;[0] = -0.824;[1] = -0.193;[0] = -0.08;[1] = 0.917;++;

}( n == 1 )

{[0] = 0.168;[1] = -0.727;[0] = -0.478;[1] = -0.214;[0] = -0.361;[1] = 0.112;++;

}(n == 0)

{[0] = 0.843;[1] = 0.374;2[0] = 0.239;

v2[1] = 0.954;

v3[0] = -0.159;

v3[1] = -0.402;

n++;

}

AText("2)\nСлучайные вектора равны:");

kor1 = Math.Sqrt((Math.Pow(v1[0], 2) + Math.Pow(v1[1], 2)));//Вычесление длинны вектора

y1[0] = x[0] + t * (v1[0] / kor1);[1] = x[1] + t * (v1[1] / kor1);("Вектор 1=(" + v1[0] + ";" + v1[1] + ")");= Math.Sqrt((Math.Pow(v2[0], 2) + Math.Pow(v2[1], 2)));//Вычесление длинны вектора[0] = x[0] + t * (v2[0] / kor2);[1] = x[1] + t * (v2[1] / kor2);("Вектор 2=(" + v2[0] + ";" + v2[1] + ")");= Math.Sqrt((Math.Pow(v3[0], 2) + Math.Pow(v3[1], 2)));//Вычесление длинны вектора[0] = x[0] + t * (v3[0] / kor3);[1] = x[1] + t * (v3[1] / kor3);("Вектор 3=(" + v3[0] + ";" + v3[1] + ")");("3)\ny1=(" + y1[0] + ";" + y1[1] + ")");("y2=(" + y2[0] + ";" + y2[1] + ")");("y3=(" + y3[0] + ";" + y3[1] + ")");= Math.Round(Func(x[0], x[1]), 3);= Math.Round(Func(y1[0], y1[1]), 3);= Math.Round(Func(y2[0], y2[1]), 3);= Math.Round(Func(y3[0], y3[1]), 3);("f(y1)=" + Y1);(&q