Академический Документы
Профессиональный Документы
Культура Документы
https://goo.gl/znCEkr
Exercício 1
[a]
O problema de otimização não linear com restrição é convertido por um problema sem restrição utilizando-
se da técnica dos multiplicadores de Lagrange. Escrevemos a Lagrangiana do sistema da seguinte forma:
[b]
Derivamos a função Lagrangiana com respeito as variáveis de projeto para obter o sistema de equações:
Como o número de restrições é menor que o número de variáveis de projeto, verificamos a matriz Hessiana
Sendo a matriz Hessiana positiva definida, a solução satisfaz as condições de KKT, desta forma o ponto (1,2)
é o ponto de mínimo.
Exercício 2
[a]
[b]
function T = steepestDescent_ex2b()
% STEEPESTDESCENT2 implements the optimization method steepest descent
%% user inputs
syms x y r
g = x - y + 1;
f = x^2 + y^2 - 6*y;
x0 = [0, 0];
r = 16;
ffun = matlabFunction(f);
gfun = matlabFunction(g);
% stop criteria
EPSILON = 0.001;
MAX_ITER = 1000;
x = x0(1);
y = x0(2);
x_old = x;
y_old = y;
i = 1;
while ( true )
% s
s_x = -g_phi(1);
s_y = -g_phi(2);
end
end
%%
function phi = phifun(fval, gval, r)
if ( -gval >= 0 )
phi = fval + r * (-gval)^2;
else
phi = fval;
end
end
%%
function gphi = grad_phi(x, y, gval, r)
if ( -gval >= 0 )
gphi = [(x.*2.0+r.*(x.*2.0-y.*2.0+2.0)), (y.*2.0-r.*(x.*2.0-y.*2.0+2.0)-6.0)];
else
gphi = [ (x.*2.0) , (y.*2.0-6.0) ];
end
end
O algoritmo interrompe na 47ª iteração pois a variação de fica menor que o erro .
[c]
O código foi modificado de forma a atualizar o valor de (sendo este multiplicado por a cada iteração), os
valores são apresentados na tabela abaixo
Exercício 3
[a]
function T = steepestDescent_ex3()
% STEEPESTDESCENT2 implements the optimization method steepest descent
%% user inputs
syms x y r
g = x - y + 1;
f = x^2 + y^2 - 6*y;
x0 = [0, 0];
r = 1/4;
lambda = 0;
ffun = matlabFunction(f);
gfun = matlabFunction(g);
% stop criteria
EPSILON = 0.001;
MAX_ITER = 1000;
x = x0(1);
y = x0(2);
x_old = x;
y_old = y;
i = 1;
while ( true )
% s
s_x = -g_phi(1);
s_y = -g_phi(2);
% compute the step
alpha_hat = ( (s_x*(lambda - 2*(r*(x-y+1)+x)) + s_y*(-lambda+2*r*(x-y+1)-2*y+6)) / ...
(-4*r*s_x*s_y+2*(r+1)*s_x^2+2*(r+1)*s_y^2) );
% update lambda
lambda = max( (lambda - 2*r* gval_new), 0);
% update r
r = r * 4;
end
end
%%
function phi = phifun(fval, gval, r, lambda)
if ( ((lambda/(2*r))-gval) >= 0 )
phi = fval + r.* ((lambda/(2*r))-gval)^2;
else
phi = fval;
end
end
%%
function gphi = grad_phi(x, y, gval, r, lambda)
if ( ((lambda/(2*r))-gval) >= 0 )
gphi = [x.*2.0+r.*(x.*2.0-y.*2.0-lambda./r+2.0), ...
y.*2.0-r.*(x.*2.0-y.*2.0-lambda./r+2.0)-6.0];
else
gphi = [ (x.*2.0) , (y.*2.0-6.0) ];
end
end
[b]
A tabela abaixo mostra a comparação entre os resultados para os diferentes algoritmos. Nota-se que o
algoritmo Lagrangiano Aumentado apresenta o menor número de iterações além de retornar um ponto
ótimo mais preciso. Nota-se também que nos algoritmos numéricos as restrições permanecem
ligeiramente violadas. Como mostrado no item o ponto ótimo calculado pelos algoritmos pode ser
melhorado se o incremento da variável a cada iteração for baixo (contudo isso eleva o número de
iterações).