Метод наилучшей пробы
Принцип метода случайного поиска. Методы наилучшей пробы и его результаты. Блок-схема алгоритма метода наилучшей пробы. Выбор среды программирования, входные и выходные данные, описание программы и результаты её работы. Использование в работе языка C#.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 14.06.2012 |
Размер файла | 812,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Приднестровский государственный университет им. Т.Г. Шевченко
Инженерно-технический институт
Кафедра информационных технологий и автоматизированного
управления производственными процессами
КУРСОВАЯ РАБОТА
по дисциплине «Математическое программирование»
тема: «МЕТОД НАИЛУЧШЕЙ ПРОБЫ»
Работу выполнил:
студент группы ИТ09Др62ИВ1
А.Е. Гусев
Руководитель:
Доцент, к.т.н.
Т.Д. Бордя
Тирасполь, 2012
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. МЕТОДЫ СЛУЧАЙНОГО ПОИСКА
1.1 Методы наилучшей пробы
1.2 Адаптивный метод случайного поиска
2. ОПИСАНИЕ АЛГОРИТМА
2.1 Входные данные
2.2 Блок-схема алгоритма метода Наилучшей пробы
3. ОПИСАНИЕ ПРОГРАММНОЙ ЧАСТИ
3.1 Выбор среды программирования
3.2 Входные и выходные данные
3.3 Описание программы
4. КОНТРОЛЬНЫЙ ПРИМЕР
4.1 Результаты работы программы
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ А - Руководство пользователя
ПРИЛОЖЕНИЕ Б - Листинг программы
ВВЕДЕНИЕ
Оптимизация как раздел математики существует достаточно давно. Оптимизация - это выбор, т.е. то, чем постоянно приходиться заниматься в повседневной жизни. Термином “оптимизация” в литературе обозначает процесс или последовательность операций, позволяющих получить уточненное решение. Хотя конечной целью оптимизации является отыскание наилучшего или “оптимального” решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. Поэтому под оптимизацией понимают скорее стремление к совершенству, которое, возможно, и не будет достигнуто.
Необходимость принятия наилучших решений так же стара, как само человечество. Испокон веку люди, приступая к осуществлению своих мероприятий, раздумывали над их возможными последствиями и принимали решения, выбирая тем или другим образом зависящие от них параметры - способы организации мероприятий. Но до поры, до времени решения могли приниматься без специального математического анализа, просто на основе опыта и здравого смысла.
Цель данной курсовой работы:
- проанализировать и обработать теоретические и экспериментальные данные по теме “Метод наилучшей пробы”;
- анализ собранной информации;
- сравнительный анализ с другими методами;
- разработка программы, реализующая данный метод.
1. МЕТОДЫ СЛУЧАЙНОГО ПОИСКА
Метод случайного поиска является прямым развитием метода проб и ошибок, когда решение ищется случайно, и при удаче принимается, а при неудаче отвергается с тем, чтобы немедленно снова обратиться к случайности как к источнику возможностей. Такое случайное поведение разумно поведение разумно опирается на уверенность, что случайность содержит в себе все возможности, в том числе и искомое решение во всех его вариантах.
Метод случайного поиска, называемый так же методом Монте-Карло, основан на том, что при одном и том же числе испытаний вероятность получения решения, близкого к оптимальному, при случайном поиске больше, чем при последовательном переборе через равные интервалы изменения отдельных параметров.
Идея метода случайного поиска состоит в следующем. Пусть задача минимизации решается для некоторой ограниченной области параметров. Если это возможно, то эта область соответствующим преобразованием координат переводится в единичный гиперкуб. Если такое преобразование неосуществимо, то производится замена координат таким образом, чтобы область поиска лежала внутри единичного гиперкуба. В этом случае эффективность поиска будет сильно зависеть от соотношения объемов единичного гиперкуба и области поиска в нем.
Существуют несколько методов случайного поиска, отличия друг от друга заключаются несколькими шагами или условиями.
1.1 Метод наилучшей пробы
Задается начальная точка х°. Каждая последующая точка находится по формуле:
xk+l = хк + tk о к (1.1)
где tk > 0 - величина шага; ок - случайный вектор единичной длины, определяющий направление поиска; k - номер итерации. На текущей итерации при помощи генерирования случайных векторов о* получается M точек ух,...,ум, лежащих на гиперсфере радиуса tk с центром в точке хк в соответствии с рисунком 1.1 Среди полученных точек выбирается точка ут, в которой значение функции наименьшее. Если в выбранной точке значение функции меньше, чем в центре, то дальнейший поиск продолжается из этой точки. Иначе поиск продолжается из старого центра, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины R.
Рисунок 1.1 - Гиперсфера полученная в результате применения данного метода
1.2 Адаптивный метод случайного поиска
Вначале задается начальная точка х°. Каждая последующая точка находится по формуле:
xk+l = хк + tk о к (1.2)
где tk > 0 - величина шага; ок - случайный вектор единичной длины, определяющий направление поиска; k - номер итерации. На текущей итерации при помощи генерирования случайных векторов ок получаются точки, лежащие на гиперсфере радиуса tk с центром в точке хк в соответствии с рисунком 1.2.
Рисунок 1.2 - Гиперсфера полученная в результате применения данного метода
Если значение функции в полученной точке не меньше, чем в центре, шаг считается неудачным, происходит возврат в текущий центр и поиск продолжается. Если число неудачных шагов из текущей точки достигает некоторого числа М, дальнейший поиск продолжается из той же точки, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины R. Если при этом значение функции снова меньше, чем в центре, направление считается удачным и дальнейший поиск продолжается из этой. Если же значение функции стало не меньше, чем в центре, направление считается неудачным и поиск продолжается из старого центра.
2. ОПИСАНИЕ АЛГОРИТМА
Шаг 1. Задать начальную точку , коэффициент сжатия , M - число испытаний на текущей итерации, =1 - начальную величину шага, R - минимальную величину шага, N - максимальное число итерации. Положить k = 0, j = 1.
Шаг 2. Получить М реализаций случайного вектора , j =1,…,M , где - случайная величина, равномерно распределенная на интервале [-1,1].
Шаг 3. Вычислить , j = 1,…,M.
Шаг 4. Найти из условия
Проверить выполнение условий:
а) если , шаг удачный. Положить и проверить условие окончания. Если , положить и перейти к шагу 2. Если , поиск завершить
б) если , шаг неудачный и перейти к шагу 5.
Шаг 5. Проверить условие окончания:
- если , процесс закончить:
- если , положить и перейти к шагу 2.
2.1 Входные данные
Задать начальную точку , коэффициент сжатия , M = 3 - число испытаний на текущей итерации, =1 - начальную величину шага, R = 0.8 - минимальную величину шага, N = 10 - максимальное число итерации. Положить k = 0, j = 1.
2.2 Блок схема алгоритма метода “Наилучшей пробы”
нет
Да
Рисунок 2.1 - Блок схема алгоритма метода “Наилучшей пробы”
3. ОПИСАНИЕ ПРОГРАММНОЙ ЧАСТИ
3.1 Выбор среды программирования
поиск проба программирование C#
Для разработки приложения используется интегрированная среда разработки Visual Studio 2005, язык C#.
Создателем языка является сотрудник Microsoft Андреас Хейлсберг. Он стал известным в мире программистов задолго до того, как пришел в Microsoft.
С# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами.
C# является мощным объектным языком с возможностями наследования и универсализации.
C# является наследником языков С/С++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от C++ к С#.
Одна из причин разработки нового языка - это создание компонентно-ориентированного языка для новой платформы .NET. Другие языки были созданы до появления платформы .NET, а язык C# создавался специально под эту платформу.
3.2 Входные и выходные данные
При загрузки программы пользователю необходимо ввести данные в объекты textbox:
- коэффициент сжатия в записывается в переменную B. Данное значение не должно выходить за пределы [0,1]. В случаи неправильности ввода значения, будет показано сообщение об ошибке;
- начальная величина шага записывается в переменную t;
- минимальная величина шага R записывается в переменную R;
- максимальное число итераций N записывается в переменную N.
double B = Convert.ToDouble(textBox1.Text);
double R = Convert.ToDouble(textBox4.Text);
double t = Convert.ToDouble(textBox3.Text
double N = Convert.ToInt32(textBox5.Text);
Также в алгоритме содержится массив, в котором хранятся начальные координаты точки. В переменной kol хранится количество итераций.
double[] x = { 1, 2 };
int kol=0;
Выходными значениями будут элементы массива x, в котором хранятся результаты вычислений алгоритма, и значение переменной Fx. В данном случае в переменной Fx содержится значение функции в точке x*.
AText("Поиск завершен\nх*=(" + Math.Round(x[0],3) + ";" + Math.Round(x[1],3) + ")\nF(x*)=" + Fy + "\nВсего итераций:" + kol);
3.3 Описание программы
Рассмотрим фрагмент кода программы, реализующая “метод наилучшей пробы”.
В функции Func имеется описание алгоритма принимающий два значения типа double. После чего происходят вычисления и значения подставляются в исходную функцию: . Далее передается значение, возвращаемое в качестве результата функции.
public double Func(double x1, double x2)
{
return 4 * Math.Pow((x1 - 5), 2) + Math.Pow((x2 - 6), 2);
}
Вывод текстовой информации в объекте richTextBox осуществляется при помощи функции AText. Invoke - выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
public void AText(string s)
{
richTextBox1.Invoke(new MethodInvoker(delegate
{
richTextBox1.Text += s + "\n";
}));
}
На основной форме главного окна имеется кнопка “Решить функцию”, при её нажатии срабатывает обработчик событий, который содержит в себе различные условия проверки, ввел ли пользователь требуемые значения для решения функции.
private void Start_Click(object sender, EventArgs e)
{
double S = Convert.ToDouble(textBox1.Text);
if (S <= 0 || S >= 1)
{
MessageBox.Show("Коэффициент сжатия должен быть в приделах: 0<B<1", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (textBox1.Text == "" || textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "")
{
MessageBox.Show("Заполните поля!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
В случаи верности вводимых данных пользователем открывается поток potok и вызывается процедура Solving().
else
{
potok = new Thread(new ThreadStart(delegate { Solving(); }));
potok.Start();
Rehenie.Enabled = false;
}
В процедуре Solving() описываются все переменные, необходимые для решения заданной функции. Также в ней описываются условия, при выполнении которых происходят проверки и вычисления необходимые для правильного решения заданной функции.
4. КОНТРОЛЬНЫЙ ПРИМЕР
Задать начальную точку , коэффициент сжатия , M = 3 - число испытаний на текущей итерации, =1 - начальную величину шага, R = 0.8 - минимальную величину шага, N = 10 - максимальное число итерации. Положить k = 0, j = 1.
Итерация 1(0)
Итерация 2(0)
Итерация 3(0)
Итерация 4(0)
Шаг удачный
перейти к шагу 2.
Итерация 2(1)
Итерация 3(1)
Итерация 4(1)
Шаг неудачный перейти к шагу 5
Итерация 5(0)
Перейти к шагу 2
Итерация 2(2)
Итерация 3(2)
Итерация 4(2)
Шаг удачный
перейти к шагу 2.
Итерация 2(3)
Итерация 3(3)
Итерация 4(3)
Шаг удачный
перейти к шагу 2.
Итерация 2(4)
Итерация 3(4)
Итерация 4(4)
Шаг удачный
перейти к шагу 2.
Итерация 2(5)
Итерация 3(5)
Итерация 4(5)
Шаг удачный
перейти к шагу 2.
Итерация 2(6)
Итерация 3(6)
Итерация 4(6)
Шаг удачный
перейти к шагу 2.
Итерация 2(7)
Итерация 3(7)
Итерация 4(7)
Шаг удачный
перейти к шагу 2.
Итерация 2(8)
Итерация 3(8)
Итерация 4(8)
Шаг удачный
перейти к шагу 2.
Итерация 2(9)
Итерация 3(9)
Итерация 4(9)
Шаг удачный
перейти к шагу 2.
Итерация 2(10)
Итерация 3(10)
Итерация 4(10)
Шаг удачный
Поиск завершен F(x*)=0,154
Всего итераций:10.
4.1 Результаты работы программы
Дана функция , требуется решиться методом “Наилучшей пробы”.
Результат:
x0=(1;2)
B=0,618
M=3
R=0,8
N=10
Положить k=0, j=1
2)
Случайные вектора равны:
Вектор 1=(0,843;0,374)
Вектор 2=(0,239;0,954)
Вектор 3=(-0,159;-0,402)
3)
y1=(1,91407963398224;2,40553473678453)
y2=(1,24301408746329;2,9700227591631)
y3=(0,632201543899193;1,07009446948098)
f(y1)=51,012
f(y2)=65,641
f(y3)=100,615
4)
f(y)=51,012< f(x)=80 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,168;-0,727)
Вектор 2=(-0,478;-0,214)
Вектор 3=(-0,361;0,112)
3)
y1=(2,13923276919031;1,43121134811628)
y2=(1,00137380066825;1,99691748086571)
y3=(0,958989675300652;2,70185073504585)
f(y1)=53,61
f(y2)=79,981
f(y3)=76,197
5)f(y)=53,61>= f(x)=51,012Шаг неудачный
Проверяем условие окончания
t > R
2)
Случайные вектора равны:
Вектор 1=(0,674;0,551)
Вектор 2=(-0,824;-0,193)
Вектор 3=(-0,08;0,917)
3)
y1=(2,3925433489388;2,7966823731956)
y2=(1,31236448061059;2,26459902731763)
y3=(1,8603687032674;3,02119628010338)
f(y1)=37,457
f(y2)=68,348
f(y3)=48,302
4)
f(y)=37,457< f(x)=51,012 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,05;0,171)
Вектор 2=(0,251;-0,447)
Вектор 3=(-0,812;0,102)
3)
y1=(2,56598291444603;3,38984568723033)
y2=(2,69512406997668;2,25782347955443)
y3=(1,77936220453972;2,87370759084179)
f(y1)=30,511
f(y2)=35,254
f(y3)=51,264
4)
f(y)=30,511< f(x)=37,457 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,507;0,537)
Вектор 2=(-0,587;0,461)
Вектор 3=(0,911;0,018)
3)
y1=(2,99024253690995;3,83920942936667)
y2=(2,07995199875453;3,77154969427255)
y3=(3,18386231658711;3,40205406180612)
f(y1)=20,826
f(y2)=39,073
f(y3)=19,943
4)
f(y)=19,943< f(x)=30,511 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(-0,07;-0,971)
Вектор 2=(0,507;0,537)
Вектор 3=(0,909;0,022)
3)
y1=(3,13942562874768;2,78565372049062)
y2=(3,60812193905102;3,85141780394245)
y3=(3,80168139710641;3,41700677882638)
f(y1)=24,179
f(y2)=12,366
f(y3)=12,416
4)
f(y)=12,366< f(x)=19,943 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(-0,593;0,741)
Вектор 2=(0,888;0,011)
Вектор 3=(-0,333;-0,296)
3)
y1=(3,22198099450301;4,3339311933355)
y2=(4,22607452927095;3,85907262206455)
y3=(3,14622298010452;3,44084095154556)
f(y1)=15,421
f(y2)=6,979
f(y3)=20,295
4)
f(y)=6,979< f(x)=12,366 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,374;0,451)
Вектор 2=(-0,899;-0,129)
Вектор 3=(-0,12;0,921)
3)
y1=(4,62056609668037;4,33478304158767)
y2=(3,61434029772258;3,77129318283236)
y3=(4,14622825185625;4,47189280122236)
f(y1)=3,349
f(y2)=12,647
f(y3)=5,251
4)
f(y)=3,349< f(x)=6,979 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,1;0,999)
Вектор 2=(0,932;0,459)
Вектор 3=(-0,519;-0,204)
3)
y1=(4,68212033952824;4,94970992763789)
y2=(5,17497767685909;4,60782479620358)
y3=(4,04540209301062;4,10870701702384)
f(y1)=1,507
f(y2)=2,061
f(y3)=7,222
4)
f(y)=1,507< f(x)=3,349 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(-0,235;-0,331)
Вектор 2=(0,722;0,999)
Вектор 3=(0,989;0,07)
3)
y1=(4,32435671526554;4,44579605686788)
y2=(5,04411823661013;5,45059067443126)
y3=(5,2985781633938;4,99334192730482)
f(y1)=4,242
f(y2)=0,31
f(y3)=1,37
4)
f(y)=0,31< f(x)=1,507 Шаг удачный
Проверяем условие окончания:
k < N
2)
Случайные вектора равны:
Вектор 1=(0,843;0,374)
Вектор 2=(0,239;0,954)
Вектор 3=(-0,159;-0,402)
3)
y1=(5,60901945041116;5,7012111417641)
y2=(5,19430094266245;6,05006473959406)
y3=(4,81681879073984;4,87590905657051)
f(y1)=1,573
f(y2)=0,154
f(y3)=1,398
4)
f(y)=0,154< f(x)=0,31 Шаг удачный
Проверяем условие окончания:
k = N
Поиск завершен
х*=(5,19430094266245;6,05006473959406)
F(x*)=0,154
Всего итераций:10
ЗАКЛЮЧЕНИЕ
В данной курсовой работе были рассмотрены различные методы адаптивного поиска, такие как:
- метод наилучшей пробы;
- адаптивный метод случайного поиска.
Были указаны основные достоинства и недостатки методов случайного поиска, а также алгоритм решения данного класса задач. Был проведен сравнительный анализ с другими методами, предназначенными для решения данного класса задач.
В программном продукте реализованы следующие функции:
- решение заданной функции методом наилучшей пробы;
- проверка правильности вводимых значений;
- вывод результата в объекте;
- вывод ошибок, при условии, что вводимые данные не соответствуют необходимым правилам ввода.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1) Акулич И.Л. Математическое программирование в примерах и задачах: Учеб. пособие. - М.: Высш. шк., 1986.
2) Белецкая С.Ю. Решение задач математического программирования: Учеб. пособие. - Воронеж, 2001.
3) Карманов В.Г. Математическое программирование. - М.: Наука, 1975.
4) Методы оптимизации в примерах и задачах: Учеб. пособ. А.В.Пантелеев, Т.А.Летова - 2-е изд., исправл. - M.:Высш. Шк., 2005. - 544с.
ПРИЛОЖЕНИЕ А
При запуске программы, для реализации решения “Метода наилучшей пробы” откроется окно, как представлено на рисунке А.1.
Рисунок А.1 - Главное окно программы
Если пользователь не введет ни одного значения, то появится ошибка, как показано на рисунке А.2.
Рисунок А.2 - Ошибка
Также если пользователь введет не все значения, то появится сообщение об ошибке, как показано на рисунке А.3.
Рисунок А.3 - Ошибка пустого поля
В случаи ввода коэффициента сжатия B<0 либо B>1, то появится сообщение об ошибки, как показано на рисунке А.4.
Рисунок А.4 - Ошибка ввода значения
При нажатии кнопки “Решить функцию” в окне richTextBox будет выведено решение “Метода наилучшей пробы” рисунок А.5.
Рисунок А.5 - Пример работы программы
Если необходимо очистить главные поля для ввода, а так же поле с решением данного алгоритма, можно воспользоваться кнопкой “Очистить главные поля” показанное на рисунке А.6, панели главного меню во вкладке “Меню”.
Рисунок А.6 - Пункт меню программы “Очистить главные поля”
Для просмотра алгоритма “Метода наилучшей пробы” необходимо нажать “Справка” и в открывшейся вкладке выбрать “Алгоритм”. На экране появится новое окно с алгоритмом метода.
Рисунок А.7 - Окно “Алгоритм”
Для просмотра информации об авторе, достаточно нажать “Справка” и в открывшейся вкладке выбрать “Об авторе”.
Рисунок А.8 - Окно “Об авторе”
Для выхода из программы необходимо нажать кнопку “Меню” и в появившейся вкладке выбрать “Выход”.
ПРИЛОЖЕНИЕ Б
Листинг программы
private void Start_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" && textBox3.Text == "" && textBox4.Text == "" && textBox5.Text == "")
{
MessageBox.Show("Введите данные!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxI con.Error);
}
double S = Convert.ToDouble(textBox1.Text);
if (S <= 0 || S >= 1)
{
MessageBox.Show("Коэффициент сжатия должен быть в приделах: 0<B<1", "Ошибка", Message BoxButtons.OK, MessageBoxIcon.Error);
}
if (textBox1.Text == "" || textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "")
{
MessageBox.Show("Не все поля были заполнены!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
potok = new Thread(new ThreadStart(delegate { Algoritm(); }));
potok.Start();
}
}
public void Algoritm()
{
double B = Convert.ToDouble(textBox1.Text);
double R = Convert.ToDouble(textBox4.Text);
double t = Convert.ToDouble(textBox3.Text);
double M = 3;
double N = Convert.ToInt32(textBox5.Text);
double kol = 0;
double j = 1;
double[] x = { 1, 2 };
double[] y1 = new double[2];
double[] y2 = new double[2];
double[] y3 = new double[2];
double[] ym = new double[2];
double X=0;
double Y1=0;
double Y2=0;
double Y3=0;
double Ym=0;
double kor1 = 0;
double kor2 = 0;
double kor3 = 0;
AText("x0=(" + x[0] + ";" + x[1] + ")");
AText("B=" + B);
AText("M=" + M);
AText("R=" + R);
AText("N=" + N);
AText("Положить k=0, j=1");
double[] v1 = new double[2];
double[] v2 = new double[2];
double[] v3 = new double[2];
int n = 0;
P:
if (n == 10)
{
v1[0] = -0.111;
v1[1] = -0.388;
v2[0] = 0.227;
v2[1] = 0.931;
v3[0] = 0.929;
v3[1] = 0.17;
n = 0;
}
if (n == 9)
{
v1[0] = -0.235;
v1[1] = -0.331;
v2[0] = 0.722;
v2[1] = 0.999;
v3[0] = 0.989;
v3[1] = 0.07;
n++;
}
if (n == 8)
{
v1[0] = 0.1;
v1[1] = 0.999;
v2[0] = 0.932;
v2[1] = 0.459;
v3[0] = -0.519;
v3[1] = -0.204;
n++;
}
if (n == 7)
{
v1[0] = 0.374;
v1[1] = 0.451;
v2[0] = -0.899;
v2[1] = -0.129;
v3[0] = -0.12;
v3[1] = 0.921;
n++;
}
if (n == 6)
{
v1[0] = -0.593;
v1[1] = 0.741;
v2[0] = 0.888;
v2[1] = 0.011;
v3[0] = -0.333;
v3[1] = -0.296;
n++;
}
if (n == 5)
{
v1[0] = -0.07;
v1[1] = -0.971;
v2[0] = 0.507;
v2[1] = 0.537;
v3[0] = 0.909;
v3[1] = 0.022;
n++;
}
if (n == 4)
{
v1[0] = 0.507;
v1[1] = 0.537;
v2[0] = -0.587;
v2[1] = 0.461;
v3[0] = 0.911;
v3[1] = 0.018;
n++;
}
if (n == 3)
{
v1[0] = 0.05;
v1[1] = 0.171;
v2[0] = 0.251;
v2[1] = -0.447;
v3[0] = -0.812;
v3[1] = 0.102;
n++;
}
if (n == 2)
{
v1[0] = 0.674;
v1[1] = 0.551;
v2[0] = -0.824;
v2[1] = -0.193;
v3[0] = -0.08;
v3[1] = 0.917;
n++;
}
if ( n == 1 )
{
v1[0] = 0.168;
v1[1] = -0.727;
v2[0] = -0.478;
v2[1] = -0.214;
v3[0] = -0.361;
v3[1] = 0.112;
n++;
}
if (n == 0)
{
v1[0] = 0.843;
v1[1] = 0.374;
v2[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);
y1[1] = x[1] + t * (v1[1] / kor1);
AText("Вектор 1=(" + v1[0] + ";" + v1[1] + ")");
kor2 = Math.Sqrt((Math.Pow(v2[0], 2) + Math.Pow(v2[1], 2)));//Вычесление длинны вектора
y2[0] = x[0] + t * (v2[0] / kor2);
y2[1] = x[1] + t * (v2[1] / kor2);
AText("Вектор 2=(" + v2[0] + ";" + v2[1] + ")");
kor3 = Math.Sqrt((Math.Pow(v3[0], 2) + Math.Pow(v3[1], 2)));//Вычесление длинны вектора
y3[0] = x[0] + t * (v3[0] / kor3);
y3[1] = x[1] + t * (v3[1] / kor3);
AText("Вектор 3=(" + v3[0] + ";" + v3[1] + ")");
AText("3)\ny1=(" + y1[0] + ";" + y1[1] + ")");
AText("y2=(" + y2[0] + ";" + y2[1] + ")");
AText("y3=(" + y3[0] + ";" + y3[1] + ")");
X = Math.Round(Func(x[0], x[1]), 3);
Y1 = Math.Round(Func(y1[0], y1[1]), 3);
Y2 = Math.Round(Func(y2[0], y2[1]), 3);
Y3 = Math.Round(Func(y3[0], y3[1]), 3);
AText("f(y1)=" + Y1);
AText("f(y2)=" + Y2);
AText("f(y3)=" + Y3);
if (Y1 < Y2 && Y1 < Y3)
{
Ym = Y1;
y1.CopyTo(ym, 0);
}
if (Y2 < Y1 && Y2 < Y3)
{
Ym = Y2;
y2.CopyTo(ym, 0);
}
if (Y3 < Y2 && Y3 < Y1)
{
Ym = Y3;
y3.CopyTo(ym, 0);
}
if (Ym < X)
{
AText("4)\nf(y)=" + Ym + "< f(x)=" + X + " Шаг удачный");
ym.CopyTo(x, 0);//xk+1=ym
kol++;
AText("Проверяем условие окончания:");
if (kol < N)
{
AText("k < N");
j = 1;
goto P;
}
else
{
AText("k = N");
AText("Поиск завершен\nх*=(" + x[0] + ";" + x[1] + ")\nF(x*)=" + Ym + "\nВсего итераций:" + kol);
potok.Abort();
}
}
else
{
AText("5)f(y)=" + Ym + ">= f(x)=" + X +"Шаг неудачный \nПроверяем условие окончания");
if (t <= R)
{
AText("t <= R");
AText("Поиск завершен\nх*=(" + x[0] + ";" + x[1] + ")\nF(x*)=" + Ym + "\nВсего итераций:" + kol);
potok.Abort();
}
else
{
AText("t > R");
t = B * t;
j = 1;
goto P;
}
}
}
//Выход
private void Exit_Click(object sender, EventArgs e)
{
//th.Abort();
Application.Exit();
}
private void очиститьПоляToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
textBox1.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void алгоритмToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 s = new Form2();
s.Show();
}
private void обАвтореToolStripMenuItem_Click(object sender, EventArgs e)
{
Form3 a = new Form3();
a.Show();
}
Размещено на Allbest.ru
Подобные документы
Структура математической модели линейной задачи, алгоритм симплекс-метода. Разработка программы: выбор языка программирования, входные и выходные данные, пользовательский интерфейс. Описание программы по листингу, тестирование, инструкция по применению.
курсовая работа [1,2 M], добавлен 31.05.2013Освоение метода аналитической иерархии на примере задачи о выборе автомобиля. Вычисление коэффициентов важности. Определение наилучшей альтернативы. Реализация задачи в виде программного продукта в Microsoft.NET Framework на языке C#, описание интерфейса.
курсовая работа [2,4 M], добавлен 13.02.2016Алгоритм разработки программного обеспечения. Выбор оптимальной среды программирования. Использование регистров специального назначения. Листинг программы в кодах языка Assambler. Результаты ее компилирования. Блок схема основной программы и макроса RND.
курсовая работа [416,5 K], добавлен 11.03.2015Особенности задач линейного программирования. Симплексный метод решения задач линейного программирования. Обоснование выбора языка, инструментария программирования, перечень идентификаторов и блок-схема алгоритма. Логическая схема работы программы.
дипломная работа [2,4 M], добавлен 13.08.2011Математическая постановка задачи. Обоснование выбора средств разработки. Входные и выходные данные работы программы. Решение задачи теста для написания и отладки программы. Описание программных модулей. Разработка алгоритма, анализ полученных результатов.
курсовая работа [2,2 M], добавлен 13.12.2015Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.
курсовая работа [721,4 K], добавлен 10.11.2010Анализ входной, выходной и постоянной информации. Математическая формулировка задачи и выбор метода обработки заданных параметров. Разработка алгоритма и его описание. Инструкция по эксплуатации программы, результаты проведенных расчетов и их анализ.
курсовая работа [100,2 K], добавлен 11.02.2016Сущность основных понятий объектно-ориентированного программирования: объект, класс, полиморфизм. Блок-схема алгоритма и текст программы для вычисления площади круга, прямоугольника и трапеции. Принцип работы и результаты тестирования приложения.
курсовая работа [588,7 K], добавлен 17.07.2012Сущность и описание симплекс-метода и улучшенного симплекс-метода (метода обратной матрицы), преимущества и недостатки их применения в линейном прогаммировании. Листинг и блок-схема программы на языке Turbo Pascal для решения математической задачи.
курсовая работа [45,0 K], добавлен 30.03.2009Исследование систем методами случайного поиска. Изучение сущности метода половинного деления. Сравнительный анализ прямого перебора и половинного деления. Ручной счет. Шаги исследования. Описание окна работающей программы. Блок-схема и код программы.
курсовая работа [257,5 K], добавлен 06.05.2014