Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Метод Хука-Дживса.

Читайте также:
  1. D. Прочие методы регулирования денежно-кредитной сферы
  2. I метод отпечатка на липкой ленте.
  3. I. АДМИНИСТРАТИВНЫЕ МЕТОДЫ УПРАВЛЕНИЯ ПРИРОДООХРАННОЙ ДЕЯТЕЛЬНОСТЬЮ
  4. I. Методические рекомендации
  5. I. Методы эмпирического исследования.
  6. I. ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЙ РАЗДЕЛ
  7. I.4. МЕТОДЫ ИЗУЧЕНИЯ СПЕЦКУРСА
  8. II Биохимические методы
  9. II Методы очистки выбросов от газообразных загрязнителей.Метод абсорбции.
  10. II Методы очистки сточных вод от маслопродуктов.Принцип работы напорного гидроциклона.

Метод более сложный, использует информацию о предыдущих точках. Поиск по методу Хука-Дживса состоит из последовательности шагов вокруг выбранной базисной точки, и в случае успеха с выбором базисной точки, следует поиск по образцу.

Алгоритм:

1 Этап

Выбирается начальная точка b1, которую будем называть базисной точкой. Выбирается шаг hj для каждой переменной xj.

2 Этап «Этап исследования»

1 шаг
Вычисляется значение искомой ф-ции f(x) в базисной точке и ее окрестностях

2 шаг
Вычисляется переменная xj, для каждой переменной вычисляется ф-ция в точке j=1,2,…,n. i1, это единичный вектор в направлении x1.

В том случае, если направление становится меньше, то базовая точка заменяется на точке b1+h1e1.

Если нет, то начинаем поиск в прошлом направлении.

Если значение в этой точке больше, чем значение в базовой точке, то в качестве базовой точке берем точки b1-h1e1.

Если мы не получили уменьшение точки ни в том, ни в ином случае, то j увеличиваем на 1 и считаем для след. Координаты x2.

Аналогично до тех пор, пока j!=n. Получаем новую базисную точку b2. Таким образом, на шаге 2, мы исследовали окрестность базовой точки, и нашли новую базовую точку.

Шаг 3

на этапе исследования. В том случае, если не получилось найти в окрестности найти новую базовую точку, то значение шага по всем координатам уменьшается на порядок. Идет переход к шагу 2.

Этап 3. «Поиск по образцу»
На данном этапе используется информация, полученная на 2 этапе

1 Шаг

Из найденной базовой точки b2 двигаемся в направлении b 2- b1. Это направление выбирается потому, что мы уже получили направление функции. Вычисляем новую точку P1=b1+2(b2-b1).

2 Шаг

Производится исследование точки P1. То есть, для точки P1 производится полное исследование.

3Шаг

Если в результате исследования, мы нашли точку, в которой значение функции уменьшилось, то м ее обозначаем как новую базовую точку, и переходим к шагу 1 третьего этапа. Если в окрестности P1 мы не нашли новой точки, то переходим к этапу исследования для точки b2.

4 этап.
Процесс завершается, когда длина шага h по все координатам будет меньше эпсилон(заданного).

Метод Нелдера-Мида.(Посмотреть мою реализацию)

Мой код MatLab:

function [ min,i ] = NeylerMid(x1, x2, y1, y2, accu)

max = [(x2+x1)/2 (y2+y1)/2];

norm = [(x2 - 0.5*max(1)) (y1 + 0.5*max(2))];

min = [(x1 + 0.5*max(1)) (y1 + 0.5*max(2))];

D = inf;

i = 0;

while D > accu

%Вычислем значение функции в вершинах симплекса

F_treangle = [f(max) f(norm) f(min)];

i = i +1;

sort(F_treangle);

h = MaxS(max, norm, min, F_treangle);

l = MinS(max, norm, min, F_treangle);

g = SG(max, norm, min, F_treangle);

max = h;

norm = g;

min = l;

%Находим центр тяжести

c = (min+norm) / 3;

%Отражение

r = [ (2*c(1) - h(1)) (2*c(2) - h(2))];

if(f(r) < f(l))

e = [ (-1*c(1) + 2*r(1)) (-1*c(2) + 2*r(2))];

if(f(e) < f(l))

max = e;

h = e;

else

max = r;

h = r;

end

elseif(f(l) < f(r) && f(r)<f(g))

max = r;

h = r;

elseif(f(g) <f(r) && f(r)<f(h))

t = max;

max = r;

r = t;

h = max;

s = SWAG(h,c);

if(f(s) < f(h))

max = s;

h = s;

else

max = l +(h-l)/2;

h = max;

norm = l + (h-g)/2;

g = norm;

end

elseif(f(h)<f(r))

s = SWAG(h,c);

if(f(s) < f(h))

max = s;

h = s;

else(f(s) > f(h))

max = l +(max-l)/2;

h = max;

norm = l + (norm-l)/2;

g = norm;

end

end

D = Dispers(min, norm, max);

end

end

function [ h ] = MaxS(a,b,c, F)

if(f(a) == F(3))

h = a;

elseif(f(b) == F(3))

h = b;

else

h = c;

end

end

function [l] = MinS(a,b,c, F)

if(f(a) == F(1))

l = a;

elseif(f(b) == F(1))

l = b;

else

l = c;

end

end

%Нахождение следующего после h по величине значения

function [g] = SG(a,b,c, F)

if(f(a) == F(2))

g = a;

elseif(f(b) == F(2))

g = b;

else

g = c;

end

end

%Веполняем сжатие

function [s] = SWAG(h,c)

s = [ (0.5*h(1) - 0.5*c(1)) (0.5*h(2) - 0.5*c(2))];

end

%Вычисляем дисперсию

function [D] = Dispers(x1, x2, x3)

X = [ (x1(1)^2 + x2(1)^2 + x3(1)^2) (x1(2)^2 + x2(2)^2 + x3(2)^2)];

x = [ ((x1(1) + x2(1) + x3(1))^2) ((x1(2) + x2(2) + x3(2))^2) ];

D = (X - (x/3))/2;

end

 

Метод основан на том, что из n мерного пространства рассматривается множество из n+1 точки (симплекс).В двумерном пространстве, симплекс – треугольник, В трехметром – тетраэдр. Сравнение значения функции во всех вершинах симплекса, и перемещение симплекса в направлении минимального значения функции. Особенно хорошо работает, если n<6.

Алгоритм:

1. Начальный симплекс: f1= f(x1),f2=f(x2),…,fn+1=f(xn+1)

2. Значение функции fh, fl

3. Находятся центры тяжести всех точек симплекса, кроме точки h. Находится значение ф-ции в этой точке fn+2=f(xn+2)

4. Отражение. Точка с максимальным значением(точка h) отражается относительно центра тяжести n+2, получается точка n+3.

5. Растяжение. Этот этап применяется в том случае, если значение ф-ции в точке n+3будет меньше значения в минимальной точке симплекса. Тогда вектор (n+2, n+3) до точки n+4
xn+4=xn+2+¥(xn+3-xn+2)Если в результате растяжения получили, что значение функции меньше, чем в минимальной точке симплекса, то точка xh меняется на точку xn+4, если нет, то xh меняется на точку xn+3, и в том, и в другом случае, происходит переход к п.2

6. Пункт 6 выполняется после нахождения точки n+3, и в том случае, когда значение ф-ции в точке n+3 больше, чем во всех точках симплекса, кроме h. В этом случае производится сжатие симплекса (т.е. точка n+3 по тому же самому направлению приближается к точке n+2
xn+5=xi+0.5(xi-xl). Точка xh меняется на точку xn+5, и происходит переход к п.2

7. Редукция. Выполняется в том случае, если значение ф-ции в найденной точке xn+3 будет хуже, чем значение в наихудшей точке xh. Тогда происходит преобразование координат по данной формуле xi=xl+0.5(xi-xl). Происходит переход к п.2

8. Поиск заканчивается, когда ((1/n+1)∑n+1i=1(f(xi)-f(xn+2))2)1/2<=e

Данный многогранник хорошо адаптируется к топографии целевой ф-ции. Он может вытягиваться вдоль длинных наклонных плоскостей, изменять направление своего движения во впадинах, и сжимается около точки минимума. С помощью операций растяжения и сжатия, размер и формы многогранника маштабируются, и тем самым, удоветворяют заданной топологии

 




Дата добавления: 2015-02-16; просмотров: 166 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав