Найти значения x, которые минимизируют
f (x) = (x1-0,2) 2 + (x2- 0,2) 2 + (x3- 0,2) 2,
где
w2 − 50) 2 − sin (w2x3) −x3≤1.5,
для всех значений w1 и w2 в диапазонах
1 ≤ w1 ≤ 100,
1 ≤ w2 ≤ 100,
начиная с точки x = [0.25.0.25.0.25].
Обратите внимание, что полусредняя зависимость является двумерной, то есть матрицей.
Сначала напишите файл, в котором вычисляется целевая функция.
function f = myfun(x,s) % Objective function f = sum((x-0.2).^2);
Во-вторых, запишите файл для ограничений, называемый mycon.m. Включить код, чтобы каждый раз рисовать график поверхности полубесконечной зависимости mycon вызывается. Это позволяет увидеть, как изменяется ограничение X минимизируется.
function [c,ceq,K1,s] = mycon(X,s)
% Initial sampling interval
if isnan(s(1,1)),
s = [2 2];
end
% Sampling set
w1x = 1:s(1,1):100;
w1y = 1:s(1,2):100;
[wx,wy] = meshgrid(w1x,w1y);
% Semi-infinite constraint
K1 = sin(wx*X(1)).*cos(wx*X(2))-1/1000*(wx-50).^2 -...
sin(wx*X(3))-X(3)+sin(wy*X(2)).*cos(wx*X(1))-...
1/1000*(wy-50).^2-sin(wy*X(3))-X(3)-1.5;
% No finite nonlinear constraints
c = []; ceq=[];
% Mesh plot
m = surf(wx,wy,K1,'edgecolor','none','facecolor','interp');
camlight headlight
title('Semi-infinite constraint')
drawnowЗатем вызовите подпрограмму оптимизации.
x0 = [0.25, 0.25, 0.25]; % Starting guess [x,fval] = fseminf(@myfun,x0,1,@mycon)
После девяти итераций решение будет
x
x =
0.2523 0.1715 0.1938и значение функции в решении
fval
fval =
0.0036Цель состояла в том, чтобы свести к минимуму цель f (x) таким образом, чтобы полулегкое ограничение удовлетворяло K1 (x, w ) ≤ 1.5. Оценкаmycon на решении x и просмотр максимального элемента матрицы K1 показывает, что ограничение легко выполняется.
[c,ceq,K1] = mycon(x,[0.5,0.5]); % Sampling interval 0.5 max(max(K1)) ans = -0.0370
Этот вызов для mycon создает следующий график перехода, который показывает полунейминитетное ограничение в x.
