Optimização Numérica Modelação de problemas 1ª aula teórico-prática 11/Setembro/2006
Introdução Problema de Programação Matemática É um problema de optimização escrito da seguinte forma Função objectivo Restrições sujeito a:g 1 (x 1,…,x n ) == b1b1 …… g m (x 1,…,x n )bmbm Optimizar:z = f(x1, …,xn) Problema sem restrições
Tipos de problemas Problemas de Programação Linear Função objectivo linear; restrições lineares; variáveis reais Problemas de Programação Quadrática Função objectivo quadrática; restrições lineares; variáveis reais Problemas de Programação Não Linear Função objectivo não linear; restrições lineares ou não lineares; variáveis reais Problemas de Programação Inteira Variáveis inteiras
Problema Programação Linear Variáveis v: Kg de carne de vaca utilizados p: Kg de carne de porco utilizados Pedido confeccionar 10 Kg de carne picada, com no máximo 25% de gordura, ao menor preço. Função objectivo Min z = 8v + 6p Restrições 0.2v + 0.3p 2.49 v + p = 10 % gordura Preço Kg Vaca208 Porco306 min z s.a. 0.2v + 0.3p 2.49 v + p = 10 v, p 0
Problema Programação Linear v p v+p = v+0.3p 2.49 v 0 p 0
Problema Programação Linear v p Região admissível (segmento de recta) z Solução óptima v = 5.1; p = 4.9
Problema Programação Linear Algoritmo Simplex (utilizando o MatLab) >> options = optimset('LargeScale', 'off', 'Simplex', 'on'); >> f = [8; 6]; lb = zeros(2,1); >> A = [ ]; b = [2.49]; >> Aeq = [1 1]; beq = [10]; >> [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,[],[],options) Optimization terminated. x = fval = exitflag = 1 output = iterations: 1 algorithm: 'medium scale: simplex' cgiterations: [] message: 'Optimization terminated.' lambda = ineqlin: eqlin: upper: [2x1 double] lower: [2x1 double] Solução: v = 5.1; p = 4.9; z = 70.2
Problema Programação Inteira Admita-se agora que a carne é vendida em embrulhos de 1Kg (não divisíveis) Solução óptima do problema anterior x = [ ] T [5 5] T x = [5 5] T não é solução óptima do problema de programação inteira pois não é admissível A solução óptima deste problema é x = [6 4] T min z s.a. 0.2v + 0.3p 2.49 v + p = 10 v, p 0 v, p inteiros
Problema Programação Inteira De uma forma geral z Solução óptimo do problema contínuo Solução óptimo do problema inteiro
Problema Programação Quadrática Variáveis d: Kg de queijo DeLux s: Kg de queijo Standard P d : preço por Kg DeLux P s : preço por Kg Standard Relação procura (D) / preço (P) D d = P d ; D s = 250 – 50P s Pedido Determinar a quantidade de queijo a produzir de cada tipo e o respectivo preço, de forma a que todo o queijo seja vendido maxime a receita Quejo FrutasEspecialNormal DeLux20%80%0% Standard20%30%50% quatidade20Kg60KgMuito
Problema Programação Quadrática Função objectivo Max Z = d*P d + s *P s Restrições 0.2d + 0.2s d + 0.3s 60 d P d s P s d, s 0 ==== Pode ser reescrito com 2 variáveis max z = d*( *d)+ s*( *s) sujeito a: 0.2 d s d s 60 d, s 0 z d=55; s=45
Problema Programação Quadrática Resolução com o MatLab (max z - min -z) >> H = [ ; ; ; ]; f = [0; 0; 0; 0]; >> A = [ ; ; ; ]; b = [190; 250; 20; 60]; >> lb = zeros(3,1); x0 = [1; 1; 1; 1]; >> [x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb,[],x0) output = iterations: 4 algorithm: 'medium-scale: active-set' firstorderopt: [] cgiterations: [] message: 'Optimization terminated.' lambda = lower: [4x1 double] upper: [4x1 double] eqlin: [0x1 double] ineqlin: [4x1 double] Warning: Large-scale method does not currently solve this problem formulation, switching to medium-scale method. > In quadprog at 242 Optimization terminated. x = fval = exitflag = 1
Problema Programação Não Linear Problema dos mínimos quadrados Dados os pontos (x i, y i ), 1 i n, e uma família de funções y = f (x), |R p, pretende-se minimizar { n i=1 (y i – f (x i )) 2, |R p } Exemplo (recta dos mínimos quadrados): f (x) = 1 + 2 x
Problema Programação Não Linear Minimizar a soma as distâncias dos pontos à recta aproximadora A equação normal de uma recta é c + a x + b y = 0, onde (a, b) 0 é um vector perpendicular à recta Podemos supor, sem perda de generalidade que ||(a, b)|| 2 = a 2 + b 2 = 1 A distância de (x i, y i ) a recta é r i = c + a x i + b y i Pretende-se então min z = n i=1 (r i ) 2, sujeito a: r i = c + a x i + b y i, 1 i n a 2 + b 2 = 1
Problema Programação Não Linear
Problema do trajecto mais curto