Vous êtes sur la page 1sur 9

Para baixar o código acesse: https://goo.

gl/znCEkr

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
% <diego.vda@usp.br>

% 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.

Vous aimerez peut-être aussi