O documento discute técnicas de programação linear inteira e geração de colunas. Resume três pontos principais:
1) Apresenta definições de problemas de programação linear e inteira, incluindo suas relaxações lineares;
2) Discutem técnicas como geração de colunas e branch-and-price para resolver problemas de programação linear inteira;
3) Fornece exemplos detalhados de como aplicar essas técnicas em problemas específicos como corte de barras e mochila.
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Geração de colunas em programação inteira
1. Geração de Colunas em
Programação Inteira
Nelson Maculan1
1
Universidade Federal do Rio de Janeiro
PSR, Rio de Janeiro, 09/03/2010 – p. 1/2
2. Definições 1
Dados uma matriz A ∈ Qm×n e vetores b ∈ Qm e c ∈ Rn ,
com 0 < m ≤ n, consideremos o seguinte problema de
programação linear inteira:
(P I) minimizar
sujeito a:
cT x
Ax = b
x≥0
e inteiro,
cujo conjunto viável é
n
SP I = {x ∈ Z+ ; Ax = b}.
PSR, Rio de Janeiro, 09/03/2010 – p. 2/2
3. Definições 2
Consideremos, também, a relaxação linear do problema
(P I), a saber:
(P L) minimizar
sujeito a:
cT x
Ax = b
x ≥ 0,
cujo conjunto viável é
n
SP L = {x ∈ R+ ; Ax = b}.
Observação:
Seja x ∈ SP I . Definimos val(H) = cT x, temos que
¯
¯
val(P L) ≤ val(P I) ≤ val(H).
PSR, Rio de Janeiro, 09/03/2010 – p. 3/2
4. (PL) especial 1
(P L) minimizar
cj x j
j∈J
sujeito a :
aj xj = b
j∈J
xj ≥ 0,
para todo j ∈ J,
onde b ≥ 0 ∈ Qm , aj ∈ Qm e cj ∈ R, para cada j ∈ J .
Suponhamos que aj ∈ K = {a1 , a2 , ..., ap } e que exista
uma função f : K → R tal que cj = f (aj ), para cada j ∈ J .
Resolver o problema (P L) poderá não ser uma tarefa fácil,
quando houver um número excessivamente grande de
variáveis.
PSR, Rio de Janeiro, 09/03/2010 – p. 4/2
5. (PL) especial 2
Reconsideramos o (P L). Seja J ′ ⊆ J um subconjunto de
índices. Definamos um subproblema (mestre restrito) de
(P L), a saber:
(P L′ ) minimizar
cj x j
j∈J ′
sujeito a :
aj xj = b
j∈J ′
xj ≥ 0,
para todo j ∈ J ′ .
PSR, Rio de Janeiro, 09/03/2010 – p. 5/2
6. (PL) especial 3
A partir de uma base associada a uma solução viável para
o problema (P L′ ), logo básica viável também de (P L),
temos que verificar se essa solução é ótima. Para isso
buscamos uma nova coluna associada a um custo reduzido
negativo. Caso não exista tal coluna essa solução básica
viável será ótima de (P L).
Seja B = (aB(1) aB(2) ... aB(m) ) , tal que det(B) = 0, uma
base associada a uma solução viável
xT = (xT xT ) ∈ Q1×n , onde xB = B −1 b ≥ 0 e xN = 0.
B N
Seja uT = (cB(1) cB(2) ... cB(m) )B −1 , o vetor dos
multiplicadores do simplex (duais).
O custo reduzido será definido por: cj = cj − uT aj , no nosso
¯
caso, cj = f (aj ) para cada j ∈ J , logo cj = f (aj ) − uT aj .
¯
PSR, Rio de Janeiro, 09/03/2010 – p. 6/2
7. Resolução do (PL) especial
Para a busca de uma coluna associada a um custo relativo
negativo, resolveremos o seguinte problema auxiliar de
otimização combinatória:
(SP ) minimizarf (aj ) − uT aj
sujeito a:
aj ∈ K.
Seja val(SP ) = f (aq ) − uT aq . Se val(SP ) ≥ 0 a solução
básica viável em questão é um ótimo de (P L). Caso
contrário, a coluna aq entrará na nova base (método do
simplex revisado).
PSR, Rio de Janeiro, 09/03/2010 – p. 7/2
8. (PI) especial 1
(P I) minimizar
cj x j
j∈J
sujeito a :
aj xj = b
j∈J
xj ∈ Z+ ,
para todo j ∈ J,
onde b ≥ 0 ∈ Z m , aj ∈ Z m e cj ∈ R, para cada j ∈ J .
Suponhamos que aj ∈ K = {a1 , a2 , ..., ap } e que exista
uma função f : K → R tal que cj = f (aj ), para cada j ∈ J .
m
Exemplo de K = { y = (y1 y2 ... ym )T ∈ Z+ | m lk yk ≤ L},
k=1
onde, são conhecidos lk , L tais que
lk ∈ Z++ , lk ≤ L ∈ Z++ , k = 1, 2, ..., m. K é conhecido como
conjunto mochila e cj = f (aj ) = 1, j ∈ J.
PSR, Rio de Janeiro, 09/03/2010 – p. 8/2
9. (PI) especial 2
Ao solucionarmos a relaxação linear de (P I), denominada
(P L), encontraremos a solução no problema:
(P L′ ) minimizar
cj x j
j∈J ′
sujeito a :
aj xj = b
j∈J ′
x j ∈ R+ ,
para todo j ∈ J ′ ⊆ J,
foram geradas |J ′ | colunas até obtermos a solução ótima
de (P L).
PSR, Rio de Janeiro, 09/03/2010 – p. 9/2
10. (PI) especial 3
Consideremos o problema de programação linear inteira
abaixo:
(P I ′ ) minimizar
cj x j
j∈J ′
sujeito a :
aj xj = b
j∈J ′
xj ∈ Z+ ,
para todo j ∈ J ′ ⊆ J,
logo val(P L) ≤ val(P I) ≤ val(P I ′ ). Assim sendo val(P I ′ )
pode ser uma boa cota superior para val(P I) associada a
uma solução viável para (P I).
PSR, Rio de Janeiro, 09/03/2010 – p. 10/2
11. a
(PI) especial: exemplo 1 parte
Gilmore & Gomory (1961, 1963), corte de barras em uma
dimensão:
(CB1) minimizar
xj
j∈J
sujeito a :
aj xj ≥ b
j∈J
xj ∈ Z+ ,
para todo j ∈ J,
m
m
onde cj = 1, j ∈ J, b ∈ Z+ , aj = (a1j a2j ... amj )T ∈ Z+ tal
que
m
aj ∈ K = { α = (α1 α2 ... αm )T ∈ Z+ | m lk αk ≤ L}, j ∈ J.
k=1
Os lk ∈ Z, k = 1, 2, ..., m, e L ∈ Z são dados tais que
lk ≤ L, k = 1, 2, ..., m. Observação |K| = |J|.
PSR, Rio de Janeiro, 09/03/2010 – p. 11/2
12. a
(PI) especial: exemplo 2 parte
Seja a relaxação linear de (CB1) :
(LP CB1) minimizar
xj
j∈J
sujeito a :
aj xj − s = b
j∈J
x j ∈ R+ ,
para todo j ∈ J,
s = (s1 s2 ... sm )T ≥ 0,
onde s é o vetor das variáveis de folga. A matriz
B = (a1 a2 ... am ), para aj = ej , j = 1, 2, ..., m está associada
a uma solução básica viável de (LP CB1).
PSR, Rio de Janeiro, 09/03/2010 – p. 12/2
13. a
(PI) especial: exemplo 3 parte
Como verificar se B está associada a uma solução ótima
de (LP CB1)?
O vetor u = (1 1 ... 1 0 0 ... 0)B −1 dos multiplicadores do
simplex (solução dual se B for uma base ótima) será
sempre ≥ 0. Por quê?
Teremos que resolver o subproblema ("pricing") seguinte:
(SP ) minimizar 1 − uT aj
sujeito a:
aj ∈ K.
Ou ainda:
val(SP ) = 1 − max{uT a | a ∈ K}.
PSR, Rio de Janeiro, 09/03/2010 – p. 13/2
14. a
(PI) especial: exemplo 4 parte
O problema (KP ) : max{uT a | a ∈ K} é conhecido como o
problema da mochila, para o qual existem bons algoritmos
na prática (Martello & Toth, 1990).
Se val(SP ) = 1 − uT a < 0, a coluna a entrará na nova base.
¯
¯
Caso contrário a solução associada à matriz básica B
fornecerá um ótimo para (LP CB1).
CONJETURA:
val(CB1) ∈ { ⌈val(LP CB1)⌉, ⌈val(LP CB1)⌉ + 1}.
PSR, Rio de Janeiro, 09/03/2010 – p. 14/2
15. Branch-and-price para (PI) 1
Vamos supor que val(P L′ ) = j∈J ′ cj xj = val(P L), possui
¯
k ∈ J ′ , tal que xk ∈ Z. Isto é, a solução x não é uma
¯ /
¯
solução viável de (P I). Podemos pensar no processo
clássico de ramificação (branch) em árvore binária visando
à busca da solução de (P I).
Do problema (P L′ ) sairão dois subproblemas:
(P rob1) := (P L′ ) ∩ { xk ≤ ⌊¯k ⌋ },
x
(P rob2) := (P L′ ) ∩ { xk ≥ ⌊¯k ⌋ + 1 }.
x
Fazemos a reotimização de (P rob1) e (P rob2) (utilizando
apenas as colunas geradas em J ′ ). Método dual do simplex
com variáveis canalizadas (Maculan & Fampa, 2006).
PSR, Rio de Janeiro, 09/03/2010 – p. 15/2
16. Branch-and-price para (PI) 2
Supondo que (P rob1) e (P rob2) não sejam vazios, teremos
que xk = ⌊¯k ⌋ em (P rob1) e xk = ⌊¯k ⌋ + 1 em (P rob2).
x
x
Verificaremos se a solução ótima de (P rob1) é também
ótima de (P L) ∩ { xk ≤ ⌊¯k ⌋ }, e de (P rob2) para
x
(P L) ∩ { xk ≥ ⌊¯k ⌋ + 1 }.
x
Para resolvermos (P L) ∩ { xk ≤ ⌊¯k ⌋ }, teremos que
x
considerar a partir da solução de (P rob1) o subproblema
seguinte:
(SP ) minimizarf (aj ) − uT aj
sujeito a:
aj ∈ K − {ak }.
PSR, Rio de Janeiro, 09/03/2010 – p. 16/2
17. Dantzig-Wolfe em PLI 1
(P LI) minimizar cT x
sujeito a:
Ax = b
Dx ≤ d
n
x ∈ Z+ ,
onde as matrizes A ∈ Qm1 ×n e D ∈ Qm2 ×n , e os vetores
b ∈ Qm1 , d ∈ Qm2 e c ∈ Qn são dados. Além disso
n
suponhamos que o conjunto X = {x ∈ Z+ | Dx ≤ d} seja
n
limitado. X = {ˆ1 , x2 , ..., xp } = {x ∈ Z+ | Dx ≤ d} =
x ˆ
ˆ
p
n
{x ∈ R+ | x = p λj xj ,
ˆ
λj = 1, λ ∈ {0, 1}p }.
j=1
j=1
n
n
Quando em (P LI) substituirmos x ∈ Z+ por x ∈ R+ ,
denominaremos essa relaxação linear de (RLP LI).
PSR, Rio de Janeiro, 09/03/2010 – p. 17/2
18. Dantzig-Wolfe em PLI 2
Utilizando as notações seguintes:
T j
cj = c x , aj =
ˆ
ˆ ˆ
Aˆj
x
1
∈R
b
e ˆ=
m
b
1
∈ Rm ,
onde m = m1 + 1 e j ∈ J = {1, 2, ..., p}. Poderemos
reescrever (P LI) como se segue:
(P LI) minimizar
cj λ j
ˆ
j∈J
aj λj = ˆ
ˆ
b
sujeito a :
j∈J
λj ∈ {0, 1},
para j ∈ J.
PSR, Rio de Janeiro, 09/03/2010 – p. 18/2
19. Relaxação linear de (PLI)
(RP LI) minimizar
cj λ j
ˆ
j∈J
aj λj = ˆ
ˆ
b
sujeito a :
j∈J
λj ∈ [0, 1],
para j ∈ J.
ˆ
Seja B ∈ Rm×m uma base viável de (RP LI) e uT = cB B −1 .
ˆˆ ˆ
É fácil verificar que val(RLP LI) ≤ val(RP LI).
PSR, Rio de Janeiro, 09/03/2010 – p. 19/2
20. Resolução de (RPLI)
ˆ
Para verificarmos se B é uma base ótima de (RP LI),
teremos que calcular:
val(SP ) = minj=1,2,...,p {ˆj −uT aj } = minj=1,2,...,p {cT xj −uT aj }.
c
ˆ
ˆ
ˆ
Sabemos que aj =
ˆ
Aˆj
x
1
, e seja
u = (u1 u2 ... um1 u0 )T = (¯ u0 )T Então
u
val(SP ) = minj=1,2,...,p {(cT − uT A)ˆj − u0 }. Ou ainda
¯
x
val(SP ) = min{(cT − uT A)x − u0 |x ∈ X }, onde
¯
n
X = {x ∈ Z+ | Dx ≤ d}.
Se val(SP ) =
(cT
− uT A)¯ − u0
¯
x
< 0, a coluna
A¯
x
1
,
entrará na nova base associada ao custo cT x.
¯
¯
Caso contrário B é uma base ótima de (RP LI).
PSR, Rio de Janeiro, 09/03/2010 – p. 20/2
21. Ramificação: particionamento 1
Consideremos um caso mais particular, em que o problema
mestre é dado pelo seguinte problema de particionamento:
(P P ) minimizar
cj λ j
j∈J
sujeito a :
aj λj = 1
j∈J
λj ∈ {0, 1},
para todo j ∈ J.
onde J = {1, 2, ..., p}, aj ∈ K = {a1 , a2 , ..., ap } ∈ {0, 1}m ,
um conjunto finito, e uma função f : K → tal que cj = f (aj )
são dados. Denotemos por (P P ) a relaxação linear do
problema de particionamento (P P ).
PSR, Rio de Janeiro, 09/03/2010 – p. 21/2
22. Ramificação: particionamento 2
Quando a solução ótima do problema mestre linear (P P )
associado a determinado nó da árvore de
branch-and-bound não for inteira, na estratégia de
branching convencional, deveremos escolher alguma
variável com valor fracionário, digamos λk ∈ {0, 1}, para
procedermos a ramificação. Os novos problemas lineares
serão obtidos a partir da imposição das restrições λk = 1,
no 1-branch (Ryan e Foster, 1981), e λk = 0, no 0-branch.
PROPRIEDADE (Ryan e Foster, 1981): Se λ for uma solução
fracionária do problema (P P ), então existirá ao menos um
par de linhas, digamos r e s, da matriz de restrições A, tal
que
0 <
λq < 1.
q: arq =asq =1
PSR, Rio de Janeiro, 09/03/2010 – p. 22/2
23. Ramificação: particionamento 3
Assim, após identificarmos as linhas r e s nas condições
dadas pela propriedade de Ryan e Foster (1981),
poderemos descartar a solução fracionária corrente
através de uma estratégia de separação válida fornecida
pela adição das seguintes restrições de branching:
λq = 1
(1)
q: arq =asq =1
para um dos nós filhos (o da esquerda, por exemplo), no
1-branch, e
λq = 0
(2)
q: arq =asq =1
para o outro nó (o da direita), no 0-branch.
PSR, Rio de Janeiro, 09/03/2010 – p. 23/2
24. Ramificação: particionamento 4
A restrição do 1-branch faz com que as linhas r e s
sejam cobertas pela mesma coluna e a do 0-branch
necessariamente por colunas distintas. Em geral, essa
estratégia de branching é compatível com os algoritmos de
geração de colunas. Ao procedermos com o 0-branch,
devemos eliminar toda coluna q com arq = asq = 1 do
problema mestre restrito corrente e proibir que alguma tal
coluna seja gerada. Para isto, toda nova coluna gerada
deverá satisfazer a restrição arq + asq ≤ 1 . Por outro lado,
no 1-branch devemos tomar, exclusivamente, colunas que
cobrem as linhas r e s ao mesmo tempo; ou seja,
devemos excluir todas as colunas do problema mestre que
cobrem apenas uma dessas linhas. Assim, eliminamos
todas as colunas com arq = asq no problema mestre
restrito corrente e exigimos que todas as novas colunas
geradas satisfaçam arq = asq .
PSR, Rio de Janeiro, 09/03/2010 – p. 24/2