Если в процессе решения с шагом
не получено решения, то принятьЭтот алгоритм содержит две основные процедуры:
а) исследующий покоординатный поиск в окрестности данной точки, предназначенный для определения направления убывания f (х);
б) перемещение в направлении убывания.
Рисунок 11 - Метод Хука-Дживса
Трактовать данный метод можно по-разному. Рассмотрим один из многочисленных вариантов.
Опишем один из алгоритмов данного метода.
Шаг 1. Выбираем начальную точку и находим в ней значение функции.
Шаг 2. Обозначим координаты начального вектора:
.Тогда, соответственно, угол направления движения
.Рассчитываем координаты 4-х точек в окрестности начальной по следующим формулам:
Находим в указанных точках значения функции. Если какое-нибудь из них оказалось меньше значения функции в точке x0, то принимаем его за исходное.
Шаг 3. Сравниваем полученные значения с f (x1 (0),x2 (0)). Если какое-нибудь из них оказалось меньше значения функции в 0-й точке точке, то принимаем его за исходное и переходим к шагу 5.
Шаг 4. Если же все полученные значения функции оказались больше исходного, то уменьшаем шаг
и переходим к шагу5.Шаг 5. Проверить условие достижения точности
.Если данное условие не выполнено, возвращаемся к шагу 2.
Пусть заданы следующие условия:
Тогда по методу циклического покоординатного спуска будет выполнен счет следующего вида:
Т. к.
, будем двигаться в противоположную сторону по оси абсцисс с тем же шагом: ,поэтому продолжаем двигаться дальше с тем же шагом в данном направлении до достижения указанной точности, в противном случае уменьшаем шаг (
):Результаты работы данного алгоритма представлены на рисунке 12. Листинг программы приведен в приложении Б.
Рисунок 12 - Решение поставленной задачи методом спуска
Перейдем к методу Хука-Дживса. Обозначим координаты начального вектора:
.Тогда, соответственно, угол направления движения
.Найдем значения функции 4-х точек в окрестности начальной:
Минимальное значение функция принимает в точке2, поэтому движемся в заданном направлении 2 пока идет уменьшение функции до достижения указанной точности, в противном случае уменьшаем шаг
(
):Конечный результат получен на ЭВМ за 36 итераций. Результат представлен на рисунке 13. Листинг программы приведен в приложении Б.
Рисунок 12 - Решение поставленной задачи методом спуска
Правильным симплексом в пространстве En называется множество из n + 1 равноудаленных друг от друга точек (вершин симплекса). Отрезок, соединяющий две вершины, называется ребром симплекса.
В пространстве E2 правильным симплексом является совокупность вершин равностороннего треугольника, в E3 - правильного тетраэдра.
Если х0 - одна из вершин правильного симплекса в En то координаты остальных п вершин х1,. ., хn можно найти, например, по формулам:
(6), гдеd1
, d2 ,a- длина ребра. Вершину х0 симплекса, построенного по формулам (6), будем называть бaзовой. В алгоритме симплексного метода используется следующее важное свойство правильного симплекса. По известному симплексу можно построить новый симплекс отрaжением какой-либо вершины, например, хk симметрично относительно центра тяжести хc остальных вершин симплекса. Новая и старая вершины и хk связаны соотношением:
, где xc .В результате получается новый правильный симплекс с тем же ребром и вершинами =2xc - хk, хi, i= 0,. ., n, i¹k. Таким образом, происходит перемещение симплекса в пространстве Еn. На рисунке 13 представлена иллюстрация этого свойства симплекса в пространстве Е2.
Рисунок 13 - Построение нового симплексa в E2 отрaжением точки х: a - нaчaльный симплекс х0, х1,
; б - новый симплекс х0, х1, ; центр отрaжения - точкaxc = (х0+ х1) /2Поиск точки минимума функции f (x) с помощью правильных симплексов производят следующим образом. На каждой итерации сравниваются значения f (х) в вершинах симплекса. Затем проводят описанную выше процедуру отражения для той вершины, в которой f (х) принимает наибольшее значение. Если в отраженной вершине получается меньшее значение функции, то переходят к новому симплексу. В противном случае выполняют еще одну попытку отражения для вершины со следующим по величине значением f (х). Если и она не приводит к уменьшению функции, то сокращают длину ребра симплекса, например, вдвое и строят новый симплекс с этим ребром. В качестве базовой выбирают ту вершину х0 старого симплекса, в которой функция принимает минимальное значение. Поиск точки минимума f (x) заканчивают, когда либо ребро симплекса, либо разность между значении функции в вершинах симплекса становятся достаточно малыми. Опишем один из вариантов алгоритма этого метода.
Шаг 0. Выбрать параметр точности e, базовую точку х0, ребро
и построить начальный симплекс по формулам:Вычислить f (х1 (0),x2 (0)).
Шаг 1. Вычислить значения f (х) в вершинах симплекса х1,. ., xn.
Шаг 2. Упорядочить вершины симплекса х0,. ., хn так, что бы f (х1 (0),x2
(0))£ …££f (х1) £f (хn-1) £f (хn).
Шаг 3. Найти среднее значение функции:
.Проверить условие
из учета того, что: (3.38)Если оно выполнено, то вычисления прекратить, полагая х*» х0, f*»f (x0). В противном случае перейти к шагу 4.
Шаг 4. Найти
и выполнить отражение вершины хn. К примеру, для отражения вершины А следует найти точку
.Тогда отраженная вершина будет иметь вид:
.