Programação Linear e Algoritmo Simplex
Programação Linear e Algoritmo Simplex
Contexto
Resumo
1 Motivação
2 Formulações
Forma Standard
Forma Slack
3 Algoritmo Simplex
Operação Pivot
Solução Exequível Inicial
Resultados Formais
4 Dualidade
Motivação Formulações Algoritmo Simplex Dualidade
Motivação
Exemplo
Urbanos Suburbanos Rurais
Estradas -2 5 3
Liberalização da Droga 8 2 -5
Subsídios Agricultura 0 0 10
Imposto sobre Gasolina 10 0 -2
Motivação
Exemplo
Urbanos Suburbanos Rurais
Estradas -2 5 3
Liberalização da Droga 8 2 -5
Subsídios Agricultura 0 0 10
Imposto sobre Gasolina 10 0 -2
Motivação
Outro Exemplo
Uma pessoa tem insuficiências nos nutrientes Na , Nb , Nc . No entanto, estes
nutrientes podem ser encontrados em diferentes tipos de comida. Considere a
seguinte tabela que mostra a quantidade de cada nutriente Na , Nb , Nc por cada dose
unitária de comida C1 , C2 , C3 , C4 .
Na Nb Nc
C1 3 10 5
C2 8 4 7
C3 10 5 2
C4 0 15 10
Formulações
Formulação Geral
Programação Linear
Optimizar (minimizar ou maximizar) função linear sujeita a conjunto de
restrições lineares
Função linear (função objectivo):
n
f (x1 , x2 , . . . , xn ) = ∑ cj xj
j =1
Restrições Lineares:
≥
n
g1 (x1 , x2 , . . . , xn ) = ∑ aij xj = bi
j =1
≤
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar
x1 ≥ 0
sujeito a
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar
x1 ≥ 0
sujeito a
x1 , x2 ≥ 0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
2 8
Exemplo
1 x ≤
maximizar
4x −
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
x1 , x2 ≥ 0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
2 8
Exemplo
1 x ≤
maximizar
4x −
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
2x 1
x1 , x2 ≥ 0
+ x2
≤1
0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
2 −
2
1 −2
x ≥
2 8
Exemplo
1 x ≤
5x
maximizar
4x −
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
− ≥ −2
2x 1
5x1 2x2
x1 , x2 ≥ 0
+ x2
≤1
0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
2 −
2
1 −2
x ≥
2 8
Exemplo
1 x ≤
5x
maximizar
4x −
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
− ≥ −2
2x 1
5x1 2x2
x1 , x2 ≥ 0
+ x2
≤1
0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
5x1 − 2x2 ≥ −2
x1 , x2 ≥ 0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar x1 + x2
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
5x1 − 2x2 ≥ −2
x1 , x2 ≥ 0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar x1 + x2
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
5x1 − 2x2 ≥ −2
x1 , x2 ≥ 0
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar x1 + x2
x1 ≥ 0
sujeito a
4x1 − x2 ≤ 8
2x1 + x2 ≤ 10
5x1 − 2x2 ≥ −2
x1 , x2 ≥ 0
x1
+
x2
=4
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar x1 + x2
x1 ≥ 0
sujeito a
− ≤
x1
4x1 x2 8
+
+ ≤
x2
2x1 x2 10
=8
5x1 − 2x2 ≥ −2
x1 , x2 ≥ 0
x1
+
x2
=4
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
x2
Exemplo
maximizar x1 + x2
sujeito a
Solução
4x1 − x2 ≤ 8
x1 ≥ 0
2x1 + x2 ≤ 10
x1
5x1 − 2x2 ≥ −2
+
x2
x1 , x2 ≥ 0
=8
x1
Solução
+
x2
x1 = 2, x2 = 6
=4
x1
x1
+
x2 ≥ 0
x2
=0
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
Região Exequível
x2
Qualquer solução que satisfaça o conjunto
de restrições designa-se por solução
exequível
A cada solução exequível corresponde um
valor (custo) da função objectivo
O conjunto de soluções exequíveis é
designado por região exequível
A região exequível é um conjunto convexo
no espaço n-dimensional
Conjunto convexo S: qualquer ponto de um
segmento que liga quaisquer dois pontos
em S está também em S x1
S é designado por simplex
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
Região Exequível
Qualquer solução que satisfaça o conjunto
x2
de restrições designa-se por solução
exequível
A cada solução exequível corresponde um
valor (custo) da função objectivo
O conjunto de soluções exequíveis é
designado por região exequível
A região exequível é um conjunto convexo
no espaço n-dimensional
Conjunto convexo S: qualquer ponto de um
segmento que liga quaisquer dois pontos
em S está também em S
S é designado por simplex
x1
A solução óptima encontra-se num vértice
do simplex
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
Algoritmos
Algoritmo Simplex
Exponencial no pior caso; eficiente na prática e muito utilizado
Algoritmo da Elipsóide
Polinomial; normalmente ineficiente
Métodos de Ponto Interior
Motivação Formulações Algoritmo Simplex Dualidade
Formulações
Formulações
maximizar d [t ]
sujeito a d [v ] ≤ d [u ] + ω(u , v ), ∀(u , v ) ∈ E
d [s] = 0
Fluxo Máximo
maximizar ∑ f (s, v )
v ∈V
sujeito a f (u , v ) ≤ c (u , v ) ∀u , v ∈ V
f (u , v ) = −f (v , u ) ∀u , v ∈ V
∑v ∈V f (u , v ) = 0 ∀u ∈ V − {s, t }
Motivação Formulações Algoritmo Simplex Dualidade
Forma Standard
Formulações
Forma Standard
n
maximizar ∑ cj xj
j =1
n
sujeito a ∑ aij xj ≤ bi i = 1, 2, . . . , m
j =1
xj ≥ 0 j = 1, 2, . . . , n
maximizar cT x
sujeito a Ax ≤ b
x≥0
Forma Standard
Formulações
Forma Standard
Formulações
Forma Standard
Formulações
Forma Standard
Formulações
Forma Standard
Formulações
Forma Standard
Formulações
Forma Standard
Formulações
Forma Slack
Formulações
Forma Slack
Formulações
Forma Slack
Formulações
Forma Slack
Formulações
Operação Pivot
Algoritmo Simplex
Operação Pivot
Operação central do algoritmo Simplex
Escolher variável não básica xe para passar a básica
Variável de entrada
Escolher variável básica xl para passar a não básica
Variável de saída
Calcular nova forma slack do problema
N 0 = N − { x e } ∪ {x l }
B 0 = B − {xl } ∪ {xe }
(N 0 , B 0 , A , b , c , v )
Motivação Formulações Algoritmo Simplex Dualidade
Operação Pivot
Algoritmo Simplex
Algoritmo Simplex
Calcular forma slack inicial
Para a qual solução básica inicial é exequível
Caso contrário reporta problema não exequível (unfeasible) e termina
Enquanto existir ce > 0 (i.e. valor de z pode aumentar)
xe define variável de entrada (i.e. nova variável básica)
Seleccionar xl
xl corresponde a linha i que minimiza bi /aie , para aie > 0
Se aie < 0 para todo o i, retornar "unbounded"
Operação Pivot
Algoritmo Simplex
Forma Slack
z = 3x1 + x2 + 2x3
x4 = 30 − x1 − x2 − 3x3
x5 = 24 − 2x1 − 2x2 − 5x3
x6 = 36 − 4x1 − x2 − 2x3
Motivação Formulações Algoritmo Simplex Dualidade
Operação Pivot
Algoritmo Simplex
z = 3x1 + x2 + 2x3
x4 = 30 − x1 − x2 − 3x3
x5 = 24 − 2x1 − 2x2 − 5x3
x6 = 36 − 4x1 − x2 − 2x3
x2 x3 3x6
z = 27 + 4
+ 2
− 4
x2 x3 x6
x1 = 9 − 4
− 2
− 4
3x2 5x3 x6
x4 = 21 − 4
− 2
+ 4
3x2 x6
x5 = 6 − 2
− 4x3 + 2
Motivação Formulações Algoritmo Simplex Dualidade
Operação Pivot
Algoritmo Simplex
x2 x3 3x6
z = 27 + 4
+ 2
− 4
x2 x3 x6
x1 = 9 − 4
− 2
− 4
3x2 5x3 x6
x4 = 21 − 4
− 2
+ 4
3x2 x6
x5 = 6 − 2
− 4x3 + 2
111 x2 x5 11x6
z = 4
+ 16
− 8
− 16
33 x2 x5 5x6
x1 = 4
− 16
+ 8
− 16
3 3x2 x5 x6
x3 = 2
− 8
− 4
+ 8
69 3x2 5x5 x6
x4 = 4
+ 16
+ 8
− 16
Motivação Formulações Algoritmo Simplex Dualidade
Operação Pivot
Algoritmo Simplex
111 x2 x5 11x6
z = 4
+ 16
− 8
− 16
33 x2 x5 5x6
x1 = 4
− 16
+ 8
− 16
3 3x2 x5 x6
x3 = 2
− 8
− 4
+ 8
69 3x2 5x5 x6
x4 = 4
+ 16
+ 8
− 16
x3 x5 2x6
z = 28 − 6
− 6
− 3
x3 x5 x6
x1 = 8 + 6
+ 6
− 3
8x3 2x5 x6
x2 = 4 − 3
− 3
+ 3
x3 x5
x4 = 18 − 2
+ 2
Motivação Formulações Algoritmo Simplex Dualidade
Operação Pivot
Algoritmo Simplex
x3 x5 2x6
z = 28 − 6
− 6
− 3
x3 x5 x6
x1 = 8 + 6
+ 6
− 3
8x3 2x5 x6
x2 = 4 − 3
− 3
+ 3
x3 x5
x4 = 18 − 2
+ 2
Algoritmo Simplex
maximizar −x0
n
sujeito a ∑ aij xj − x0 ≤ bi i = 1, 2, . . . , m
j =1
xj ≥ 0 j = 0, 1, 2, . . . , n
Algoritmo Simplex
Algoritmo Simplex
Algoritmo Simplex
maximizar 2x1 − x2
sujeito a
2x1 − x2 ≤ 2
x1 − 5x2 ≤ −4
x1 , x2 ≥ 0
maximizar −x0
sujeito a
2x1 − x2 − x0 ≤ 2
x1 − 5x2 − x0 ≤ −4
x1 , x2 , x0 ≥ 0
Motivação Formulações Algoritmo Simplex Dualidade
Algoritmo Simplex
maximizar −x0
sujeito a
2x1 − x2 − x0 ≤ 2
x1 − 5x2 − x0 ≤ −4
x1 , x2 , x0 ≥ 0
z = − x0
x3 = 2 − 2x1 + x2 + x0
x4 = −4 − x1 + 5x2 + x0
Motivação Formulações Algoritmo Simplex Dualidade
Algoritmo Simplex
z = − x0
x3 = 2 − 2x1 + x2 + x0
x4 = −4 − x1 + 5x2 + x0
z = −4 − x1 + 5x2 − x4
x3 = 6 − x1 − 4x2 + x4
x0 = 4 + x1 − 5x2 + x4
Resultados Formais
Algoritmo Simplex
Resultados Formais
Dado um programa linear (A, b, c ):
Se o algoritmo Simplex retorna uma solução, a solução é exequível
Se o algoritmo Simplex retorna "unbounded", o programa é não limitado
Dado um programa linear (A, b, c ) na forma standard, e B um conjunto
de variáveis básicas, a forma slack é única
Motivação Formulações Algoritmo Simplex Dualidade
Resultados Formais
Algoritmo Simplex
Resultados Formais
Variação do valor da função objectivo após pivoting:
Valor da função objectivo não pode diminuir
Variável escolhida tem coeficiente positivo
Valor da variável é não negativo, pelo que novo valor da função de custo
não pode diminuir
Valor da função objectivo pode não aumentar
Degenerescência
Mas é sempre possível assegurar que algoritmo termina
Motivação Formulações Algoritmo Simplex Dualidade
Resultados Formais
Algoritmo Simplex
Resultados Formais
O Simplex está em ciclo se existem formas slack idênticas para duas
iterações do algoritmo
n+m
Se o algoritmo Simplex não termina após Cm iterações, então o
algoritmo está em ciclo
Cada conjunto B determina unicamente a forma slack
Existem n + m variáveis e |B | = m
n+m
Número de modos de escolher B: Cm
n+m
Número de formas slack distintas: Cm
n+m
Se algoritmo executar mais de Cm iterações, então está em ciclo
Eliminar ciclos:
Regra de Bland: desempates na escolha de variáveis através da escolha
da variável com o menor indíce
Motivação Formulações Algoritmo Simplex Dualidade
Dualidade
Dualidade
Conceito essencial em optimização
Normalmente associado com existência de algoritmos polinomiais
E.g., fluxo máximo corte mínimo
Programa linear dual:
m
minimizar ∑ bi yi
i =1
m
sujeito a ∑ aij yi ≥ cj j = 1, 2, . . . , n
i =1
yi ≥ 0 i = 1, 2, . . . , m
A formulação original é conhecida como o programa primal
Motivação Formulações Algoritmo Simplex Dualidade
Dualidade
Prova:
n n m
∑ cj xj ≤ ∑ ( ∑ aij yi )xj
j =1 j =1 i =1
m n
= ∑ ( ∑ aij xj )yi
i =1 j =1
m
≤ ∑ bi yi
i =1
Motivação Formulações Algoritmo Simplex Dualidade
Dualidade
Dualidade