Otimização/Aplicações dos métodos duais

De testwiki
Ir para a navegação Ir para a procura

Aplicação à programação linear

Considere um problema típico da programação linear como:

{min⁡a⊤x+b⊤yMx+Ny≥cPx+Qy=dx≥0;y∈ℝn

onde são dados a∈ℝn, b∈ℝm, Mp×n, Np×m, Pq×n, Qq×m, d∈ℝp e c∈ℝq. Por simplicidade, pode-se ainda adotar a seguinte notação:

C={[xy];Mx+Ny≥c,Px+Qy=d,x≥0 e y∈ℝn}

Nesta seção será mostrado como a "bonita teoria dos métodos duais" se aplica a esse tipo de problema.

Primeiramente, calcula-se a lagrangiana:

l(x,y,u,v,w)=[a⊤x+b⊤y]+u⊤[c−Mx−Ny]+v⊤[d−Px−Qy]+w⊤[−x]=[a−M⊤u−P⊤v−w]⊤x+[b−N⊤u−Q⊤v]⊤y+[c⊤u+d⊤v]

Note que:

  • As variáveis primais são x e y;
  • As variáveis duais são u, v e w;

Agora é preciso identificar as funções α e β correspondentes a este problema. Conforme anteriormente, tem-se:

α:ℝn↦ℝ∪{+∞}, dada por
α(x)=supu≥0v∈ℝqw≥0l(x,y,u,v,w)={a⊤x+b⊤y, se [xy]∈C+∞, em outros casos

e

β:ℝp×ℝq↦ℝ∪{−∞}, dada por
β(u,v)=infx∈ℝny∈ℝml(x,y,u,v,w)=infx∈ℝny∈ℝm[a−M⊤u−P⊤v−w]⊤x+[b−N⊤u−Q⊤v]⊤y+[c⊤u+d⊤v]=[c⊤u+d⊤v]+infx∈ℝn[a−M⊤u−P⊤v−w]⊤x+infy∈ℝm[b−N⊤u−Q⊤v]⊤y={c⊤u+d⊤v, se {a−M⊤u−P⊤v−w=0b−N⊤u−Q⊤v=0u≥0;w≥0−∞, em outros casos

Logo, considerando que a−M⊤u−P⊤v=w≥0, o problema dual consiste no seguinte:

{max⁡c⊤u+d⊤vM⊤u+P⊤v≤aN⊤u+Q⊤v=bu≥0

Predefinição:Exercício Predefinição:Resolução

Predefinição:Exercício Predefinição:Resolução

Exemplificando com um problema de programação linear

O seguinte problema é chamado de problema standard (padrão) de programação linear:

(PL){min⁡c⊤xAx=bx≥0

onde são dados Am×n, b∈ℝm e c∈ℝn.

Calculando o dual de (PL)

Primeiramente,

l(x,u,v)=c⊤x+u⊤(−x)+v⊤(b−Ax)

A função α não precisa ser calculada, pois já se mostrou que

α(x)={f(x), se x∈C+∞, se x∉C

Por outro lado, quanto à função β tem-se:

β(u,v)=infx∈ℝnl(x,u,v)
β(u,v)=infx∈ℝnl(x,u,v)=infx∈ℝn[c⊤x−u⊤x+v⊤(b−Ax)]=b⊤v+infx∈ℝn[c−u−A⊤v]⊤x={b⊤v, se c−u−A⊤v=0−∞, em outros casos

Logo, o problema dual é:

(D){max⁡b⊤vc−u−A⊤v=0u≥0;v∈ℝm

ou ainda

(D){max⁡b⊤vA⊤v≤cv∈ℝm

Calculando o dual do dual de (PL)

Considere o seguinte problema:

(D){max⁡b⊤vA⊤v≤cv∈ℝm

que, conforme já foi mostrado em um exercício anteriormente, equivale a

(D){min⁡−b⊤vA⊤v≤cv∈ℝm

A lagrangiana é dado por:

l(v,y)=−b⊤v+y⊤(A⊤v−c)

Logo,

β(y)=infv∈ℝml(v,y)=infv∈ℝm[−b⊤v+y⊤(A⊤v−c)]=−c⊤y+infv∈ℝm[(Ay−b)⊤v]={−c⊤y, se Ay−b=0−∞, em outros casos

Logo, o dual de (D) é:

(DD){max⁡β(y)y≥0,

ou seja,

(DD){max⁡−c⊤yAy=by≥0

que equivale a

(P){min⁡c⊤xAx=bx≥0

Um exemplo numérico contextualizado

Considere a seguinte situação:

Um empresário que produz cerveja dispões de 240 kg de milho, 5 kg de lúpulo e 596 kg de Malta. Para produzir um barril de cerveja preta requer 2,5 kg de milho, 0,125 kg de lúpulo e 17,5 kg de malta. Enquanto que para produzir um barril de cerveja branca, se precisa de 7,5 kg de milho, 0,125 kg de lúpulo e 10 kg de malta. Por barril de cerveja branca vendido, o empresário recebe 130 reais, enquanto por um barril de cerveja preta, recebe 230 reais. Achar o modelo matemático para otimizar o ganho do empresário.

Predefinição:Resolução Na década de 30, 40 e 50 havia diversos livros que tratavam cada problema de programação linear individualmente, deduzindo vez após vez os seus duais, e disso extraindo certas "regras" que eram então sugeridas ao leitor na forma "se o problema for desse tipo, use tal regra, se for daquele tipo, use esta outra, e se for deste outro tipo, use esta regra". Um dos primeiros autores que começou a trabalhar os problemas sob um novo ponto de vista, mais generalizado, foi Werner Oettio (grafia?) . Seguindo-se por George Dantzig (conhecido como inventor do método simplex), Eugen Blumb (grafia?) e Jean-Pierre Crouzeix. Predefinição:Tarefa

Aplicação à programação quadrática

Agora, o problema a considerar passa a ser

{min⁡12x⊤Qx+q⊤x+αx∈C

onde C é um poliedro (interseção finita de semi-espaços), q∈ℝn, α∈ℝ e Qn×n é uma matriz simétrica positiva definida.

Note que este problema tem solução, uma vez que o problema irrestrito correspondente tem solução (já que Q é uma matriz simétrica positiva definida, a função é limitada inferiormente, e como C é fechado, a função objetivo assume seu valor mínimo em C, por Wolfe).

Mesmo para n=5, os problemas de programação linear já são difíceis de resolver "à mão". É preciso utilizar alguma técnica mais sofisticada.

Para dar continuidade ao exemplo, considere que o poliedro C é dado por

C={x∈ℝn;x≥0 e Ax=b}

com Am×n e b∈ℝm.

Agora será aplicado o esquema de dualidade. A lagrangiana é

l:ℝn×ℝn×ℝm↦ℝ
l(x,u,v)=12x⊤Qx+q⊤x+α+u⊤(b−Ax)+v⊤(−x)

além disso,

β:ℝn×ℝm↦ℝ∪{−∞}
β(u,v)=infx∈ℝnl(x,u,v)=minx∈ℝnl(x,u,v)

e a última igualdade vale pois a função é fortemente convexa.

β(u,v)=infx∈ℝnl(x,u,v)=minx∈ℝnl(x,u,v)=minx∈ℝn[12x⊤Qx+q⊤x+α+u⊤(b−Ax)+v⊤(−x)]=minx∈ℝn[12x⊤Qx+(q−v−A⊤u)⊤x+u⊤b+α]

Considerando ∇xl(x¯,u,v)=Qx¯+q−v−A⊤u=0, se deduz que

x¯=Q−1(A⊤u+v−q).

Logo,

β(u,v)=12[Q−1(A⊤u+v−q)]⊤Q[Q−1(A⊤u+v−q)]+(q−v−A⊤u)⊤[Q−1(A⊤u+v−q)]+u⊤b+α=12(A⊤u+v−q)⊤Q−1(A⊤u+v−q)−(A⊤u+v−q)⊤Q−1(A⊤u+v−q)+u⊤b+α=−12(A⊤u+v−q)⊤Q−1(A⊤u+v−q)+u⊤b+α

Observe que, sendo os autovalores de Q positivos, o mesmo vale obrigatoriamente para Q−1. Assim, como a expressão de β envolve (−Q−1), tal função é fortemente côncava (conforme já era esperado para tal função).

Baseado nestas deduções, o problema dual é

(D){max⁡−12(A⊤u+v−q)⊤Q−1(A⊤u+v−q)+u⊤b+αu≥0;v∈ℝm

ou seja,

(D){min⁡12(A⊤u+v−q)⊤Q−1(A⊤u+v−q)−(u⊤b+α)u≥0;v∈ℝm

Usualmente este tipo de problema (D) é resolvido por meio do método do gradiente projetado.

Revisão do método do gradiente projetado

O método baseia-se na seguinte proposição: Predefinição:Proposição Predefinição:Prova

Um algoritmo para o método do gradiente projetado

Este algoritmo é bastante simples.

Primeiro passo:
  Escolha x0∈ℝn e fixe α>0.  
Passo iterativo k: Enquanto xk≠PC(xk−α∇f(xk))
  xk+1=PC(xk−α∇f(xk))

Agora, é interessante observar como se faz para projetar um ponto em C=[0,+∞)n×ℝm.

Predefinição:Exercício Predefinição:Resolução

Exemplificando a projeção

Seja u=[1−12−23−34−45−5]⊤. Então a projeção de u sobre C=[0,+∞)6×ℝ4 é :

PC([1−12−23−34−45−5]⊤)=[1020304−45−5]⊤

Devido a essa simplicidade ao se fazer a projeção de um ponto, o método do gradiente projetado é muito eficiente para resolver o problema (D).

Exemplo concreto

Seja C={(x,y);x+y=1,x≥0,y≥0}. Predefinição:Tarefa

Como calcular a projeção do ponto (1,2) sobre o conjunto C, PC(1,2)? Predefinição:Resolução

Exercícios resolvidos

Predefinição:Exercício Predefinição:Resolução Ao resolver o problema (P), poderia ter sido escolhido Ax−b em vez de b−Ax. Será que isso influenciaria o resultado final?

Acompanhe como ficaria a resolução desta maneira: Predefinição:Resolução

Predefinição:Exercício Predefinição:Resolução

Predefinição:Exercício Predefinição:Resolução

Predefinição:AutoCat