Пособие в_4_20_деф_мн
.pdfЛабораторная работа 4. Методы многомерного поиска Метод деформируемого многогранника
Нелдер и Мид усовершенствовали метод регулярного симплекса, сохранив его достоинства, и предложили методику ускорения поиска в удачно выбранном направлении. В методе деформированного многогранника (метод Нелдера Мида) также строят исходный регулярный симплекс, определяют значения целевой функции в вершинах симплекса.
При работе с алгоритмом метода деформируемого многогранника используются следующие соглашения:
первый индекс координаты входного параметра определяет порядковый номер вершины симплекса. Количество вершин симплекса равно п+1;
второй индекс координаты входного параметра обозначает порядковый номер оси координат (координата направления). Для целевой функции двух переменных максимальное значение второго индекса j=2.
В двухмерный массив координат вершин симплекса (п+1 вершина) добавлены координаты:
п + 2 - центра тяжести; п + З -отображенной вершины;
п + 4 - растянутой вершины; п + 5 - сжатой вершины.
Для удобства обозначений в выражениях используются индексы: h - номер вершины симплекса, которой принадлежит максимальное значение целевой
функции
f xhk max f xhk , где
l - номер вершины симплекса, которой принадлежит минимальное значе-
ние целевой функции |
|
f xl k min f x jk , где |
j 1, n 1; |
к— номер шага (итерации) алгоритма.
Для определения координат центра тяжести симплекса используют выражение:
|
|
1 |
|
n 1 |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|||
xnk 2, j |
|
|
|
xi,kj |
xhk, j , где |
j 1, n 1. |
||||
n |
||||||||||
|
|
i 1 |
|
|
|
|
|
1
Исходный симплекс регулярный, следовательно, в начало координат можно поместить либо одну из вершин симплекса, либо центр тяжести. Из аналитической геометрии известно, что координаты вершин правильной (регулярной) фигуры можно задать с помощью матрицы
|
0 |
d1 |
d2 |
... |
d2 |
|
|
|
|
0 |
d2 |
d1 |
... |
d2 |
|
D |
|
|
|||||
... ... |
... |
... |
... |
|
|||
|
|
0 |
d2 |
d2 |
... |
d1 |
|
|
|
|
Количество столбцов матрицы D соответствует количеству вершин симплекса (п+1), а строки матрицы D содержат координаты вершин симплекса. Количество строк равно п.
Значения элементов матрицы D вычисляют по формулам:
|
|
|
|
t |
|
|
|
|
|
n 1 ; |
|||
d1 |
|
|
|
|
n 1 |
||||||||
|
|
|
|
|
|||||||||
n |
2 |
||||||||||||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
t |
|
|
|
|
|
|
1 , |
|||
d2 |
|
|
|
|
|
|
n 1 |
||||||
|
|
|
|
|
|
||||||||
|
n |
2 |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
где t— расстояние между вершинами симплекса. Для большинства задач t=1. Над отображаемой вершиной в методе деформируемого многогранника
могут быть выполнены следующие процедуры. 1.Отображение вершины.
2.В случае поиска минимума целевой функции через центр тяжести отображается вершина h с наибольшим значением целевой функции.
В случае поиска максимума целевой функции – вершина l. Отображение вершины симплекса выполняется с использованием выражения:
xnk 3, j xnk 2, j xnk 2 xhk, j ,
где 0 коэффициент отображения.
Если значение целевой функции в отображенной вершине (п+3) меньше, чем в вершине хh, и больше, чем в вершине хl, то координаты вершины хh заменяют на координаты отображенной вершины.
3.Растяжение вершины.
4.Если после отображения вершины симплекса оказалось, что значение целевой функции в отображаемой вершине меньше, чем во всех остальных вершинах или равно значению целевой функции в вершине хl, то выбранное направление удачное, т. е. где-то в этом направлении нахо-
2
дится экстремум. Поэтому отображаемую вершину надо продвинуть в
направлении отображения.
xnk 4, j xnk 2, j xnk 3 xnk 2, j ,
где 1 коэффициент растяжения.
5.Если значение целевой функции в растянутой вершине меньше, чем значение целевой функции в отображенной вершине, то координаты вершины хh заменяются на координаты растянутой вершины. В противном случае координаты вершины хh заменяются на координаты растянутой вершины.
6.Сжатие вершины.
Если после отображения вершины симплекса оказалось, что значение целевой функции в отображенной вершине больше или равно значению целевой функции в вершине хh, то направление отображения выбрано неудачно и отображенную вершину надо приблизить к центру тяжести. Сжатие вершины выполняется по формуле:
xnk 5, j xnk 2, j xhk, j xnk 2, j , (1)
где 0 1 - коэффициент сжатия.
Если после выполнения процедуры сжатия значение целевой функции в сжатой вершине будет меньше, чем в вершине хh, то выполняем замену координат вершины xh, на координаты сжатой вершины. В противном случае выполняется процедура редукции вершин симплекса.
По формуле (1) симплекс сжимается к вершине хl. Можно преобразовать формулу (1) и симплекс будет сжиматься к центру тяжести.
4. Редукция вершин.
Если в результате выполнения процедур отображения и сжатия оказалось, что выполнить замену координат вершины хh, нельзя, то выполняется процедура редукции вершин симплекса, в результате чего геометрические размеры симплекса уменьшаются, как правило, в 2 раза. Редукция вершин симплекса выполняется по формуле:
xi,kj xl ,kj 0,5 xi,kj xl ,kj , j 1, n 1 .
Процедура редукции выполняется в том случае, когда нет возможности отобразить вершину хh, т. е. симплекс находится в окрестности экстремума и надо уточнить координаты экстремальной точки.
3
Для всех процедур — отображение, растяжение, сжатие, редукция и определение координат центра тяжести – вычисления по указанным формулам надо выполнить для каждого индекса (для каждого координатного направления).
При выполнении процедур растяжения и сжатия исходный регулярный симплекс изменяет свои геометрические размеры и теряет свойство регулярности.
5. Критерий окончания поиска.
Критериев окончания поиска можно указать несколько. Наилучшего критерия окончания поиска нет. Авторы метода деформируемого многогранника рекомендуют в качестве критерия окончания поиска использовать выражение:
|
|
|
|
|
2 |
|
|
|
n |
|
|
||
|
|
|
|
|
||
1 |
|
f xi k f xnk 2 |
|
, |
||
n 1 |
||||||
i 1 |
|
|
|
|||
|
|
|
|
|
где - произвольное малое число, которое определяет точность вычисления значения целевой функции.
Используемый деформируемый многогранник (симплекс) наиболее удачно приспособлен к топографии целевой функции, т. е. изменяет свою форму в зависимости от «рельефа» целевой функции.
Авторы метода деформируемого многогранника провели ряд исследований и рекомендуют следующие значения коэффициентов: 1; 0,5 и 2 . Другие исследователи этого метода рекомендуют 1; 0,4 0,6 и 2,8 3,0 . Предложенные рекомендации хорошо себя показали на многих це-
левых функциях, хотя при исследовании специальных целевых функций значения коэффициентов могут быть другими.
Практическое задание. Найти оптимальные значения x x1; x2 для целевой
функции F x x12 x2 11 2 x1 x22 7 2 min в окрестностях точки x0 5; 5 методом деформируемого многогранника. Создать и выполнить приведенный ниже скриптфайл, иллюстрирующий выполнение минимизации.
% Демонстрация метода деформируемого многогранника (сим- плекс-метод Нелдера-Мида)
clc; close all % График ЦФ
xi1 = -5.5:0.1:5.5; xi2 = -5.5:0.1:5.5;
4
[X1, X2] = meshgrid(xi1,xi2);
Fun = (X1.^2 + X2 - 11).^2 + (X1 + X2.^2 - 7).^2; figure
meshc(X1, X2, Fun); grid on figure
contour(X1, X2, Fun, 120); grid on
%линии уровня вблизи x1 = [5; 5] xi1 = 3.5:0.02:5.5;
xi2 = 3.5:0.02:5.5;
[X1, X2] = meshgrid(xi1,xi2);
Fun = (X1.^2 + X2 - 11).^2 + (X1 + X2.^2 - 7).^2; figure
contour(X1, X2, Fun, 50); hold on; axis equal
%встроенная ЦФ
F = inline('(x(1).^2 + x(2) - 11).^2 + (x(1) + x(2).^2 - 7).^2');
n = 2; % размерность задачи
b = 0.2; % длина ребра симплекса alpha = 1; % коэффициент отображения gamma = 2; % коэффициент растяжения beta = 0.5; % коэффициент сжатия
MaxNumIter = 100; % максимальное количество итераций
x1 = [5; 5]; % стартовая точка
TolFun = 0.0001;
% строим исходный регулярный симплекс
x2 = zeros(2,1); % координаты второй точки симплекса x2(1) = x1(1) + (sqrt(n+1)-1) / (n*sqrt(2)) * b; x2(2) = x1(2) + (sqrt(n+1)+n-1) / (n*sqrt(2)) * b;
x3 = zeros(2,1); % координаты третьей точки симплекса x3(1) = x1(1) + (sqrt(n+1)+n-1) / (n*sqrt(2)) * b; x3(2) = x1(2) + (sqrt(n+1)-1) / (n*sqrt(2)) * b;
x = zeros(2,3);
% записываем в массив 2*3 координаты симплекса x(:,1) = x1;
x(:,2) = x2; x(:,3) = x3;
for i=1:MaxNumIter, % цикл по номеру sprintf('Симплекс № %d', i)
5
%plot(x1(1), x1(2), 'bo'); hold on; %plot(x2(1), x2(2), 'g*'); hold on; %plot(x3(1), x3(2), 'r*'); grid on;
patch([x1(1) x2(1) x3(1)], [x1(2) x2(2) x3(2)], [1 1 1], 'FaceColor', 'none')
F1 = F(x1);
F2 = F(x2);
F3 = F(x3);
sprintf('ЦФ в точке х1 %f', F1) sprintf('ЦФ в точке х2 %f', F2) sprintf('ЦФ в точке х3 %f', F3)
%самая высокая точка F
Fmax = max([F1 F2 F3]); switch Fmax
case F1
xh = x1; nh = 1; case F2
xh = x2; nh = 2; case F3
xh = x3; nh = 3;
end
%самая низкая точка F Fmin = min([F1 F2 F3]); switch Fmin
case F1
xl = x1; case F2
xl = x2; case F3
xl = x3;
end
%Центр тяжести, спроецированный на ребро симплекса, относительно которого выполняется отображение
x4 = 1./n .* (x1+x2+x3-xh); plot(x4(1), x4(2), 'kh'); F4 = F(x4);
% проверка критерия достаточной малости симплекса if (((F1-F4)^2+(F2-F4)^2+(F3-F4)^2)/3 < TolFun),
disp('Сходимость достигнута');
6
sprintf('x1 опт = %f, x2 опт = %f, Fmin = %f', xl(1), xl(2), Fmin)
break;
end
% отображаем точку
x5 = x4 + alpha*(x4-xh); plot(x5(1), x5(2), 'ms'); F5 = F(x5);
sprintf('ЦФ в точке х5 %f', F(x5))
if (F5 < F(xh)), % в новой точке получено меньшее значение ЦФ
x(:,nh) = x5;
plot([xh(1) x5(1)], [xh(2) x5(2)], '--')
|
% растяжение вершины |
||
|
x6 |
= |
x4 + gamma*(x4-xh); |
% |
x6 = x4 + gamma*(x5-x4); |
||
|
plot(x6(1), x6(2), 'c^'); |
||
|
F6 |
= F(x6); |
|
|
plot([xh(1) x6(1)], [xh(2) x6(2)], '--') |
||
|
if (F6 < F5), % в новой точке получено меньшее значе- |
||
ние ЦФ |
|
|
|
|
|
x(:,nh) = x6; |
|
|
else |
% сжатие вершины |
|
|
|
x7 |
= x4 + beta*(x4-xh); |
% |
|
x7 = x4 + beta*(xh-x4); |
|
|
|
plot(x7(1), x7(2), 'cv'); |
|
|
|
F7 |
= F(x7); |
if (F7 < F5), % в новой точке получено меньшее значен ЦФ x(:,nh) = x7;
end end
else % сжатие симплекса
if (x1 ~= xl), x(:,1) = xl + 0.5*(x1 - xl); end if (x2 ~= xl), x(:,2) = xl + 0.5*(x2 - xl); end if (x3 ~= xl), x(:,3) = xl + 0.5*(x3 - xl); end
end
x1 = x(:,1);
x2 = x(:,2);
x3 = x(:,3); end
7