Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Пример минимизации с ограничениями в форме нелинейных неравенств





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

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

,

то перепишем их соответствующим образом:

1. Составление m-файла (с именем confun.m), возвращающего значения левых частей ограничивающих неравенств:

function [c, ceq] = confun(x)

% Нелинейные ограничения в форме неравенств
c = [1.5 + x(1)*x(2) - x(1) - x(2);

-x(1)*x(2) - 10];

% Нелинейные ограничения в форме равенств
ceq = [];

2. Составление программы минимизации:

x0=[-1,1];
% Задание начальных значений
options = optimset ('LargeScale','off');
% Задание опций
% Поиск решения
[x, fval]=fmincon('objfun',x0,[],[],[],[],[],[],'confun',options)

После 38 итераций результаты вычислений в точке х сообщают о найденном решении, количестве ограничений и т. п.:

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in

feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance.

<stopping criteria details>

x = -9.547345885996496 1.047408305345705

fval = 0.023551460138753

Можно произвести оценку ограничений для данных расчетов [c,ceq] = confun(x).Отметим, что оба ограничения являются меньшими или равными нулю:

Пример минимизации с граничными условиями

Рассмотрим задачу минимизации функции одной переменной на заданном интервале

,

fminbnd(inline('sin(x*x)'),0,2*pi)

fplot(inline('sin(x*x)'), [0 2*pi])

 

ans =

 

2.170816350055495

Рис. 6.


Пример минимакса

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

Рассмотрим задачу минимизации максимальных значений функций в заданных ограничениях.

,

где x, b, beq, lb, и ub - вектора, A и Aeq - матрицы, c(x), ceq(x), и F(x) – функции с результирующим значением в виде вектора. F(x), c(x), и ceq(x) могут быть нелинейными функциями.

 

Задача: найти x1, x2 при которых максимальное значение минимально.

 

М-файл:

function f = myfun(x)

f(1)= 2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304;

f(2)= -x(1)^2 - 3*x(2)^2;

f(3)= x(1) + 3*x(2) -18;

f(4)= -x(1)- x(2);

f(5)= x(1) + x(2) - 8;

 

x0 = [0.1; 0.1];

[x,fval] = fminimax(@myfun,x0)

 

Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than twice the default value of the step size tolerance and constraints are satisfied to within the default value of the constraint tolerance.

<stopping criteria details>

 

x =

3.999999886593829

4.000000113404526

 

fval =

 

0.000000000052694

-64.000001814459310

-1.999999773192592

-7.999999999998355

-0.000000000001645

 

Графическая иллюстрация результата оптимизации

 

figure;

[X1,X2] = meshgrid(-5:0.5:5,-5:0.5:5);

Z=2*X1.^2+X2.^2-48*X1-40*X2+304;

subplot(2, 2, 1); surf(X1,X2,Z);

hold on;

plot3(linspace(4, 4), linspace(4, 4), linspace(-100, 100), 'ro');

hold off;

 

[X1,X2] = meshgrid(-5:0.5:5,-5:0.5:5);

Z=-X2.^2-3*X2.^2;

subplot(2, 2, 2); surf(X1,X2,Z);

hold on;

plot3(linspace(4, 4), linspace(4, 4), linspace(-100, 100), 'ro');

hold off;

 

[X1,X2] = meshgrid(-5:0.5:5,-5:0.5:5);

Z=X1+3*X2-18;

subplot(2, 2, 3); surf(X1,X2,Z);

hold on;

plot3(linspace(4, 4), linspace(4, 4), linspace(-100, 100), 'ro');

hold off;

 

[X1,X2] = meshgrid(-5:0.5:5,-5:0.5:5);

Z=-X1-X2;

subplot(2, 2, 4); surf(X1,X2,Z);

hold on;

plot3(linspace(4, 4), linspace(4, 4), linspace(-100, 100), 'ro');

hold off;

 

figure;

[X1,X2] = meshgrid(-5:0.5:5,-5:0.5:5);

Z=X1+X2-8;

surf(X1,X2,Z);

hold on;

plot3(linspace(4, 4), linspace(4, 4), linspace(-100, 100), 'ro');

hold off;

 

 


Поиск глобального оптимума

 

Методы численной оптимизации прекращают итерации при выполнении некоторого условия, гарантирующего, что решений, лучших, чем последняя рабочая точка не существует. Но эти гарантии распространяются только на ближайшую окрестность лучшей точки, потому что используются локальные признаки отсутствия возможных направлений улучшения целевой функции. Если целевая функция и ограничения не выпуклы, нельзя исключить, что локальные условия оптимальности выполняются и в других точках допустимой области, а найденное решение – не лучший из локальных экстремумов. Формальных признаков глобального экстремума (лучшего среди локальных) не существует, что создает проблему определения стратегии его поиска. Можно найти методами выпуклой оптимизации несколько локальных экстремумов в разных частях допустимой области и выбрать лучший из них. Другая стратегия – вычисление целевой функции в пробных точках, распределенных по всей области, и последующий локальный поиск из наилучшей точки. В последнее время развиваются стратегии, моделирующие бионическую мотивацию выживания в отборе точек, претендующих на глобальный экстремум.

 

Методы случайного поиска отличаются от детерминированных итерационных методов тем, что вместо определенного правила выбора направления рабочего шага исследуют некоторую часть области поиска, распределяя в ней пробные точки случайным образом. Простые методы случайного поиска разыгрывают n 1 пробных точек на гиперсфере малого радиуса r 1 (пробный шаг) вокруг текущей точки (рис. 5). В каждой точке на сфере и в центре вычисляются значения целевой функции, затем, если лучшая точка находится на сфере, а не в центре, из центральной точки через нее выполняется рабочий шаг длиной r 2 >> r 1. В новой точке процедура повторяется. Если наилучшей остается центральная точка, она проверяется на локальный экстремум.

Рис. 5. Траектория случайного поиска

 

Чтобы найти другие локальные экстремумы и выбрать из них глобальный, надо повторить всю процедуру из какой-либо точки, не принадлежащей окрестности найденного локального решения. Для этого выполняют очень большой шаг длиной r 3 >> r 2. Локальный экстремум находится с некоторой вероятностью, тем большей, чем больше число пробных точек. За приемлемую вероятность отыскания оптимума приходится платить слишком большим числом пробных точек. В оптимальном проектировании функционально сложных изделий полный расчет комплексного критерия оптимальности (целевой функции и всех функций-ограничений) одного пробного варианта может занять существенное время. Чтобы реализовать достаточное количество пробных вариантов за разумное время, приходится сокращать трудоемкость прикладных программ путем упрощения моделей, укрупнения шагов и т.п., что снижает ценность результата оптимизации до отрицательной (вредной): искаженный «оптимум» дезориентирует постановщика задачи.

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

 

function f=Min4(X,Y)

if nargin<2 Y=X(2,:); X=X(1,:); end

f = f_Norm2(X-1.5,Y-2,-0.7) + f_Norm2(X*0.9+1.5,Y+1,0.7);

f = f + f_Norm2(X+2,Y-2,-0.5) + f_Norm2(X-2,Y+2);

f = 0.25-f;

%Плотность стандартного 2-мерного нормального распределения

function f_n2= f_Norm2(x1,x2,r)

if nargin<3 r=0;end

if abs(r)<0.01

f_n2=exp(-(x1.^2+x2.^2)./2)/(pi*2);

else

a=1-r^2;

t=(x1.^2-2*r*x1.*x2+x2.^2)./(2*a);

f_n2=exp(-t)/(sqrt(a)*pi*2);

end

 

Вычислив с помощью файл-функции аппликаты функции F = Min4(x, y) на расчетной сетке (X,Y), построим поверхность и ее линии уровня:

 

[X Y]=meshgrid([-3:0.1:3],[-3:0.1:3]); F=Min4(X,Y); surfc(X,Y,F), hold on, min(min(F));

ans = 0.025612905653507

 

Рис. 6. Многократная локальная оптимизация методом случайного поиска

 

Минимум сеточной функции составляет 0.0256. Файл-функция Accidental_Search, реализует простейший алгоритм случайного поиска из заданной исходной точки. В окрестности рабочей точки она вычисляет целевую функцию в 20-и случайных точках, и еще столько же точек генерирует, если ни одна пробная точка не улучшает целевую функцию. Эта программа возвращает минимальное значение целевой функции, последовательность рабочих точек и общее количество обращений к вычислению целевой функции на траектории поиска.

 

function [z,T,M]=Accidental_Search(N,T)

if nargin<2 T=[0;0]; end

r1=0.3; n1=20;r2=0.9;M=0;

for i=1:N

Z=GenPoints(n1*2,r1)+repmat(T(:,end),1,n1*2);

F=Min4(Z(:,1:n1));M=M+n1;

z0=Min4(T(:,end));

[z,I]=min(F);

if z0<z

F=Min4(Z(:,n1+1:n1*2));M=M+n1;

[z,I]=min(F);I=I+n1;

if z0<z break, end

end

T(:,end+1)=T(:,end)+(Z(:,I)-T(:,end))*r2;

end

%

function f=GenPoints(n,r)

[X,I] = sort(rand(1,n)*2*pi);

f=[r*sin(X);r*cos(X)];

 

Следующие команды строят траектории поиска из исходных точек [0; 0], [1;-1], [-1; 1] и [1; 1]:

 

[f,T,M]=Accidental_Search(50,[0;0]);M, f, T(:,end)', plot(T(1,:),T(2,:),'k.')

[f,T,M]=Accidental_Search(50,[1;-1]); M, f, T(:,end)', plot(T(1,:),T(2,:),'r.')

[f,T,M]=Accidental_Search(80,[-1;1]);M, f, T(:,end)', plot(T(1,:),T(2,:),'m.')

[f,T,M]=Accidental_Search(80,[1;1]);M, f, T(:,end)', plot(T(1,:),T(2,:),'b.')

 

M = 380 f = 0.0306 ans = -1.6210 -0.9722

M = 140 f = 0.0945 ans = 1.9792 -1.9168

M = 280 f = 0.0722 ans = -2.0513 2.0355

M = 120 f = 0.0281 ans = 1.5557 1.8932

 

На рис. 6 видно, что все траектории поиска успешно заканчиваются в центре самых внутренних линий уровня. Глобальный минимум почти совпадает с минимумом сеточной функции 0.0281» 0.0256, но потребовалось две тысячи вычислений целевой функции, чтобы в этом убедиться. Если бы перебор исходных точек выполнялся случайным образом, число обращений к целевой функции было бы существенно больше.


Генетические алгоритмы

 

Генетические алгоритмы – это адаптивные методы поиска, которые в последнее время часто используются для решения задач функциональной и структурной оптимизации. Попытаемся разобраться в технологии генетических алгоритмов применительно к сложным задачам параметрической оптимизации. С этой целью рассмотрим задачу оптимального распределения ресурсов на примере оптимального проектирование боевой части (БЧ) ракеты. Оптимальное проектирование БЧ может осуществляться в два этапа: сначала оптимизируется поле поражающих элементов (ПЭ) по критерию эффективности действия, а на втором этапе создается конструкция, реализующая оптимальное распределение ПЭ по различным участкам поля. Важно, чтобы на этапе оптимизации поля учитывались существенные ограничения. В самом простом виде задачу оптимального распределения известного количества ПЭ можно записать как максимизацию полной вероятности поражения. Для этого, разделив область поля на n зон, определив вероятность pi поражения цели одним попавшим ПЭ в i -й зоне, выразим условную вероятность поражения цели при попадании в нее xi ПЭ в i -й зоне:

, где qi = 1 – pi.

Вероятности Ri нахождения цели в i -й зоне при накрытии ее полем также зависят от условий встречи. В результате находим оптимальное распределение данного количества ПЭ:

Это дискретная задача оптимизации, альтернативами которой являются последовательности целых чисел(x 1, x 2, … xn), xi Î [0, n ], ∑ xi = N. Количество таких альтернатив (по схеме выборки с возвратом) составляет nN. Если n имеет порядок 10, а N – тысячи, полный перебор вариантов немыслим. Необходимо найти эффективный метод выбора оптимальной альтернативы.

 

Воспользуемся универсальным механизмом эволюции природы и настроим его на решение данной задачи. Целенаправленный поиск решения начинается с задания нулевого вектора решения и развивается путем приращения этого вектора в соответствии с принципом оптимальности на каждом шаге.

 

Для эволюционного алгоритма сформируем несколько вариантов вектора решения (популяцию), каждый вектор будем рассматривать не только как математический объект, а как структурированную информационную единицу – хромосому, состоящую из генов (компонент вектора). Чтобы популяция могла эволюционировать, особи (хромосомы) должны иметь возможность порождать потомков, обмениваясь генами. Чтобы популяция совершенствовалась в ходе эволюции и в результате мы получили оптимальное решение, необходима конкуренция за возможность породить потомков, в которой побеждают самые приспособленные особи.

 

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

 

Общей закономерностью различных механизмов эволюции является вытеснение из популяции наименее приспособленных экземпляров.

 

Механизмы рекомбинации могут быть реализованы разными способами, общим для них является наследование генов m родителей (m = 1, 2, 3, …), то есть новая хромосома так или иначе представляет популяцию. На рис. 7 показан возможный вид оператора рекомбинации (2 родителя, 2 потомка), так называемый одноточечный кроссовер: хромосомы родителей разрываются на границе двух соседних генов, а затем происходит обмен частями хромосом родителей и «склеивание» их в новые хромосомы.

Рис. 7. Возможная схема рекомбинации хромосом

 

Генетические алгоритмы не могут составить конкуренцию методам оптимального распределения ресурсов, они не могут быть столь же эффективными, потому что не используют выявленных специальных свойств задачи. Но в этом и заключается их преимущество в тех случаях, когда таких особых свойств выявить не удается.

Сформируем популяцию из L хромосом одинаковой длины M, равной числу зон поля ПЭ. Целочисленными генами хромосом являются количества ПЭ, распределяемых в i -ю зону, (считая позиции гена в хромосоме перенумерованными так же, как и зоны поля ПЭ). Популяция – массив ячеек Pop, хромосомы – элементы этого массива, их гены вначале имеют случайное значение в интервале [0, 50]:

L=30; N=50; M=4; for i=1:L Pop{i} = fix(rand(1,M)*N); end

Pop{1}

ans = 47 11 30 24

Оптимальное распределение элементов по зонам будем искать как лучшего представителя популяции в результате ее эволюции, для чего нужно ввести функцию приспособленности хромосом. Имея в виду решение целого спектра задач с различными целевыми функциями и ограничениями, функцию приспособленности определим в общем виде как разность функции цели Goal и штрафа Penalty, конкретный вид которых можно назначать по содержанию задачи. Например, для нашей задачи их нужно определить следующим образом:

Goal = 'sum(R.*(1-q.^Pop{j}))'; Penalty = 'max([0,sum(Pop{j})/N-1])*0.35';

После ввода исходных данных, приспособленность первой особи популяции можно вычислить так:

R=[0.2 0.3 0.4 0.1]; p=[0.04 0.05 0.03 0.05]; q=1-p;

j=1; F=eval(Goal)-eval(Penalty)

F = 0.1764

Чтобы осуществить механизм эволюции, назначим его основные параметры. Порог стабильности – число потомков, передаваемых в следующее поколение, установим на уровне 0,2 от объема популяции. Постоянную точку разрыва хромосомы при скрещивании установим в середине гена D=M/2+1. Зададим вероятность мутации 0,6 и максимальное число поколений 60:

Elit=fix(L*0.2); D=M/2+1; Pmut=0.6; Ngen=80;

 

Следующий скрипт-файл осуществляет эволюцию заданного числа поколений популяции:

%GeneticA

Npop = length(Pop);

for k=1:Ngen

for j=1:Npop G(j)=eval(Goal)-eval(Penalty);end

[Y,I] = sort(G); I=I(Npop:-1:1);

PopOld = Pop; Pop={};

[Par, n] = SelPair(I,Elit);

for j=1:n

Pop{j}=CrossOver(PopOld, 3, Par(j,:));

g(j)=eval(Goal)-eval(Penalty);

end

[y,i] = sort(g);

PP=find(G(I)<g(i)); if isempty(PP) continue, end

j= PP(1);

PP=[PopOld(I(1:j)), Pop(i(j+1:Npop))];

for ii = 1:Npop if rand>Pmut PP{ii}=Mutation(PP{ii}); end; end

Pop = PP;

end

for j=1:Npop G(j)=eval(Goal);end % оценка последнего поколения

[y,i] = min(G); [Y,j] = max(G); % элементы с min и max оценками

 

Случайный выбор пар предков выполняется функцией SelPair, которая сначала сортирует по возрастанию элементы случайной матрицы с нулевой диагональю, а затем составляет пары индексов элементов согласно их порядку:

function [out, k]=SelPair_(N,Elit)

n=length(N); if nargin>1 n=Elit; end

k=n*(n-1); out=zeros(n,2);

A=rand(n); A=A-diag(diag(A)-1);

[V, I] = sort(A(:));

for i=1:k

T=fix((I(i)-1)/n);

out(i,:)=[N(I(i)-T*n),N(T+1)];

end

 

Мутацию – случайное изменение генов хромосомы – можно осуществить суммированием хромосомы с вектором такой же длины, элементами которого являются случайные комбинации чисел 1 и –1:

function X = Mutation(X)

Rnd=ones(size(X));

Rnd(rand(size(X))>0.5)=-1;

X=X+Rnd;

X(X<0)=0;

 

Такая схема мутации вполне подходит для случайных изменений распределения элементов по зонам (последним оператором предусмотрено, что число элементов в зоне не сможет стать отрицательным).

 

Механизмы рекомбинации определяются функцией CrossOver:

 

function [N1, N2] = CrossOver(X,D,Prnt)

N1 = X{Prnt(1)};N2 = X{Prnt(2)};

Rnd=rand(size(N1));Ind1=find(Rnd<0.5);Ind2=find(Rnd>0.5);

N1(Ind1) = X{Prnt(2)}(Ind1);

N2(Ind1) = X{Prnt(1)}(Ind1);

 

Все исходные данные для задачи введены, рабочие структуры созданы, необходимые процедуры для реализации генетического алгоритма разработаны. Выполним программу GeneticA и выведем основные результаты:

GeneticA, x=Pop{j}, W=sum(R.*(1-q.^x))

x = 8 21 24 0 W = 0.4610

 

Результатом выполнения алгоритма будет оптимальное распределение ПЭ по n зонам и полная вероятность поражения W.







ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.