Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira 233 Capítulo 6 Programação Linear Inteira 1. Introdução A programação linear inteira é uma eficiente ferramenta na modelagem e solução de um grande número de problemas. São eles provenientes das mais diversas áreas, tais como recolhimento de lixo, planejamento de sistemas de telecomunicações, cortes em uma, duas ou três dimensões, etc. Os problemas de programação linear inteiro de grande porte são freqüentemente impossíveis de serem resolvidos diretamente através de softwares comerciais. Em tais casos a relaxação lagrangeana, combinada com a otimização por subgradientes é muitas vezes usada para achar cotas inferiores para o valor ótimo da função objetivo. Estas cotas podem ser usadas, por exemplo, no método de Branch-and-Bound [Salkin and Mathur. 89], ou apenas para medir a qualidade das soluções viáveis. Tais propriedades encontram-se atualmente incorporadas em softwares comerciais como [CPLEX3.0 97], [OSL1.2 90], conforme descrito em MINTO [Nemhauser et alii. 94]. Outras estratégias também são consideradas: obtenção de cotas superiores, uma maior eficiência nas rotinas sobre a geração de cortes além do uso do processamento paralelo, veja, por exemplo [Nemhauser. 94] para o primeiro e [Lee. 94] para o último. A relaxação lagrangeana foi utilizada por [Held and Karp. 70] e [Held and Karp. 71] com seus trabalhos sobre problemas do caixeiro viajante; os métodos de Branch-and-Bound e enumeração implícita tiveram considerável ganho em [Geoffrion 74] com a relaxação lagrangeana; em [Fisher. 81], encontramos várias questões norteadoras sobre a relaxação lagrangeana nos problemas lineares inteiros, dentre estas como calcular os multiplicadores de Lagrange, de que maneira escolher dentre as várias relaxações do problema e como obter soluções viáveis para o problema primal. Recentes técnicas para resolver o dual lagrangeano relaxado de problemas de otimização combinatória, em um tempo polinomial, utilizando como subrotina o algoritmo dos Elipsóides 77[Khachian. 79] ou o
Material sobre Programação Linear inteira aplicada à pesquisa operacional
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
233
Capítulo 6
Programação Linear Inteira
1. Introdução
A programação linear inteira é uma eficiente ferramenta na modelagem e
solução de um grande número de problemas. São eles provenientes das mais
diversas áreas, tais como recolhimento de lixo, planejame nto de sistemas de
telecomunicações, cortes em uma, duas ou três dimensões, etc.
Os problemas de programação linear inteiro de grande porte são
freqüentemente impossíveis de serem resolvidos diretamente através de softwares
comerciais. Em tais casos a re laxação lagrangeana, combinada com a otimização
por subgradientes é muitas vezes usada para achar cotas inferiores para o valor
ótimo da função objetivo. Estas cotas podem ser usadas, por exemplo, no método
de Branch-and- Bound [Salkin and Mathur. 89], ou apenas para medir a qualidade
das soluções viáveis. Tais propriedades encontram- se atualmente incorporadas em
softwares comerciais como [CPLEX3.0 97], [OSL1.2 90], conforme descrito em
MINTO [Nemhauser et alii . 94]. Outras estratégias também são consideradas:
obtenção de cotas superiores, uma maior eficiência nas rotinas sobre a geração de
cortes além do uso do processamento paralelo, veja, por exemplo [Nemhauser. 94]
para o primeiro e [Lee. 94] para o último.
A relaxação lagrangeana foi utilizada por [Held and Karp. 70] e [Held and
Karp. 71] com seus trabalhos sobre problemas do caixeiro viajante; os métodos de
Branch-and- Bound e enumeração implícita tiveram considerável ganho em
[Geoffrion 74] com a relaxação lagrangeana; em [Fisher. 81], encontramos várias
questões norteadoras sobre a relaxação lagrangeana nos problemas lineares
inteiros, dentre estas como calcular os multiplicadores de Lagrange, de que
maneira escolher dentre as várias relaxações do problema e como obter soluções
viáveis para o proble ma primal. Recentes técnicas para resolver o dual lagrangeano
relaxado de problemas de otimização combinatória, em um tempo polinomial,
utilizando como subrotina o algoritmo dos Elipsóides 77[Khachian. 79] ou o
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
234
algoritmo de Vaidya [Vaidya. 90], tem sido ap resentadas desde 1994, com
[Bertsimas and Orlin. 94].
Outras metodologias de decomposição usam heurísticas lagrangeanas,
combinando a solução do dual lagrangeano, através do método de subgradientes,
juntamente com soluções primais viáveis heurísticas. Estas técnicas foram
aplicadas a problemas de fluxo em redes “multicommodity” em [Holmberg. 96a],
[Holmberg and Yuan. 96b], [Holmberg and Hellstrand. 96c], a problemas de
localização capacitada em [Holmberg and Ling. 97b] e [Holmberg et alii . 97].
2 . Conceitos Preliminares
O objetivo desta seção é deixar claro alguns termos que empregaremos no
decorrer deste capítulo. Os conceitos a serem abordados serão em Teoria Poliedral.
3. Definições em Teoria Poliedral Definição 2.1 Um conjunto de pontos x1 , x2 ,.. . ,xk ∈Rn é dito linearmente
independente se a solução única para ∑ki=1 λ i xi = 0 é λ i = 0 para i = 1,2,. . . ,k.
Definição 2.2 Um conjunto de pontos x1 , x2 , ..., xk ∈ Rn é dito ser afim
independente se a solução única para ∑ki=1 λ i xi = 0 e ∑k
i=1 λ i = 0 é λ i = 0 para i =
1,2,...,k.
Definição 2.3 Seja S = {x1 , x2 , . . . ,xn} um conjunto de pontos em Rn. A envoltória
convexa de S, denotada por conv(S), é o conjunto de pontos dados por conv(S) =
{∑ki=1 λ i x i : ∑k
i=1 λ i = 1, xi ∈ S, λ i ∈ R e λ i ≥ 0 ∀ i = 1, 2, 3, . . . ,n}.
Definição 2.4 Um poliedro P ⊆ Rn é um conjunto de pontos que satisfaz um
número finito de desigualdades lineares, isto é, P = {x ∈ Rn : Ax ≤ b}.
Definição 2.5 Dado um Poliedro P = { x ∈ Rn : Ax ≤ b}, o fecho inteiro de P
consiste na envoltória convexa dos vetores inteiros de P, isto é, P= conv({x ∈ P: x
é inteiro}).
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
235
Definição 2.6 Um poliedro P ⊆ Rn é dito limitado se existem vetores l e u ∈ Rn ,
tal que, l ≤ x ≤ u para todo x ∈ P. Um poliedro limitado é denominado um polítipo.
Definição 2.7 A desigualdade π x ≤ π 0 é denominada uma desigualdade válida para
o poliedro P ⊆ Rn se ela é satisfeita por todos os pontos de P.
Definição 2.8 Um conjunto ƒ ⊆ P = { x: Ax ≤ b} é uma face de P, se e somente
se, para algum subsistema A0 x ≤ b0 de Ax ≤ b nós temos ƒ = {x ∈ P : A0 x = b0}.
Uma fase é dita ser própria se ƒ ≠ ∅ e ƒ ≠ P.
Definição 2.9 Seja ƒ uma face própria de um poliedro P. Então ƒ é uma faceta, se e
somente se, dim( ƒ) = dim(P) – 1.
4. Problemas de Programação Linear Inteira
Definição 3.1: Um problema de programação linear da forma Máx{c t x; Ax ≤ b, x ≥ 0,
x inteiro} com x, c ∈Rn , b∈Rm e A∈Rm x n é denominado problema de programação
linear inteira.
Exemplo 1: Seja o seguinte problema de programação Linear Inteira, conforme
ilustrado na figura 1.
Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x i ≥ 0, i = 1, 2; inteiros
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
a) Máx{c t x; Ax ≤ b, x ≥ 0} ≥ Máx{c t x; Ax ≤ b, x ≥ 0, x inteiro}
b) Mín{c t x; Ax ≤ b, x ≥ 0} ≤ mín{c t x; Ax ≤ b, x ≥ 0, x inteiro}
c) O arredondamento da solução de um Problema de Programação Linear não
implica na solução do Problema de Programação Linear Inteira
Exemplo:
Mín z = x1
s .a 15x1 - 20x2 ≤ 4
21x1 - 20x2 ≥ 10
x i ≥ 0, i =1, 2 int eiros
d) É falso afirmar: Se um modelo de Programação Linear Inteira tem solução então
o problema linear correspondente também tem solução ótima.
Exemplo:
Máx z = x1
s .a x1 - π x2 = 0 (π pi)
xi ≥ 0, i =1, 2 inteiros
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
237
Existem diversas técnicas desenvolvidas para a busca da solução inteira dos
problemas de programação linear, das quais podemos citar:
°Técnicas de Enumeração:
-Separação e avaliação progressiva ou “Branch- and-Bound” (B&B);
-Enumeração implícita;
-Restrições “Surrogate”.
° Técnicas de Cortes:
-Cortes Inteiros (primais e duais);
-Cortes Combinatórios;
-Cortes de interseção;
-Método de decomposição de Benders.
° Técnicas Híbridas:
-“Branch-and-Cut”;
° Teoria de Grupo.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
238
5. O Conceito de Branch-and-Bound
O espaço solução de um problema de programação inteiro geral pode ser
assumido limitado. Podemos assumir que o número de pontos inteiros é limitado e
em assim sendo investigaremos um número finito de pontos. O caminho mais
simples para resolver o problema inteiro é enumerar todos os pontos, descartando
as inviabilidades e sempre mantendo a solução viável correspondente ao melhor
valor ótimo. Quando a enumeração esta completa encontra a solução ótima(se
existir), associado ao melhor valor da função objetivo.
Se a solução do problema contínuo é inteira, então esta corresponde a
solução do problema inteiro. Caso contrário, a técnica de Branch- and- Bound é
aplicada implementando duas operações básicas:
(1) Ramificação → Particionamos o espaço das soluções continuas sobre
subproblemas os quais são também continuo. O propósito deste partionamento é
eliminar do espaço continuo soluções não viáveis do problema inteiro.
(2) Limitação → Assumindo que o problema original é do tipo maximização, o
valor da função objetivo para cada subproblema criado por um ramo gera um limite
superior sobre o valor da função objetivo.
O método denominado de “Branch- and- Bound” (B&B) baseia- se na idéia de
desenvolver uma enumeração “inteligente” dos pontos candidatos à solução ótima
inteira de um problema. O termo branch refere-se ao fato de que o método efetua
partições no espaço das soluções. O termo bound ressalta que a prova da
otimalidade da solução utiliza-se de limites calculados ao longo da enumeração.
Definido:
{ }( ) | , ,P cx Ax b x x Z= = ≥ ∈ +Maximizar 0
e
{ }( ) | , ,P cx Ax b x x R= = ≥ ∈ +Maximizar 0
Definindo ainda V P∗ ( ) eV P∗ ( ) os valores das funções objetivo no ótimo de ( )P e ( )P respectivamente temos que:
V P V P∗ ∗≤( ) ( )
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
239
Considerando ainda qualquer solução viável ~x de (P), então:
V x V P∗ ∗≤(~) ( ) e dessa forma V P∗ ( )é um limite superior para (P), e qualquer de suas soluções viáveis. Se x é a solução ótima de ( )P tal que x j é não inteiro teremos: x xj j≥ + 1ou x xj j≤ (1)
em toda a solução viável de (P). Dessa forma o problema (P) pode ser dividido em
dois novos problemas (P1 ) e (P2 ) em que a envoltória convexa C de (P1 ) ∪ (P2 )
ou Conv((P1 ) ∪ (P2 )) é estritamente contida na envoltória de (P) ou Conv ((P1) ∪
(P2) )⊂Conv ((P)).
Vamos exemplificar o processo de divisão da envoltória convexa de (P) com
o seguinte exemplo:
+∈
≤+≤+
+=
Zx,x
45x9x56xx
:asujeitox8x5zMaximizar
21
21
21
21
Que pode ser representado graficamente na figura 2. A solução ótima
contínua do problema é encontrada em: x x1 294
154
= =; levando a z = 4114
.
Desenvolvendo a idéia de separação da envoltória convexa em relação a variável x2 podemos organizar a seguinte equação disjuntiva:
x ou x2 2154
1 4154
3≥
+ ≥ ≤
≤
A equação a equação anterior produz duas restrições disjuntivas que, quando
acrescidas ao problema original são capazes de criar dois novos problemas que não
mais possuem a solução ótima contínua x em sua envoltória convexa.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
240
x2
x1O
z=5x1 +8x2
5x1 + 9x2 =45
x1 + x2 =6
Soluções Inteiras
AB
C
Figura 2: Solução gráfica do exemplo
A figura 3 mostra o efeito da aplicação da equação disjuntiva gerada em
relação a variável x2 , no problema exemplo.
x2
x1O
A
B
C
(P2 )
(P1 )
Figura 3: Resultado do “branch” (divisão)
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
241
Com a consideração da disjunção o problema original será reduzido então a
dois novos problemas, a saber:
+∈
≤
≤
=
Zx
xx
bAx
cxzP
i
ii0
1
:aSujeitoMaximizar)(
+∈
+≥
≤
=
Zx
xx
bAx
cxzP
i
ii 1
:a SujeitoMaximizar)(
0
2
A essência do algoritmo de Bra nch-and-Bound é a seguinte:
1)Resolver a relaxação linear do problema. Se a solução é inteira, então se obtêm a
solução ótima. Caso contrário, cria-se dois novos subproblemas ramificando-se
uma variável fracionária.
2) Um subproblema não é ramificado qua ndo:
Todas as variáveis na solução são inteiras,
A solução do subproblema é inviável,
3) Escolha um subproblema onde há variáveis fracionárias e ramifique sobre uma
delas. Repita até que não tenhamos variáveis fracionárias.
A estratégia de separação cria novos e mais restritos problemas que,
normalmente, serão de mais fácil solução. No exemplo o problema (P) é separado
em dois problemas (P1) e (P2 ). A estratégia de separação pode ser reaplicada a
esses problemas em função, por exemplo, da variável x1 . Vamos enumerar através
de uma árvore as possibilidades de solução dos problemas que serão gerados pela
divisão de (P). Na árvore da figura 4 cada nível representa uma separação ou
“branch” em relação a uma variável.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
242
P0x1 =2,25 x2 =3,75 z=41,25
P2
x1 =1,8 x2 =4,0 z=41
P1x1 =3,0 x2 =3,0 z=39
P3
Inviável P4
x1 =1,0 x2 =4,25 z=40,4
P5 x1 =0 x2 =5 z=40
P6
x1 =1,0 x2 =4,0 z=37
x2 4,0≥ x 2≤3,0
x1 2,0≥ x 1≤1,0
x2 ≥5,0 x 1≤4,0
Figura 4: Árvore branch do exemplo
Para entendermos o efeito do “bound” suponhamos que tenhamos escolhido a
seqüência de “branchs” da figura 5, deixando de solucionar os problemas
marcados:
P0x1 =2,25 x2 =3,75 z=41,25
P2x1 =1,8 x2 =4,0 z=41
P1 Aguarda
P3 Aguarda
P4x1 =1,0 x2 =4,25 z=40,4
P5 x1 =0 x2 =5 z=40
P6 Aguarda
x2 4,0≥ x 2≤3,0
x1 2,0≥ x 1≤1,0
x2 ≥5,0 x 1≤4,0
Figura 5: O efeito de redução do “bound” (limite)
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
243
As soluções cont ínuas são um limite superior para o valor de z0∗ , sob as
condições estabelecidas nos vértices da árvore, enquanto que as soluções inteiras
geram um limite inferior. Como (P4 ), um problema com solução contínua possui
z = 40 4, e (P5 ), um problema com solução inteira, possui z = 40 , o problema (P6 )
não precisa mais ser solucionado, uma vez que entre 40,4 e 40 não existe a
possibilidade de uma outra solução inteira melhor que 40 (40≤ z0∗ ≤40,4). O
problema (P2 ) com z=41 pode dar origem, contudo, ainda a um problema com uma
solução inteira de valor 41 (40 ≤ z0∗ ≤41), o que obriga ao desenvolvimento de (P3 ) .
De modo semelhante (P0 ) com z =41,25 pode dar origem a um problema com a
solução também de valor 41 (40 ≤ z0∗ ≤ 41,25), o que obriga ao desenvolvimento de
(P1) .
A redução pelo limite inferior (bound) de apenas um vértice da árvore de
enumeração do exemplo pode parecer pequena, mas devemos lembrar que esse
problema é pequeno. Em muitos casos reais o poder de simplificação do limite
inferior (ou superior no problema de minimização) se mostra dramático, sendo
extremamente útil no processo de solução.
5.2. O Método de Branch-and-Bound e sua Forma Geral
Podemos observar 4 fases do método:
a) Fase de Seleção
b) Fase de Ramificação
c) Fase de Limitação
d) Fase de Aprofundamento
Fase de Seleção
a) Um subproblema que não esta ainda particionado (veja as fases(b) e (d)), é
selecionado para continuar o procedimento. Existem três possibilidades:
a1) Backtracking - A ramificação ocorre sobre o nó criado mais recentemente da
árvore de Branch- and- Bound; se o nó é aprofundado (veja (d)) então novos
procedimentos de Backtrakings são desenvolvidos. Backtraking é chamado de Busca
LIFO( Last- in- first-out).
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
244
a1 2) A busca FIFO(First- in- first-out) procede a busca sobre um nó não ramificado.
a2) Jumptracking - Aplicamos a ramificação sobre o ramo com o melhor valor
finito da função objetivo. O Jumptracking é chamado de b usca BF(Best- first).
Em geral, FIFO e jumptracking apresentam menos ramos do que o Backtracking.
Enterrando, mais requerem armazenagem, em termos computacionais do que os
outros procedimentos.
Fase de Ramificação
b) A solução de um subproblema, representado por um nó k da árvore de Branch-and-
Bound, é particionada em subconjuntos mutuamente exclusivos; cada um destes
subconjuntos é representado por um nó conectado por arco, denominado nó k. Se duas
ou mais variáveis não são inteiras então aplicamos as seguintes estratégias de
ramificação:
b1) Escolha da variável não inteira pelo maior interesse econômico.
b2) Muitos códigos computacionais, escolhem a ramificação sobre a variável não
inteira com o menor índice.
Fase de Limitação
No caso de um modelo de má ximo, limites superiores sobre a solução ótima
de um determinado subproblema são determinados. Por exemplo, a relaxação das
variáveis inteiras, determina um problema com variáveis contínuas onde sua
solução fornece um limite superior sobre a solução ótima.
Fase de Aprofundamento
Os subproblemas são excluídos, quando a solução inteira é encontrada ou
solução inviável.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
245
5.3. Algoritmo de Branch-and-Bound
Passo 1: Relaxe todas as restrições de integralidade no problema linear inteiro
(PLI) e resolva o pr oblema linear(PL). Se a solução ótima do problema linear
relaxado satisfaz as condições de integralidade, pare, esta é a solução inteira
ótima.
Passo 2: Se o problema resolvido é de maximização seja zbest =−∞ . Se o problema
resolvido é de minimização seja zbest =∞ . (Em geral, zbest representa o valor da
função objetiva da melhor solução inteira conhecida).
Passo 3: Seja xj representando uma variável que viola a condição de integralidade na
solução do problema que foi por último resolvido e seja b j representando seu valor não
inteiro. Seja INT(b j) representando o maior inteiro que é menor do que bj. Criar dois
novos problemas candidatos: um por anexar a restrição xj ≤ INT(bj) ao (PL) mais
recente resolvido e o outro por anexar a restrição xj ≥ INT(bj) + 1 também ao (PL)
mais recente resolvido. Colocar ambos destes novos (PL) em uma lista de problemas
candidatos a serem resolvidos.
Passo 4: Se a lista de problemas candidatos é vazio, vá para o passo 9. Caso
contrário, remova um problema candidato da lista, relaxe qualquer condição de
integralidade no problema e resolva ele.
Passo 5: Se não existe solução para o corrente problema candidato( isto é, ele é
inviável), volte ao passo 4. Caso contrário, seja Zcp denotando o valor ótimo da
função objetivo para o corrente problema candidato.
Passo 6: Se Zcp não é melhor do que Zbes t (para o problema de maximização Zcp ≤
Zbest ou para um problema de minimização Zcp ≥ Zbest ) vá para o passo 4.
Passo 7: Se a solução do corrente problema candidato não satisfaz as condições
originais de integralidade, vá para o passo 3.
Passo 8: Se a solução do corrente problema candidato não satisfaz as condições
originais de integralidade, uma melhor solução inteira foi encontrada. Assim sendo,
seja Zcp = Zbest e mantenha a solução obtida para este problema candidato. Então
retorne para o passo 4.
Passo 9: Pare. A solução ótima foi encontrada e tem um valor para a função
objetiva dada pelo valor corrente de Zbest.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
246
5.3. Exercícios Resolvidos
Exemplo 1: Consideremos a seguinte aplicação:
A fabrica de moveis “Pedro Gabriel” produz mesas e cadeiras. Uma mesa requer 1
hora de trabalho e 9dm2 de madeira enquanto que a cadeira requer 1 hora de
trabalho e 5dm2 de madeira. Tem- se disponível 6 horas de trabalho e 45dm2 de
madeira. O lucro da produção de uma mesa é de R$ 8 e uma cadeira é de R$ 5.
Formule e resolva o problema linear inteiro de modo a maximizar o lucro.
Solução: Sejam x1 = o número de mesas e x2 o número de cadeiras, variáveis
inteiras.
Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x i ≥ 0, i = 1, 2; inteiros
Relaxando- se as variáveis de integralidade tem- se o seguinte problema linear (PL)
Subproblema I Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x i ≥ 0, i = 1, 2
cuja solução é z x= = =1654
154
941; e x2 onde o valor de z é um limite superior para
o custo ótimo. Escolhendo-se aleatoriamente x1 a variável a ser ramificada tem-se
x1 ≤ 3 e x1 ≥ 4.
Subproblema II = S ubproblema I + restrição x1 ≥ 4
Subproblema II Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 ≥ 4 xi ≥ 0, i = 1, 2
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
247
Subproblema III = S ubproblema I + restrição x1 ≤ 3
Subproblema III Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 ≤ 3
xi ≥ 0, i = 1, 2
Do subproblema II tem- se como solução, z x= = =41 4951; e x2 e subproblema III
tem-se z x= = =39 31 2; x . Da variável x2 tem-se x2 ≤ 1 e x2 ≥ 2 do subproblema II
Subproblema IV Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 ≥ 4
x2 ≥ 2
xi ≥ 0, i = 1, 2
Subproblema V Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 ≥ 4
x2 ≤ 1
xi ≥ 0, i = 1, 2
subproblema IV tem solução inviável, enquanto que o subproblema V tem solução
ótima z x= = =3659
409
11; e x 2 . Considerando-se a solução x1 do subproblema V
tem-se os subproblemas VI e VII com x1 ≤ 4 e x1 ≥ 5 .
Subproblema VI Máx z = 8x1 + 5x2
s .a: x1 + x2 ≤ 6
9x1 + 5x2 ≤ 45
x1 ≥ 4
x2 ≤ 1
x1 ≥ 5
x i ≥ 0, i = 1, 2
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
248
Subproblema VII Máx z = 8x1 + 5x2
s.a: x1 + x2 ≤ 6
x1 + 5x2 ≤ 45
x1 ≥ 4
x2 ≤ 1
x1 ≤ 4
x i ≥ 0, i = 1, 2
A solução do problema VI é z x= = =40 5 01; e x2 , enquanto que o subproblema
VII tem solução z x= = =37 4 11; e x2 . Por outro lado, o subproblema III tem solução
z x= = =39 3 31; e x2 .
Árvore do Algoritmo de Branch-and-Bound Aplicado ao Problema
Logo a solução ótima é z = 40 5 0; ; x x1 2= = .
Subproblema I
z = 1654
154
94
; ; x x1 2= =
Subproblema II
z = 41 495
; ; x x1 2= =
Subproblema IV Solução Inviável
Subproblema V
z = 3659
409
1; ; x x1 2= =
Subproblema III z = 39 3 3; ; x x1 2= =
Candidato a solução
Subproblema VI z = 40 5 0; ; x x1 2= = Candidato a solução
Subproblema VII z = 37 4 1; ; x x1 2= = Candidato a solução
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
249
Exemplo 2: Seja o PLI abaixo,
mín z = 10x1 + 9x2
s .a x1 ≤ 8
x2 ≤ 10
5x1 + 3x2 ≥ 45
x i ≥ 0, i = 1, 2; inteiros
Denominando por PL-1 o problema linear, sua solução ótima tem valores
ótimos Z1 = 95; x1 = 8 e x2 = 53
.
Esta solução não satisfaz à condição das variáve is serem inteiras, mas
permite ilustrar os aspectos fundamentais da técnica de Branch- and-Bound. Por
outro lado
Z1 = 95 é um limite inferior para a função objetivo, ou seja, ao se forçar soluções
inteiras, o valor de Z1 não pode se reduzir além de Z1 = 95 (delimitação inferior).
Por outro lado, o valor x2 = 53
123
= sugere dividir (ramificar) o problema em dois
outros, tendo em vista que x2 deve ser um número inteiro, a saber: x2 ≤ 1 e x2 ≥ 2.
A incorporação das restrições cria os problemas PL-2 e PL- 3, respectivamente:
mín z = 10x1 + 9x2 mín z = 10x1 + 9x2
s .a x1 ≤ 8 s .a x1 ≤ 8
x2 ≤ 10 x2 ≤ 10
5x1 + 3x2 ≥ 45 5x1 +3x2 ≥ 45
x2 ≤ 1 x2 ≥ 2
xi ≥ 0, i = 1, 2; inteiros xi ≥ 0, i = 1, 2; inteiros
A resolução do subproblemas PL-2 e PL-3 graficamente ou pelo método simplex
tem soluções ótimas PL-2: inviável e PL-3: Z3 = 96; x1395
745
2= = = e x2
A inviabilidade de PL-2 mostra que não há mais o que explorar nessa
ramificação; ela esta concluída. A resolução de PL-3 mostra que Z3 = 96 é o novo
limite inferior para o problema proposto, em face da inviabilidade de PL-2. Como
x1= 745
o problema deve ser ramificado em dois outros, com restrições
correspondentes x1 ≤ 7 e x1 ≥ 8. Tais problemas são denominados PL-4 e PL- 5,
respectivamente:
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
250
mín z = 10x1 + 9x2 mín z = 10x1 + 9x2
s .a x1 ≤ 8 s .a x1 ≤ 8
x2 ≤ 10 x2 ≤ 10
5x1 + 3x2 ≥ 45 5x1 +3x2 ≥ 45
x2 ≤ 1 x2 ≥ 2
x1 ≤ 7 x1 ≥ 8
xi ≥ 0, i = 1, 2; inteiros xi ≥ 0, i = 1, 2; inteiros
As soluções ótimas dos problemas (PL-4) e (PL-5) podem ser obtidas
facilmente a partir da solução ótima de PL-3, de maneira a reduzir o esforço
computacional. As soluções ótimas são:
PL-4: Z = 100; x1 = 7 e x2 = 107
e PL-5: Z = 98; x1 = 8 e x2 = 2
PL-1
Z1 = 95; x1 = 8; x2 = 123
PL-2; Inviável. PL-3
Z3 = 96; x1 =745
; x2 = 2
PL-4
Z4 = 100; x1 =7; x2 = 103
PL-5 Z3 = 98; x1 =8; x2 = 2
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
251
Exemplo 3: Consideremos o seguinte problema de programação linear inteira
Máx z = 2x1 + x2
s .a. 5x1 + 2x2 ≤ 8
x1 + x2 ≤ 3
x1 , x2 ≥ 0; x1 inteiro
De modo similar ao problema de programação inteira pura, aplica-se o
algoritmo de Branch- and- Bound ao problema de programação linear mista inteira.
Assim sendo, relaxando-se a condição de integralidade da variável x1 e
resolvendo-se o problema:
Máx z = 2x1 + x2
s .a. 5x1 + 2x2 ≤ 8
x1 + x2 ≤ 3
x1 , x2 ≥ 0
tem-se como solução ótima z = = =113
23
73
, , x x1 2 . Desde que a variável x2 pode ser
fracionária, nos não ramificaremos x2 . Então ramificaremos a variável x1 e a
partir desta tem-se os se guintes subproblemas II e III.
Subproblema II = S ubproblema I + restrição x1 ≥ 1
Máx z = 2x1 + 5x2
s .a: 5x1 + 2x2 ≤ 8
x1 + x2 ≤ 3
x1 ≥ 1
x1 , x2 ≥ 0
Subproblema III = S ubproblema I + restrição x1 ≤ 0
Máx z = 2x1 + x2
s .a: 5x1 + 2x2 ≤ 6
x1 + x2 ≤ 45
x1 ≤ 0
x1 , x2 ≥ 0
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
252
Do subproblema II tem-se como solução, z = = =3 0 31; x e x2 e o subproblema III
tem como solução z = = =72
1321; x e x2 o qual é solução ótima do problema linear
misto inteiro.
Subproblema I
z = = =113
23
73
, , x x1 2
Subproblema II z = = =3 0 3, , x x1 2 Candidato a solução
Subproblema III
z = = =72
132
, , x x1 2
Candidato a solução
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
253
6. Técnicas de Ramificação do Branch-and-Bound
Na maioria das ocasiões as técnicas de solução são especializadas para os
inúmeros tipos de problemas de programação inteira, desenvolvendo- se abordagens
e algoritmos específicos para cada situação. Apresentaremos agora duas técnicas
exatas muitas empregadas na solução de problemas de PLI. Um dos pontos
fundamentais para o sucesso do B&B é a qualidade do limite ger ado pela solução
inteira. Em várias situações esses limites podem ser alcançados através de
procedimentos heurísticos. A qualidade do limite alcançado normalmente depende,
para cada problema, da estratégia de desdobramento da árvore de busca. Existem
basic amente duas grandes estratégias de divisão ou “branch”.
O B&b é uma técnica de ampla aplicação. A idéia geral é sujeita a inúmeras
adaptações e estratégias de implementação. Basicamente os aspectos envolvidos
são:
° Técnicas de desenvolvimento da árvore de enumeração:
-Busca em profundidade;
-Busca em largura;
-Variantes híbridas.
A figura 6 apresenta o aspecto das árvores desenvolvidas pela busca em
profundidade e pela busca em largura.
P0
P2P1
P4P3
P6P5
P0
P4P3
P1
P6P5
P2
Busca em Profundidade Busca em Largura Figura 6: Estratégias de divisão
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
254
° Técnicas de formação da á rvore (escolha da variável de divisão):
-Variante de Dankin (1960);
-Variante de Lang e Doing (1965);
-Variante de Spielberg (1968);
-Método das penalidades (1965);
-Método de Taha (1971)
-Estratégias Dinâmicas (1976);
-Outras variantes.
° Técnicas complementares para obtenção dos limites
-Relaxação Lagrangeana;
-Algoritmos heurísticos (com uso de meta- heurísticas);
-Cortes.
ü Variante de Dank
Esse autor propõe que a variável a ser escolhida para a divisão em um certo
nível da árvore seja a que possuir o maior resíduo em relação a solução inteira, ou
seja, considerando que ~x j seja a variável que escolheremos para a divisão proposta
pela equação (1), então:
( ) ( ){ }~x x x e x xj j j j j= − −Maximo (2)
Se a solução cont ínua do nó a ser expandido se apresenta como na figura 7
(a), então, pela proposta de Dank o nó ~x j será x2 , uma vez que possui um resíduo
igual a 0,75, maior que o de x1 .
Pnx1 =7,25 x2 =11,75
x1 ou x2 ?
Pnx1 =7,25 x2 =11,75
res (x1 ) = 0,25res ( x2 ) = 0,75
(a) (b)
Figura 7: Estratégias de divisão de Dank
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
255
ü Variante de Land e Doig
Essa abordagem sugere que a árvore de enumeração seja expandida em vários valores
simultâneos para a variável de divisão, como mostra a figura 8.
Pnx1 =7,25 x2 =11,75
(b)
x2
x1
x2 12≥
x 2 = 11
x 2 ≤ 10
(a) Figura 8: Estratégias de divisão de Land e Doing
ü Variante de Spielberg
Desenvolve o nó com maior valor de z∗ e o mais recentemente calculado,
usando o critério de Land e Doig para aumentar a retirada de espaço contínuo no
entorno do nó pesquisado. Trata-se de uma busca em profundidad e associada ao
critério de Land e Doig.
ü Método das Penalidades
Essa estratégia pode ser descrita nos seguintes passos:
wDetermina uma estimativa do decréscimo da função objetivo quando
obrigamos as variáveis a assumir valores inteiros;
wEscolhe o nó na lista dos nós em aberto com a menor estimativa de
decréscimo (utiliza um pivoteamento associado a variável ~x j );
wAproveita as reduções possíveis quando a estimativa de decréscimo
ultrapassa o limite inferior corrente.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
256
ü Método de Taha
A abordagem objetiva inspecionar os 2n vértices do hipercubo unitário
contendo a solução ótima do sub-problema de PL. Considerando o problema P0
abaixo descrito a estratégia de Taha é buscar a solução de um programa linear em
função dos vértices do hipercubo unitário vizinho a 0x .
0
asujeito
Maximizar)( 0
≥
∈≤
=
∑
∑
∈
∈
j
iNj
jij
Njjj
x
Mibxa
xczP
Definindo a vizinhança inteira de x0 por ~ ( , ,..., )x x x xn0
01
02 0= e fazendo
x x yj j j= +0 , para y j ∈{ , }0 1 , podemos constit uir com P0 o seguinte programa
linear:
}1,0{
,
asujeito
Maximizar)(
0
00
∈
∈−≤
+=
∑∑
∑∑
∈∈
∈
j
Njjiji
Njjij
jjNj
jj
y
Mixabya
xcyczQ
Podemos exemplificar a formação do problema auxiliar (Q 0 ) com o seguinte
problema:
0,
122
asujeitoMaximizar )(
21
2
21
21
≥
≤≤+
+=
xx
xxx
xxzPe
Cujo hipercubo unitário do problema está representado na figura 9.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
257
x2
x1O2x1 + x2 =2
x2 =1
Hipercubo2
1
(1/2;1)
Figura 9: Hipercubo no entorno de (1/2; 1) Substituindo os valores x x x yj j j
0 01 2 1= = +( / ; ); em ( )Pe t e m o s :
}1,0{,
)10(1)10(22
asujeito1Maximizar)(
21
2
21
210
∈
+−≤+−≤+
++=
yy
yyy
yyzQ
Que solucionado nos leva a y e y1 20 0∗ ∗= = . Finalmente podemos calcular o
vértice inteiro ótimo: x x1 21 2 0 1 0= + = +/ ; , ou seja: x ∗ = ( , )01
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
258
7. Soluções Heurísticas para os Problemas de Programação Linear Inteira Enquanto os problemas lineares contínuos possuem no Simplex um algoritmo
muito eficiente para a solução exata, os problemas lineares discretos, salvo alguns
casos particulares, normalmente carecem da mesma sorte. O estudo de Garey e
Johnson (ver Garey e Johnson (1979) ) é um marco para o entendimento dos
obstáculos que se interpõem entre uma possível solução teórica para um problema
de programação discreta e sua implementação prática através dos instrumentos
computacionais da atualidade. O cerne da dificuldade da abordagem exata dos
problemas denominados “NP-Árduos”, que, por sinal, representam uma grande
parte dos problemas de PLI realmente interessantes, está na explosão combinatória
dos métodos enumerativos. É fácil perceber que uma árvore de B&B pode envolver
um número da ordem de 2n nós, onde n representa a altura (distância entre o nó raiz
e o nó mais extremo, também denominado folha da árvore) da árvore de
enumeração. Para que possamos entender melhor essa dificuldade vamos
solucionar o problema (PAT) que se segue:
Seja n um número ímpar ≥ 3. Considere o seguinte problema da mochila:
(PAT) M áx x1 + . . . . + xn
s .a 2x1 + .... + 2xn ≤ n
xi ∈ {0, 1} para i = 1,. . . ,n
No caso n= 3, tem-se :
Max z = x1 + x2 + x3
s.a. 2x1 + 2x2 + 2x3 ≤ 3
x i ∈ {0, 1}, i = 1,..,3
Como notícia informamos que (PAT) é um modelo que pertence a uma classe
de problemas de programação linear inteira denominada Problemas da Mochila,
que se caracteriza por possuir apenas uma restrição e será estudado a seguir. Se
decidirmos solucionar (P AT) através da utilização de uma estratégia B&B básica a
árvore de enumeração seria a representada na figura 10.
No método de Branch-and- Bound, o número de subproblemas pode ser
exorbitantemente grande. Mostraremos que o número de subproblemas a ser
resolv ido é em geral uma função exponencial do número de variáveis.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
259
A solução deste modelo é tomar n2
= n − 1
2 variáveis de decisão xi iguais a 1 e o restante
n2
+ 1 = n + 1
2 variáveis de decisão xi iguais a 0. O valor ótimo da função objetivo satisfaz z* =
n2
. De qualquer maneira, resolvendo-se este modelo pelo método de Branch-and-Bound, obtêm-
se um tempo computacional exorbitantemente grande, de fato o número de subproblemas resolvidos
é exponencial em n.
Os: Se as soluções de um problema lineares não são inteiras, então exatamente uma das variáveis de
valor não inteiro é ½.
Teorema: O número de subproblemas resolvidos para n arbitrário(impar) é de no mínimo 21
2( )n+
.
A conclusão é que embora, prático, o método de Branch-and-Bound é teoricamente
ineficiente para resolver problemas lineares inteiros.
P0x1 =1 x2 =1/2
x2 1≥x 2 ≤ 0
P6x1 =1/2 x2 =1
P1x1 =1 x3 =1/2
P3x1 =1/2 x3 =1
P2
Inviável P7x2 =1 x3 =1/2
x 3 ≤ 0 x3 1≥
x 1 ≤ 0
P4
Inviável P5
Inviável
x1 1≥
P8
Inviável P9
Inviável
P10 Inviável
x 1 ≤ 0 x1 1≥
x 3 ≤ 0 x3 1≥
Figura 10: Árvore B&B de (PAT)
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
260
Para concluir da inviabilidade de (PAT) foi necessário desenvolver 11 problemas. É fácil
provar que esse algoritmo aplicado a um problema com n variáveis desenvolverá no mínimo cerca
de 21
2n+
nós. Se o problema possuir 201 variáveis (os problemas reais podem possuir da ordem de
milhares ou milhões de variáveis), então a árvore será da ordem de 2100 nós. Um computador capaz
de examinar 1,5 trilhões de nós por segundo dessa árvore levaria cerca de 537 milhões de anos para
esgotar todas as possibilidades possíveis !! Apesar de todo o avanço das técnicas atuais que,
obviamente, fariam melhor que desenvolver a árvore de enumeração completa de (PAT) para
determinar a inviabilidade do problema, ainda permanece a dificuldade imposta pela explosão
combinatória desse tipo de problema. Em virtude dessa realidade, nos últimos anos tem se
verificado o surgimento de um significativo conjunto de técnicas e algoritmos computacionalmente
muito eficientes mas que não garantem a solução ótima do problema de programação linear inteira.
Esses algoritmos são denominados de “heurísticos” ou aproximativos (para detalhes
complementares ver o anexo em complexidade de algoritmos).
O termo “heurística” é derivado do Grego “heuriskein” que significa descobrir ou achar.
Mas o significado da palavra em Pesquisa Operacional vai um pouco além de sua raiz etimológica.
Podemos dizer que uma heurística, no sentido dado ao termo, refere-se a um método de busca de
soluções em que não existe qualquer garantia de sucesso. O sucesso do método pode ser expresso
quantitativa ou qualitativamente. Em um problema de otimização o sucesso pode ser representado
pela obtenção da solução ótima. Alguns autores entendem que a possibilidade de fracasso seja
extensiva até para a obtenção de uma solução viável. Não comungamos dessa opinião. Definiremos
o termo da seguinte forma:
Uma heurística é uma técnica que busca alcançar uma boa solução utilizando um esforço computacional considerado razoável, sendo capaz de garantir a viabilidade ou a otimalidade da solução encontrada ou ainda, em muitos casos, ambas, especialmente nas ocasiões em que essa busca partir de uma solução viável próxima ao ótimo. As heurísticas iniciaram historicamente seu desenvolvimento a partir de problemas
específicos. As primeiras heurísticas relatadas na literatura pretendiam a solução de problemas
específicos e não eram, vias de regra, passíveis de serem utilizadas em outros problemas. As
heurísticas clássicas de roteamento são um bom exemplo disso.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
261
Podemos também considerar que os primeiros métodos gerais clássicos estavam associados
a estratégias de enumeração incompleta, solução parcial ou relaxações. Dentre as muitas
classificações possíveis para as heurísticas sugerimos a constante da figura 11: