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

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

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

оисходит возврат в текущий центр и поиск продолжается. Если число неудачных шагов из текущей точки достигает некоторого числа М, дальнейший поиск продолжается из той же точки, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины 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);R = Convert.ToDouble(textBox4.Text);t = Convert.ToDouble(textBox3.TextN = Convert.ToInt32(textBox5.Text);

Также в алгоритме содержится массив, в котором хранятся начальные координаты точки. В переменной kol хранится количество итераций.[] x = { 1, 2 };

int kol=0;

Выходными значениями будут элементы массива x, в котором хранятся результаты вычислений алгоритма, и значение переменной Fx. В данном случае в переменной Fx содержится значение функции в точке x*.("Поиск завершен\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)

{4 * Math.Pow((x1 - 5), 2) + Math.Pow((x2 - 6), 2);

}

Вывод текстовой информации в объекте richTextBox осуществляется при помощи функции AText. Invoke - выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.

public void AText(string s)

{.Invoke(new MethodInvoker(delegate

{

richTextBox1.Text += s + "\n";

}));

}

На основной форме главного окна имеется кнопка Решить функцию, при её нажатии срабатывает обработчик событий, который содержит в себе различные условия проверки, ввел ли пользователь требуемые значения для решения функции.

private void Start_Click(object sender, EventArgs e)

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

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

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

{.Show("Заполните поля!!!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

В случаи верности вводимых данных пользователем открывается поток potok и вызывается процедура Solving().

else

{= new Thread(new ThreadStart(delegate { Solving(); }));.Start();.Enabled = false;

}

В процедуре Solving() описываются все переменные, необходимые для решения заданной ф?/p>