Escola Politécnica da Universidade de São Paulo
Diego Varalda de Almeida, 10580379
Resolução da 4a lista de exercícios
PMR5215 - Otimização aplicada ao projeto
de sistemas mecânicos
Orientadores: Prof. Dr. Emílio Carlos Nelli
Silva ; Prof. Dr. Thiago Martins
Universidade de São Paulo
Programa de Pós-graduação
São Paulo
2018
Exercício 1
No item [a] o ponto de máximo para o problema é o ponto , conforme mostrado na
figura seguinte
Já para o item [b], como a restição é paralela às curvas de nível, o problema apresenta múltiplas
soluções, a figura abaixo mostra alguns dos pontos ótimos.
Para o terceiro problema, nota-se que quando todas as restrições dadas são impostas, não existe domínio
viável, uma vez não existe nenhum ponto que satisfaça todas as restrições simultaneamente.
function exe1()
%EXE1 Solution to exercise 1 (list 4)
% Author(s): Diego Varalda de Almeida
% Copyright (c) 2018, Diego ALMEIDA
% <
[email protected]>
% 08-Apr-2018 First version of EXE1.
close all
clc
syms x y
% optmization problems
f{1} = x+y; %max
g{1} = [3*x+y<=5; 2*x+4*y<=6; x+y>=1; x>=0; y>=0];
f{2} = x+y; %min
g{2} = [3*x+y<=5; 2*x+4*y<=6; x+y>=1; x>=0; y>=0];
f{3} = x+y; %max
g{3} = [3*x+y>=5; 2*x+4*y>=6; x+y<=1; x>=0; y>=0];
fvars = [x, y];
for i = 3 : 3 %length(f)
plot_handle = figure;
plotGradient(f{i}, g{i}, fvars, plot_handle);
plotConstraints(f{i}, g{i}, fvars, plot_handle);
% plotOptimSol([1, 0; 0 1; 0.5 0.5]);
end
end
%%
function plotGradient(f, g, fvars, fhandle)
ffun = matlabFunction(f);
% gradient
grad = matlabFunction(transpose(gradient(f, fvars)), 'Outputs',{'G1', 'G2'});
[X_1, X_2] = meshgrid(-10 : 2 : 10);
Z = ffun(X_1, X_2);
try
G = grad(X_1, X_2); %matrix with the gradient values
catch
[G1, G2] = gradient(Z, 0.5, 0.5); %numerical gradient
G = [G1, G2];
end
set(fhandle,'color','white');
% -> plot vector field
quiver(X_1, X_2, G(:, 1:size(G, 2)/2), G(:,size(G, 2)/2 + 1:size(G, 2)));
xlabel(strcat('$', char(fvars(1)), '$'), 'Interpreter','latex', 'FontSize',17);
ylabel(strcat('$', char(fvars(2)), '$'), 'Interpreter','latex', 'FontSize',17);
title('Gradient and Constraint Plot');
hold on
% -> Plot contour
% contour(X_1, X_2, Z, 'ShowText', 'on');
pbaspect([1 1 1]);
end
%%
function plotConstraints(f, g, fvars, fhandle)
% Plotting Contraints
%make a finer grid for contraints
[X_1, X_2] = meshgrid(-10 : 0.7 : 10);
st = '';
for i = 1: size(g)
gfun = matlabFunction(g(i));
try
G{i} = logical(gfun(X_1, X_2));
catch
G{i} = logical(subs(g(i), fvars, {X_1, X_2}));
end
st = strcat(st, 'G{', num2str(i), '}', '&');
end
st = st(1,1:end-1);
% intersection of the constraints expressions
feasible_domain = double(eval(st));
% remove points where the constraints don't intersect
for i = 1:size(X_1, 1)
for j = 1:size(X_1, 2)
if feasible_domain(i, j) ~= 1
X_1(i, j) = nan;
X_2(i, j) = nan;
end
end
end
% plot contraints
scatter(X_1(:),X_2(:),10,feasible_domain(:),'filled');
end
%%
function plotOptimSol(point)
scatter(point(:, 1), point(:, 2), 30, 'r', 'filled');
end
Exercício 2
2.1
[a]
Seja o número de caçarolas e o número de frigideiras a ser produzidos, a função de faturamento é dada
por
[b]
A produção total dos produtos não pode ultrapassar o estoque de matéria-prima, além disso não se pode
ter uma quantidade negativa de produtos, desta forma as restrições do problema são:
[c]
[d]
Este problema de otimização em questão trata-se de um problema linear. Foi resolvido geometricamente e
usando a função fmincon do matlab, para isso o problema foi reescrito para ficar no formato necessário
do Matlab, como mostrado
O seguinte script em Matlab calcula a solução do problema
fun = @(x) -(50*x(1)+70*x(2));
A = [0.05, 0.2;
1, 0.8;
-1, 0;
0, -1];
B = [10000; 100000; 0; 0];
X0 = [7.4, 3.1].*10^4;
X = fmincon(fun,X0,A,B)
Em que o seguinte ponto é encontrado
O que pode ser confirmado visualmente no gráfico a seguir
2.2
[a]
[b]
[c]
[d]
O código abaixo em Matlab calcula o ponto ótimo para o problema do item c
fun = @(x) (1e4*x(1)+1e5*x(2));
A = [-0.05, -1;
-0.2, -0.8];
B = [-50; -70];
X0 = [7.4, 3.1].*10^4;
X = fmincon(fun,X0,A,B)
A solução do problema é
Os problemas são duais uma vez que as funções e apresentam o mesmo valor no ponto de
ótimo.