Метод наилучшей пробы
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
оисходит возврат в текущий центр и поиск продолжается. Если число неудачных шагов из текущей точки достигает некоторого числа М, дальнейший поиск продолжается из той же точки, но с меньшим шагом до тех пор, пока он не станет меньше заранее заданной величины 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>