Você está na página 1de 11

Universidade Federal do Rio de Janeiro

Programa de Engenharia de Sistemas e Computação - PESC


Disciplina: Programação Linear - cos780
Professor: Nelson Maculan

Um Exemplo de
Geração de Colunas
Tintim por tintim
Seja 

 Minimizar: z = 3x1 + x2


 Sujeito a : 3x1 + 2x2 ≤ 18,

(Pini)  2x1 + x2 ≥ 4,
0 ≤ x1 ≤ 4,




0 ≤ x2 ≤ 6.

Pode ser assim escrito




 Minimizar: z = 3x1 + x2


 Sujeito a : 3x1 + 2x2 ≤ 18,

(P)  −2x1 − x2 ≤ −4,
0 ≤ x1 ≤ 4,




0 ≤ x2 ≤ 6.

Seja
X = {(x1 , x2 )T ∈ R2 | 0 ≤ x1 ≤ 4 e 0 ≤ x2 ≤ 6}
É fácil ver (4, 1)T ∈ X, ou seja X não é vazio. Além disso, como 0 ≤ x1 ≤ 4 e
0 ≤ x2 ≤ 6, X é limitado. Portanto, X 6= ∅ e limitado.

Seja V (X) o conjunto dos vértices de X,

V (X) = {v 1 , v 2 , . . . , v p }.

Então p p
X X
j
x ∈ X ⇐⇒ x = λj v , λj = 1 e λj ≥ 0, ∀j. (1)
j=1 j=1

Desejamos escrever o problema (P) em função dos λj e v j . Temos


 T
 Minimizar: z = (3 1)(x1 x2 )



 Sujeito a : (3 2)(x1 x2 )T ≤ 18,

(P)  (−2 − 1)(x1 x2 )T ≤ −4,
0 ≤ x1 ≤ 4,


X.


0 ≤ x2 ≤ 6.

Vamos substituir x conforme expresso em 1 nesse último problema, temos:


 p
X
Minimizar: z = (3 1) λj v j






 j=1


 p
X
λj v j ≤ 18,

 Sujeito a : (3 2)



j=1
p
X
λj v j ≤ −4,




 (−2 − 1)

 j=1

 p

 X
λj = 1 e λj ≥ 0, ∀j




j=1

2
Assim, com suaves manipulações algébricas obtemos (P’)
 p
X
Minimizar: z = [(3 1)v j ]λj






 j=1


 p
X
[(3 2)v j ]λj ≤ 18,

 Sujeito a :



(P1) p
X
j=1

− 1)v j ]λj ≤ −4,






 [(−2

 j=1

 p

 X
λj = 1 e λj ≥ 0, ∀j




j=1

Acrescentando variáveis de folga s1 e s2 (e multiplicando a segunda restrição por


−1), temos:

 p
X
Minimizar: z = [(3 1)v j ]λj






 j=1


 p
X
[(3 2)v j ]λj




 Sujeito a : + s1 = 18,
j=1


(PLF) Xp


 [(2 1)v j ]λj −s2 = 4,

 j=1

 p

 X
λj = 1 e λj ≥ 0 ∀j,





 j=1

s1 ≥ 0 e s2 ≥ 0.

Acrescentando as variáveis artificiais y1 y2 temos:

 p
X
Minimizar: z = [(3 1)v j ]λj






 j=1


 p
X
[(3 2)v j ]λj




 Sujeito a : + s1 = 18,
j=1


p


(P2)
X
 [(2 1)v j ]λj −s2 +y1 = 4,

 j=1

 p

 X
λj +y2 = 1,





 j=1

λj ≥ 0 ∀j,




s1 ≥ 0 e s2 ≥ 0.

Problema artificial (primeira fase)

3


 Minimizar: y1 + y2



 p
X
[(3 2)v j ]λj



 Sujeito a : + s1 = 18,


 j=1
p


 X
[(2 1)v j ]λj

(PA) −s2 +y1 = 4,
 j=1
p



 X



 λj +y2 = 1,

 j=1

λj ≥ 0 ∀j,




s1 ≥ 0 e s2 ≥ 0.

As colunas associadas as variáveis s1 , y1 e y2 formal a base B = (s1 y1 y2 ), temos


   
s1 18
B = I3 =⇒ xB =  y1  , xN = 0 e b =  4  ,
y2 1

Temos:
  
s1 18
xB = B −1 b = I3 b = b =⇒  y1  =  4  ≥ 0 primal viável para (PA).
y2 1

cB = (cs1 cy1 cy2 ) = (0 1 1).


µ = cB B −1 =⇒ µ = cB I3 = cB =⇒ µ = (0 1 1).

3v1j + 2v2j
 
v1j
!
vj = , aj =  2v1j + v2j  e cj = 0.
 
v2j
1
Daı́ vem
3v1j + 2v2j
 

zj − cj = (0 1 1)  2v1j + v2j  − 0 =⇒ zj − cj = 2v1j + v2j + 1.


 

Enquanto
zs2 − cs2 = µ(0 − 1 0)T − 0 = −1 < 0.
Um pequeno abuso de notação para simplificar a escrita do problema dois, usa-
remos v1j = v1 + v2j = v2 .

 Maximizar: 2v1 + v2 + 1

(PG)  Sujeito a : 0 ≤ v1 ≤ 4,
0 ≤ v2 ≤ 6.

4
Cuja solução é  
1 4
v =
6
Logo    
3·4+2·6 24
a1 =  2 · 4 + 6  =  14  entra na base.
1 1
Sairá da base a variável correspondente a
 
18 4 1 4
min , , = =⇒ y1 sai da base.
24 14 1 14
Assim a nova base é
24
 
  1 − 14 0
1 24 0
0 14 0  =⇒ B −1 = 
 1

B = (s1 a1 y2 ) =⇒ B = 
 0 14
0 

0 1 1 1
0 − 14 1

Então  78 

1 − 24   7
 
14
0  
18  
xB = B −1 b =   4 = 2
 1
  
 0 0  
14   7 
1 1  
0 − 14 1 
5

7
A variável associada a a1 é λ1 , assim

cB = (s1 λ1 y2 ) =⇒ cB = (0 0 1)

Daı́ vem
24
 
1 − 14 0
1
µ = cB B −1 = (0 0 1) 
 1

0 14
0  = (0 − 1)
  14
1
0 − 14 1
Como
 
0
1 1
zs2 − cs2 = (0 − 1)  −1  − 0 = > 0, s2 entra na base.
14 14
0

Vamos determinar quem sai da base.


 24   78 
   14   7 
0    
−1 
 1   2 
B −1  =  −  e xB =  
0

 14 

 7



1 5
   
14 7
5
Sairá da base a variável correspondente a
 78 5   
7 7 78 10 78
min 24 , 1 = min , = =⇒ s1 sai da base.
14 14
12 1 12

Assim a nova base é



0 24 0
B = (s2 a1 y2 ) =⇒ B =  −1 14 0  .
0 1 1

Vamos fazer uma pequena digressão para analisar o cálculo da inversa já que este
é um procedimento computacionalmente caro. Vamos chamar de B a matriz básica
do passo anterior do simplex e de D a matriz básica do passo atual, temos:
   
1 24 0 0 24 0
B =  0 14 0  e D =  −1 14 0 
0 1 1 0 1 1

Note que as matrizes diferem apenas de uma coluna - a primeira (devido a troca
de base, saiu s1 e entrou s2 ). Então é razoável supor que as inversas dessas matrizes
B −1 e D−1 sejam parecidas, e como B −1 é conhecida também faz sentido o questio-
namento: é possı́vel obter D−1 a partir de B −1 ? Esta digressão tem o propósito de
responder essa pergunta.
Vamos abstrair ao exemplo e considerar uma mudança de base genérica do sim-
plex.
Como as matrizes B e D são obtidas pelo método simplex, a coluna y que entra
na nova base satisfaz

y = Bγ, onde γ é uma coluna conhecida do passo anterior.

Seja bj a j-ésima coluna de B, então

B = (b1 b2 ... bn ).

Seja k a coluna de D que entrou na base na atualização de B para D, então D


pode ser escrita da seguinte forma

D = (b1 b2 ... bk−1 Bγ bk+1 ... bn ) =⇒

B −1 D = (B −1 b1 B −1 b2 ... B −1 bk−1 B −1 Bγ B −1 bk+1 ... B −1 bn ) =⇒


B −1 D = (e1 e2 ... ek−1 γ ek+1 ... en )
Defina
E = (e1 e2 ... ek−1 γ ek+1 ... en )
Então

B −1 D = E ⇐⇒ (B −1 D)−1 = E −1 ⇐⇒ D−1 (B −1 )−1 = E −1 ⇐⇒ D−1 B = E −1

Portanto
D−1 = E −1 B −1 (2)

6
Observe que a matriz E difere da identidade em apenas uma coluna, portanto
sua inversa é consideravelmente fácil de calcular, basta aplicar o método de Gauss
à coluna não canônica, simples assim. Como B −1 é conhecida do passo anterior a
fórmula 2 dará a inversa de D.
Finda a incursão teórica, vamos utilizá-la para calcular a inversa da matriz B de
nosso exemplo sem fortes emoções, temos:

1 − 24
 
 
14
0  
1 24 0 0 24 0
B =  0 14 0  , B −1 = 
 1

0 0  e D =  −1 14 0 
 14 
0 1 1 1 0 1 1
0 − 14 1

Observe a primeira coluna de D e lembre que já calculamos


 24   24 
   14     14 
0   0  
−1 
 1  
 −1
 
B −1  = −
 =⇒  −1  = B 
 14 
  14 
0 0  
1 1
   
14 14
Assim, considerando a notação de nossa digressão essa última equação fornece
 24   24   14 
0 0 0 0
 14   14   24 
   
1  1 1
 
−1
   
γ= −  =⇒ E =  − 1 0  =⇒ E =  1 0
 
 14   14



 24



1
 
1 1
   
14 0 1 − 0 1
14 24
Como D−1 = E −1 B −1 temos
 14   14 
0 0  −1 0
 24  1 − 24 0  24


  14  
−1
 1  1
 −1
 1 
D =  1 0  0
 
14
0  =⇒ D = 
  0 0 
 24  24

 1

 0 − 1
1 1
  
14
− 0 1 − 0 1
24 24
Voltando à notação padrão do exemplo
 14 
−1 0
   24  
0 24 0   18
−1
 1 
B =  −1 14 0  =⇒ B =  0 0  e b= 4 
0 1 1

 24 
 1
1
 
− 0 1
24

7
Temos
26
 
4
1
xB = B −1 b =  µ = cB B −1 = (−
 3

, cB = (0 0 1), 0 1)
4
  24
1
4

Como zj − cj = µaj e cj = 0 (associada a λj ), então

3v1j + 2v2j
 
1 3 2
zj = µaj = (− 0 1)  2v1j + v2j  =⇒ zj = − v1 − v2 + 1
 
24 24 24
1

3 2
 Maximizar: − v1 − v2 + 1


24 24
(PG)  Sujeito a : 0 ≤ v1 ≤ 4,

 0 ≤ v2 ≤ 6.
Cuja solução é  
2 0
v =
0
Logo    
3·0+2·0 0
a2 =  2 · 0 + 0  =  0  entra na base.
1 1
Como a única coordenada não nula é a terceira a xB3 = y2 sai da base. Assim a
nova base é formada pelas colunas associadas às variáveis s2 , λ1 e λ2 , portanto
 
0 24 0
B = (s2 a1 a2 ) =⇒ B =  −1 14 0 
0 1 1

Como não há variável artificial nesta base temos uma solução básica viável para
o (PLF), a saber
 26   26 
   
4 s2 s2 4
−1
 3   3 
xB = B b =  4  , como xB =
   λ1  =⇒  λ1  = 4 


1 λ2 λ2 1
4 4

Conforme a formulação expressa no (PLF)


 
      3
3 4 1 0 x1
x = λ1 v 1 + λ2 v 2 =⇒ x = + =⇒ x = =
 
4 6 4 0 x2 9 
2
Esta é uma solução básica viável para o problema (P).

8
x2

6 • v1

5
• x = (3, 29 )T = 0.75v 1 + 0.25v 2
4

3 • x∗ = (4, 3) = 1 (v 1 + v 3 )
2
2

1
v3 x1
• •
v2 1 2 3 4

Continuemos a resolução pelo método de geração de colunas.


Para a nova base temos
cB = (0 cλ1 cλ2 )

cλ1 = (3 1)v 1 = (3 1)(4 6)T = 18


cλ2 = (3 1)v 2 = (3 1)(0 0)T = 0

Portanto
cB = (0 18 0), como µ = cB B −1 temos
 14 
−1 0
 24 
 
 1  3
µ = (0 18 0)   24  =⇒ µ = ( 4 0 0)
0 0 
 
1
 
− 0 1
24
 
3v1 + 2v2
3 3 1
zj − cj = ( 0 0)  2v1 + v2  − (3v1 + v2 ) = − v1 + v2
4 4 2
1

3 1
 Minimizar: − v1 + v2


(PG)  Sujeito a : 0 ≤4 v1 ≤24,

 0 ≤ v2 ≤ 6.
Cuja solução é  
3 4
v = , associado a λ3 .
0

9
Logo    
3·4+2·0 12
a3 =  2 · 4 + 0  =  8  entra na base.
1 1
 14   
−1 0 −1
 24
 26 
    
s2 4   12  1 

 λ1  = 
 3  −1
 1 
 8  = 
 4  e B a3 =  24 0 0 

   2 
λ2 1
   
1  1 
14
 
4
− 0 1 2
24
Sairá da base a variável que satisfizer
 9 3 
2 2
min 1 , 1 = min {9, 3} = 3 =⇒ λ2 sai da base.
2 2

A nova base é formada pela colunas associadas às variáveis s2 , λ1 e λ3 , assim


 
0 24 12
 
B = (s2 λ1 λ3 ) =⇒ B =   −1 14 8 

0 1 1

Conforme nossa pequena teoria para atualizar a inversa temos


 14   1 
−1
−1 0 −1 2

1 0 −1  24   2 
1
     
−1

0 1
  1  −1
 1 
B =    0 0  =⇒ B =  0 −1 
2   24   12 
 1     
0 0 14 1
   
2 − 0 1 − 0 2
24 12
 1   
−1 2 7
   2   
s2  18  1 
 
 λ1  = xB = B −1 b = 
 1 
 4  = 
 12 0 −1 

 2 
λ3 1
   
 1 
1
 
− 0 2 2
12
Como
X
x= λj v j =⇒ x = λ1 v 1 + λ2 v 2 + λ3 jv 3 =⇒ x = λ1 v 1 + 0v 2 + λ3 v 3 =⇒
     
1 1 4 4 4
x = (v 1 + v 3 ) = + =
2 2 6 0 3
Para a nova base temos

cB = (0 cλ1 cλ3 ) = (0 18 12).

10
cλ3 = (3 1)v 3 = (3 1)(4 0)T = 12.
 1 
−1 2
 2 
 
−1
 1  1
µ = cB B = (0 18 12)   12 0 −1  =⇒ µ = ( 2
 0 6)
 
1
 
− 0 2
12
 
3v1 + 2v2
1
zj − cj = ( 0 6)  2v1 + v2  − (3v1 + v2 )
2
1

3
 Minimizar: − v1 + 6


(PG)  Sujeito a : 0 ≤2 v1 ≤ 4,

 0 ≤ v2 ≤ 6.
Cuja solução é    
4 4 4
v = ou
0 6
3
Como − 4 + 6 = 6 − 6 = 0 a solução é ótima é
2
 
1 1 3 4
x = (v + v ) =
2 3

Como      
∗ x1 x1 4
x = =⇒ =
x2 x2 3
Como z = 3x1 + x2 o valor ótimo é

z ∗ = 3 · 4 + 3 =⇒ z = 15.

Dual 

18
1
z ∗ = µb = ( 0 6)  4  = 9 + 6 = 15 =⇒ z ∗ = 15
2
1
De fato é ótimo pois
cx∗ = µb.

11

Você também pode gostar