Метод наилучшей пробы
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
Вектор 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