Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

i-808190579

.pdf
Скачиваний:
27
Добавлен:
26.03.2016
Размер:
4.39 Mб
Скачать

subplot(1, 2, 2)

%Построение поверхности целевой функции (трехмерный вид) z = zeros(length(x1), length(x2));

for i = 1 : length(x1)

for j = 1 : length(x2)

z(i, j) = Q([x1(i, j) x2(i, j)]);

end

end

surf(x1, x2, z, 'EdgeColor', 'flat'); hold on;

%Построение траектории поиска (трехмерный вид) z = zeros(size(X, 1), 1);

for i = 1 : size(X, 1) z(i) = Q(X(i, :));

end

plot3(X(:, axes(1)), X(:, axes(2)), z, '.-g'); hold off;

function [ ret ] = Q ( x )

%Целевая функция. Задавается пользователем. a0 = 2;

a = [-2.8 -2.0 0.5 1 0.5];

ret = a0 + a(1) * x(1) + a(2) * x(2) + a(3) * x(1) * x(2) + ...

a(4) * x(1)^2 + a(5) * x(2)^2;

end

function [ ret ] = fogr ( x )

%Функциональные ограничения. Задаются пользователем. b = [-1 -1];

b1 = -4;

ret = sum(b .* x) - b1; end

function [ X, Y ] = SimplexSearch ( kp, n, Q, X0, xmin, xmax, fogr )

%Точность поиска (задать) nu = 0.01;

%Число итераций для "вписывания" исходного симплекса в ограничения задачи %(задать)

N1 = 5;

%Расчѐт исходного и конечного ребра симплекса

[L0, LN, rmax] = CalculateEdges(n, xmin, xmax, nu);

%Формирование функции проверки позиционных ограничений (возвращает %количество нарушенных позиционных ограничений)

poz = @(x) CheckPosConstraints(n, xmin, xmax, x);

%Формирование новой целевой функции Q1. Q1(x) = -Q(x), если требуется найти

%минимум Q; иначе Q1(x) = Q(x). if kp == 0

Q1 = @(x) -Q(x);

else

Q1 = Q;

end

141

%Вызов основной процедуры поиска

[X, Y] = SimplexSearchBody(n, Q1, X0, xmin, xmax, poz, fogr, N1, L0, ...

LN, rmax);

%Значения функции Q1 умножаются на -1, если требуется найти минимум Q if kp == 0

Y = -Y;

end end

function [ L0, LN, rmax ] = CalculateEdges ( n, xmin, xmax, nu )

%Процедура расчѐта исходного и конечного ребра симплекса, а также %расстояния между точками xmin и xmax.

d = xmax - xmin; rmin = min(d);

L0 = (rmin / (2 + n)) * sqrt(n * (n + 1) / 2); rmax = sqrt(sum(d .^ 2));

LN = nu * sqrt(2 * n / (n + 1)); end

function [ ret ] = CheckPosConstraints ( n, xmin, xmax, x )

%Функция проверки позиционных ограничений. Возвращает количество нарушенных %позиционных ограничений.

ret = 0;

for i = 1 : n

if x(i) > xmax(i) || x(i) < xmin(i) ret = ret + 1;

end

end end

function [ X, Y ] = SimplexSearchBody ( n, Q, X0, xmin, xmax, poz, ...

fogr, N1, L0, LN, rmax )

%Расчет числа шагов поиска

N = 8 * rmax / L0; N = ceil(N);

%Расчет параметра изменения ребра симплекса mu = 1 / N * (log(L0) - log(LN));

gamma = @(k) exp(-mu * k);

%Выделение памяти для массивов

X = zeros(N * (n + 1), n); Y = zeros(N * (n + 1), 1); x = zeros(n + 1, n);

zz = zeros(1, n);

f = zeros(1, n + 1); m = zeros(1, n + 1);

xnov = zeros(n + 1, n); znov = zeros(1, n);

%Количество проведенных экспериментов в исходном симплексе k = n + 1;

%Начальное значение номера вершины, запрещенной к "возврату" p = n + 2;

%Счетчик записи координат вершин симплекса в массив X для построения %графика

142

w = n + 1;

 

 

 

%Построение

исходного

симплекса

for t = 1 :

N1

 

 

for j =

1 : n +

1

 

for

i = 1 : n

 

 

if i < j - 1

 

eta

=

0;

 

elseif i > j - 1

 

eta

=

-1 / sqrt(2 * i * (i + 1));

 

else

 

 

 

eta

=

sqrt(i / (2 * (i + 1)));

 

end

 

 

 

if poz(X0) > 0 || fogr(X0) > 0

 

X0(i)

= xmin(i) + rand(1) * (xmax(i) - xmin(i));

 

end

 

 

 

x(j, i)

=

X0(i) + eta * L0;

 

X(j, i)

=

x(j, i);

 

zz(i) =

x(j, i);

end

end

end

%Проведение эксперимента в вершинах исходного симплекса for j = 1 : n + 1

f(j) = Q(X(j, :));

if poz(X(j, :)) > 0 || fogr(X(j, :)) > 0 f(j) = -900000 - j;

end

Y(j) = f(j); m(j) = 0;

end

%Начало цикла поиска while k <= N

%Поиск худшей вершины ft = sort(f);

fmin = ft(1);

for j = 1 : n + 1 if f(j) == fmin

s = j; break;

end

end

%Запрет "возврата" вершины, отраженной на предыдущем шаге if s == p

fmin = ft(2);

%Поиск второй худшей вершины for j = 1 : n + 1

if f(j) == fmin s = j; break;

end

end

end

p = s;

143

%Расчет координат новой вершины for i = 1 : n

xnov(s, i) = 2 / n * sum(x(:, i)) - (2 + n) / n * x(s, i); znov(i) = xnov(s, i);

end

%Эксперимент в новой вершине f(s) = Q(znov);

%Проверка ограничений задачи

if poz(znov) > 0 || fogr(znov) > 0 f(s) = -900000 - k;

end

%Увеличение счетчика числа шагов поиска, в которых вершина с номером j %не отражалась

for j = 1 : n + 1 m(j) = m(j) + 1;

end

%Обнуление счетчика в новой вершине m(s) = 0;

k = k + 1; for i = 1 : n

x(s, i) = xnov(s, i);

end

%Уменьшение ребра симплекса относительно новой вершины for j = 1 : n + 1

for i = 1 : n if j ~= s

x(j, i) = xnov(s, i) + (x(j, i) - xnov(s, i)) * ...

gamma(k) / gamma(k - 1);

end

end

end

%Формирование массива для построения графиков for j = 1 : n + 1

for i = 1 : n

X(w + j, i) = x(j, i);

end

end

Y(k) = f(s);

w = w + n + 1; mp = max(m);

%Выявление зацикливания симплекса относительно вершины m(j) > n + 2 if mp < n + 2

continue

end

%Проведение повторного эксперимента в вершине с m(j) > n + 2 for j = 1 : n + 1

if m(j) == mp d = j;

end

144

end

for i = 1 : n

zz(i) = x(d, i);

end

f(d) = Q(zz); k = k + 1; Y(k) = f(d); m(d) = 0;

end

%"Отбрасываем" неиспользованную часть памяти для X и Y

X = X(1:w, :); Y = Y(1:k); end

>> lab8

Конечный симплекс:

Координаты: 1.518551 2.541198

Значение целевой функции: 0.129971

Координаты: 1.483946 2.541198

Значение целевой функции: 0.078994

Координаты: 1.501248 2.496516

Значение целевой функции: 0.047460

145

ЛАБОРАТОРНАЯ РАБОТА № 9

КОМПЛЕКС-МЕТОД

Цель работы – исследование метода прямого поиска экстремума целевой функции.

КРАТКОЕ ТЕОРЕТИЧЕСКОЕ ОПИСАНИЕ

Теоретические сведения приведены в разделе 3.9 [1], а также в [3, 4]. Общая постановка задачи

 

 

 

 

,

(9.1)

 

Q(x) min, max

 

x X

kp 1

 

, j ,...,m .

где X x : x E n , x x x ,i ,...,p, q

j

(x) b

i

i i

 

j

 

Алгоритм комплекс-метода.

Исходные данные для решения задачи (9.1): n-размерность вектора х; kp – константа, определяющая поиск максимума (kp=1) или минимума

(kp=0); x , x позиционные и q(x) b функциональные ограничения (9.1); целевая функция Q(x) , N – число шагов поиска; r,e n – номера координат

для построения графика перемещения координат вершин комплекса при поиске; S x , SQ – среднее квадратическое отклонение координат вершин и целе-

вой функции текущего комплекса; δ – шаг перемещения координат вершин Vr , нарушившей позиционные ограничения.

Порядок выполнения операций следующий:

1) сформировать программно координаты x1 первой вершины V1 ,

удовлетворяющей ограничениям задачи. Положить координаты центра тяже-

сти вершин текущего комплекса x0 x1

и вычислить Q x1 .

Построить «комплекс», удовлетворяющий позиционным и функцио-

нальным ограничениям задачи

 

x

ji

x

p x x , i ,...,n , j 2,...,l ,

 

i

i

i

где p rand (1) – равномерно-распределенное случайное число в интервале

[0,1].

Если на j-ой итерации точка (вершина) «комплекса» не удовлетворяет хотя бы одному функциональному ограничению задачи (позиционные при таком формировании выполняются автоматически), то она смещается на половину расстояния до центра тяжести множества уже принятых точек (вер-

шин) «комплекса»

 

 

xsi x i , s j, p j, x

 

 

 

 

x

si

 

ji

x

si

,i ,...,n ,

 

 

 

 

 

 

 

 

 

 

 

 

146

где xsi – координаты вершины, не удовлетворяющей функциональным ограничениям,

p

x i p j x ji ,i ,...,n ,

где x i – центр тяжести множества уже принятых р вершин «комплекса». Если точка xsi все еще не удовлетворяет функциональному ограниче-

нию, то изложенная процедура «усечения» повторяется до полного выполнения функциональных ограничений задачи;

2) вычисление целевой функции для всех вершин комплекса

Qj Q x j , j ,...,l ;

3) сортировка вершин текущего «комплекса» в порядке возрастания Q j . Выбрать вершину с наибольшим (поиск минимума) Q j , с наименьшим

(поиск максимума) s j , где s – индекс худшей вершины;

4) вычисление координат центра тяжести x текущего «комплекса», за исключением координаты xs

 

 

 

 

 

l

 

 

 

x i

 

x ji ,i ,...,n ;

 

 

 

 

 

 

 

 

l j ,

 

 

 

 

 

j s

5)

отразить худшую

вершину

«комплекса» относительно точки x

(рис.9.1)

 

 

 

 

 

 

 

 

 

xr ( )x xs

где – коэффициент растяжения, рекомендуется брать . ;

 

 

x2

 

 

xr

 

 

 

 

 

 

 

 

 

 

 

 

x0

 

 

 

 

 

xS

 

 

 

 

 

 

 

 

 

x1

 

 

 

 

 

 

 

 

 

 

 

xs

– худшая вершина «комплекса»; x0 – центр тяжести лучших вершин «комплек-

 

 

са»; xr

– новая вершина «комплекса»

Рис. 9.1. Геометрия поиска комплекс-метода

147

6) проверить выполнение позиционных ограничений задачи

 

x x

ri

x ,

i 1,...,n .

 

i

i

 

 

Если нарушена нижняя граница i-ой переменной (рис. 9.2), то

 

h i, xrh xri ,

xri xrh ,

где , рекомендуется , ,

если нарушена верхняя граница i-ой пе-

ременной, то

 

 

 

 

 

 

xrh xri ,

 

xri xrh ;

 

xr

 

 

 

 

x2

 

 

 

 

 

 

 

 

 

xrн

 

 

 

x

 

 

 

 

 

2

 

 

 

x0

 

 

 

 

 

 

xS

 

 

 

 

 

 

x1

x0 – центр тяжести лучших вершин «комплекса»; xr – вершина «комплекса», на-

рушившая ограничение; xrн

– скорректированная вершина «комплекса»; xs – отражаемая

вершина «комплекса»; x – верхнее ограничение по переменной x

 

2

 

 

 

2

Рис. 9.2. Нарушение позиционного ограничения

7) проверка выполнения функциональных ограничений

q j xr bj , j ,...,l .

Если нарушено хоть одно ограничение (рис. 9.3), то точку xr смещают

на половину расстояния между xr

и центром x

xн

xri x0i ,i 1,...,n .

ri

2

 

Затем производится повторная проверка точки xнr на выполнение

функциональных ограничений до тех пор, пока не будут выполнены все ограничения. После этого

xri xriн ,i 1,...,n ;

148

 

x2

xr

 

 

 

xн

 

 

r

q(x) b

 

 

 

x0

 

 

 

x1

x0

– центр тяжести лучших вершин «комплекса»;

xr – вершина «комплекса», на-

рушившая ограничение; xrн – скорректированная вершина «комплекса»;

 

q(x) b – функция ограничения

 

Рис. 9.3. Нарушение функционального ограничения

8)

вычисление целевой функции в новой точке

 

 

 

Qr Q xr ;

9)

если Qr Qs , то шаг признать неудачным, и точку xr следует сме-

стить к центру x на половину расстояния между ними

 

xн

 

xri x i

,i ,...,n

 

 

 

ri

 

 

 

 

 

идалее перейти к п.6), пока не будет получена допустимая точка;

10)если Qr Qs , то шаг признается удачным

xsi xri , ,...,n, Qs Qr ;

11) проверить условие останова. Для этого вычислим оценку среднего квадратического отклонения целевой функции для текущего «комплекса»

 

 

 

 

 

 

 

 

 

 

 

 

l

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SQ

 

 

 

 

 

 

Q j

Q ,

 

 

 

 

 

 

 

l

 

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

l

 

 

 

 

 

 

 

 

 

 

 

 

 

где Q

 

 

 

 

 

 

 

 

 

 

 

 

 

l

Q j , и среднее квадратичное отклонение координат вершин теку-

 

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

щего «комплекса»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sx

 

n

 

 

 

 

 

 

 

 

 

 

 

 

Sxi ,

 

 

 

 

 

 

 

 

 

 

 

 

n i

 

 

 

 

 

 

 

 

 

 

 

l

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sxi

 

 

x ji xi

, i 1,...,n ,

 

 

 

 

 

 

 

 

 

 

 

l j

 

 

 

 

 

 

 

 

149

где xi 1 l x ji , i 1,...,n . l j 1

Если SQ ε1 и Sx ε2 , то останов процедуры, иначе переход к п.3). Здесь и – достаточно малые константы, определяющие точность решения задачи.

Координаты экстремума x* определяем по минимальному (максимальному) значению целевой функции в вершинах последнего комплекса Q x* .

Для невыпуклых функций и многоэкстремальных функций рекомендуется повторить процедуру поиска несколько раз. Так как точки «комплекса» формируются случайно, то имеется вероятность поиска глобального экстремума.

ЗАДАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1.Изучите листинг программы и сопоставьте его с описанием алго-

ритма.

2.В соответствии с вариантом выберите условия задачи из лабораторной работы № 8 и внесите соответствующие изменения в программе и проце-

дурах комплекс-метода: n= , векторы xmin= , xmax= размерности n 1, признак поиска максимума (kp=1), минимума (kp=0), function q_ogr и function x_nov (здесь будьте внимательны со знаком неравенства или ).

3.Проведите оптимизацию без функционального ограничения. Для этого выберите такое b1 в function q_ogr, чтобы q(x) X .

4.Повторите п. 3 для α 1.0 и α 1.5, внеся необходимые изменения

впрограмме.

5.Повторите п. 3 с функциональными ограничениями для α 1.3.

6.Решите задачу для противоположного kp.

Выводы по работе должны включать:

 

1)

сравнительную

характеристику

эффективности

поиска

Q*

Q*

 

Q*

2

при разных α (в форме таблицы) и объяснение влияния ко-

 

1

 

 

 

 

 

эффициента растяжения на скорость поиска (k=

);

 

 

2)

объяснение траектории движения комплекса в условиях ограниче-

ний;

 

 

 

 

 

 

 

 

3) сравнительный анализ с результатами лабораторных работ 7 и 8.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что представляет собой комплекс для n 1 и n 3 ?

150

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]