Download - Programação Linear Inteira
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
236
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 200
1
2
3
4
5
6
7
8
9
10
11
: 1 x1 + 1 x2 = 6
: 9 x1 + 5 x2 = 40
Payoff: 8 x1 + 5 x2 = 36
Optimal Decisions(x1,x2): ( 2, 4): 1x1 + 1x2 <= 6: 9x1 + 5x2 <= 40
Figura 1
4.1. Propriedades:
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:
ProcedimentosAproximativosProcedimentosAproximativos
HeurísticasHeurísticas RelaxaçõesRelaxações
LinearLinearLagrangeanaLagrangeanaClássicasClássicas
-Dual Ascent-Dual Ascent-Subgradiente-Ajuste Múltiplo
-Subgradiente-Ajuste Múltiplo
-Míopes .Construtivas .Por economia-Busca local .Método descendente .Método aleatório-Particionamento/ Grupamento
-Míopes .Construtivas .Por economia-Busca local .Método descendente .Método aleatório-Particionamento/ Grupamento
EstocásticasEstocásticas
-Simulated Anneling-Tabu Search .Clássica .Reativa-GRASP
-Simulated Anneling-Tabu Search .Clássica .Reativa-GRASP
AnalógicasAnalógicas
-Redes Neurinais-Computação Evolutiva .Algoritmos genéticos .Scatter Search .Colônia de formigas
-Redes Neurinais-Computação Evolutiva .Algoritmos genéticos .Scatter Search .Colônia de formigas
Figura 11: Classificação das abordagens aproximativas
Utilizando-se um diagrama semelhante ao sugerido poderemos examinar o comportamento
típico de uma busca heurística míope. A figura 12 representa, dentro dos círculos, o valor final da
solução obtida no estágio i da busca. Nesse caso podemos visualizar o esforço de busca na medida
em que as possíveis combinações entre as variáveis n e n-1 são exploradas. No gráfico é facilmente
perceptível que, na medida do crescimento do número de opções, representado pelo comprimento
das colunas do diagrama, o esforço cresce exponencialmente. No caso da figura 11, apenas a
vizinhança imediata de uma solução (ou configuração) é explorada (a de maior valor no estágio i da
busca). Entendemos por vizinhança de uma configuração as configurações que diferem da
configuração base pelo valor atribuído a uma variável.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
262
1 S
10
6
9
13
8
11
16
4
9
02 3 4
7
Figura 12: Tomada de decisão míope
É claro que podemos melhorar o exame das soluções vizinhas e reduzir o grau de “miopia”
da tomada de decisão. A figura 12 mostra essa possibilidade. Nesse caso a exploração estende-se
agora para a vizinhança de duas configurações (as duas melhores segundo o critério do valor de
f(s) ). A penalidade que devemos pagar pela remoção da “miopia” é o crescimento do número de
configurações admitidas como candidatas à exploração. Obviamente se examinássemos todas as
configurações encontraríamos a solução ótima, mas é exatamente esse enorme trabalho que
desejamos evitar. O que se deseja é uma solução de compromisso com o risco de não encontrar a
solução ótima. Existem dois procedimentos que permitem a gerência desse risco:
• Buscar a análise de um número crescente de combinações entre as variáveis selecionadas
em um determinado estágio da decisão e as variáveis dos estágios seguintes (intensificação ou
melhoria na qualidade da solução);
• Buscar considerar um número cada vez maior de variáveis em cada nível (diversificação
ou aumento do alcance (diâmetro) da busca).
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
263
1
f(S)
S
10
20
6
9
13
8
11
16
4
9
02 3 4
7
2220
16
Figura 13: Incrementando a decisão míope
Podemos perceber visualmente como a inclusão da segunda configuração parcial mais
valorada em cada nível (diversificação), cresce com o número de combinações para a definição da
configuração (intensificação) representada pelas setas. O aumento do esforço de busca trás seus
resultados: as decisões 1 e 3 da figura 13 não podem ser mais consideradas apenas “gulosas”. Se o
procedimento adotado for “suficientemente inteligente” podemos encontrar o equilíbrio entre a
diversificação e a intensificação, e caminhar, economicamente em relação ao esforço de busca,
através dos máximos (ou mínimos) locais até o máximo (ou mínimo) global, como mostra a figura
14. Nesse caso a “inteligência” foi expressa pela estratégia de explorar as três soluções mais
interessantes a cada estágio. Infelizmente não podemos deduzir a priori qual seria essa estratégia
“inteligente” pois ela depende da instância de cada problema.
1
f(S)
S
10
20
6
9
13
8
11
16
4
9
02 3 4
7
2220
16
2324
26Máximo
Local
MáximoLocal
MáximoGlobal
Figura 14: Esforço ótimo para a busca heurística
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
264
A figura 14 procura resumir as várias abordagens conhecidas para os
procedimentos heurísticos de solução. Na linha clássica é bastante comum como
anteriormente ressaltamos, que as heurísticas explorem casuisticamente a estrutura
do problema, sem que, normalmente, se possa definir claramente uma estratégia
universal de solução. No caso das chamada meta- heurísticas, que envolvem as
chamadas heurísticas estocásticas e analógicas, existe invariavelmente uma
estratégia geral de solução, cabendo apenas adapta- la ao caso específico.
Na atualidade os procedimentos heurísticos são também muito empregado em
conjunto com os métodos exatos, especialmente para produzirem limites e soluções
viáveis de boa qualidade.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
265
EEEDDDSSSGGGEEERRR WWWYYYBBBEEE DDDIIIJJJKKKSSSTTTRRRAAA
Homem brilhante, Edsger Wybe Dijkstra
colecionou vários prêmios e honras, como o Prêmio
ACM Turing, em 1972 e o Prêmio AFIPS Harry Goode
Memorial, em 1974. Ele é sócio honorário estrangeiro
da Academia americana de Artes e Ciências, sócio da
Academia Real de Artes e Ciências dos Países Baixos e da sociedade de Computação
Britânica, além de Doutor Honoris Causa de Ciência pela Universidade da Rainha de
Belfast.
As áreas de maior interesse de Dijkstra são: correção de programas, metodologia
matemática, algoritmos e sistemas. Ele concentra-se em dar forma aerodinâmica ao
argumento matemático para aumentar nossos poderes de razoamento, em particular, pelo
uso de técnicas formais.
Edsger Wybe Dijkstra foi um contribuinte principal na década de 50 para o
desenvolvimento do ALGOL (ALGOrithmic Languagem), uma linguagem de programação
de nivel alto que se tornou um modelo de clareza e rigor matemático, pois é muito eficiente
para resolver uma grande classe de problemas numéricos, porém inadequada para o
processamento de dados não-numéricos.
Dijkstra é considerado um dos exponentes principais da ciência e arte de
linguagens de programação, e tem contribuído bastante para a nossa compreensão da
estrutura, representação, e implementação destas. Os seus quinze anos de publicações
estendem-se desde artigos sobre a teoria dos grafos para manuais básicos, textos
expositivos, até contemplações filosóficas no campo de linguagens de programação. Em
1956, criou um eficiente algoritmo para otimizar os caminhos em grafos e minimizar
expansão de árvores.
O conhecido algoritmo de Dijkstra para determinar o caminho mais curto em um
grafo, determinado um ponto de começo para qualquer outro ponto, é descrito em muitos
livros, incluindo o muito completo: Introdução para Algoritmos, Thomas Cormen, Charles
Leiserson, e Ronald Rivest, Colina de McGraw, 1990.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
266
8. Matrizes Totalmente Unimodular e Vértices Inteiros.
Definição: Uma matriz A de posto r é chamado Unimodular se todos os elementos
de A são inteiros, e o determinante de qualquer sub- matriz de ordem r é 0, 1 ou -1 .
Exemplo:
A=
2513
Uma matriz A é chamado Totalmente Unimodular se o determinante de qualquer
sub- matriz de A é 0, 1 ou -1.
Exemplo:
−
−=
101011101
A
Observações:
1) Qualquer matriz Totalmente Unimodular consiste somente de elementos 0, ±1
2) Totalmente Unimodular implica em Unimodularidade.
3) Qualquer sub - matriz de uma matriz Totalmente Unimodular é ela mesmo
Totalmente Unimodular.
Teore ma 1: Unimodularidade e Vértices Inteiros
Seja A uma matriz inteira (m, n) de posto completo m, e F = {x ∈ Ån ; Ax = b, x ≥
0} não vazio. Então A é Unimodular se e somente se para cada vetor inteiro b ∈
Ån o conjunto F tem vértices inteiros.
Teorema 2: Tot almente Unimodular e Vértices Inteiros
Seja A uma matriz inteira, e F = {x ∈ Ån ; Ax ≤ b, x ≥ 0} não vazio. Então A é
Totalmente Unimodular se e somente se para cada vetor inteiro b ∈ Ån o conjunto
F tem vértices inteiros.(Hoffman e Kruskal, 1956).
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
267
Coro lário 2.1: Seja A uma matriz Totalmente Unimodular, b e c vetores inteiros.
Então os seguintes problemas lineares têm solução inteira:
Máx{c t x; Ax ≤ b} = Mín{yt b; yt A = c, y ≥ 0}
Corolário 2.2: Uma matriz A é Totalmente Unimodular se e somente se para
quaisquer vetores b e c, ambos os lados da equação(de dualidade linear):
Máx{c t x; Ax ≤ b, x ≥ 0} = Mín{yt b; yt A ≥ c, y ≥ 0}
são atingidos por vetores inteiros x e y(se forem finitos).
Teorema 3: Condição Suficiente para Totalmente Unimodular
Qualquer matriz A com elementos 0, ± 1 é Totalmente Unimodular se:
1. Cada coluna de A contem não mais do que dois elementos inteiros e não- nulos.
2. As linhas de A podem ser particionadas sobre dois subconjuntos tal que:
i) Se uma coluna contém dois inteiros com o mesmo sinal, então as linhas
correspondentes pertencem a diferentes subconjuntos, e,
ii) Se uma coluna contém dois inteiros com sinal opostos, então as linhas
correspondentes pertencem ao mesmo subconjunto.
Diversas caracterizações da matriz Totalmente Unimodular foram
obtidas nas décadas de 60 e 70, nenhuma das quais fornece um algoritmo
polinomial para testar total- unimodularidade. Em 1980, P. D. Seymour, “
Decomposition of regular matroids”, Journal of Combinatorial Theory(B) 28, 305-
359 (1980) car acterizou matrizes totalmente unimodulares usando decomposição
de matróides. Estes resultados foram utilizados por W. H. Cunningham, J.
Edmonds, “ A Combinatorial Decomposition Theory”, Candian Journal of
Mathematics 32, 734-765 (1980) que apresentaram um algoritmo de
reconhecimento de matrizes Totalmente Unimodular. O algoritmo mais rápido que
se conhece é devido a K. Truemper, “A Decomposition Theory for Matrizes V.
Testing of Matriz Total Unimodulary”, Journal of Combinatorial Theory (B) 49,
241-281 (19 80).
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
268
9. Algoritmos Planos -de -Corte
Os algoritmos planos-de-corte procuram reduzir o espaço de soluções
contínuas viáveis com o intuito de aproximar o poliedro obtido pela relaxação
linear do poliedro que representa a envoltória convexa das soluções inteiras [22].
Um dos resultados fundamentais da Programação Linear (PL) no qual os
algoritmos planos-de -cor te se baseiam é o seguinte: se um programa de PL tiver
um valor ótimo finito, então existe pelo menos uma solução ótima que é um vértice
do poliedro descrito pelo sistema linear associado ao problema.
Sendo assim, se fosse possível encontrar a descrição completa de conv(S),
através de um sistema de desigualdades lineares, então o problema de PLI poderia
ser diretamente resolvido por um algoritmo de PL, por exemplo, Simplex ou
Métodos de pontos interiores . Tipicamente em problemas NP-Completos, o número
de desigualdades que descreve completamente o conv(S) é exponencial (no
número de variáveis). Sendo assim, fica inviável o uso computacional da descrição
completa de conv(S), mesmo se esta fosse conhecida. Parte-se então para a
descrição parcial da envoltória convexa na esperança de que ao resolvermos a
relaxação linear associada a conv(S) encontraremos uma solução ótima inteira.
O princípio básico de um algoritmo planos -de-corte é resolver o problema
de PL dado pela relaxação das restrições de integralidade, e o fortalecimento da
relaxação linear através do acréscimo de sucessivas desigualdades válidas à
formulação.
Essas novas desigualdades melhoram a descr ição da envoltória convexa
eliminando porções do espaço de solução, tal que, nenhuma solução viável inteira
seja excluída [23]. Para ilustrar esse método observamos a Figura 1 [22].
Consideremos que o problema representado na figura seja de maximização. As
linhas cheias representam desigualdades válidas que descrevem o poliedro inicial
(relaxação linear), a seta indica a direção da função objetiva, os círculos indicam
pontos inteiros, os círculos cheios representam soluções viáveis, e por último, a
linha tracejada representa a desigualdade acrescentada à relaxação linear que
elimina a solução fracionária sem eliminar qualquer solução (viável) inteira.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
269
Figura 1
Note que o fato importante em algoritmos em planos-de-corte reside em
termos um método apropriado para identificar desigualdades que são válidas para o
problema original, mas violadas pela solução fracionária atual. Assim, se nós
conhecemos uma classe de desigualdades válidas, nós devemos ser hábeis para
verificar se uma desigualdade dessa classe é violada, ou seja, devemos resolver um
problema de separação. Nós detalharemos melhor com problemas de separação no
final da seção onde estabeleceremos uma relação com problemas de otimização.
Citaremos agora alguns tipos de planos-de-corte comumente utilizados quando
trabalhamos com algoritmo de planos-de-corte.
(a) Planos -de -Corte Geral: Os planos-de- corte que representaremos nessa seção
podem ser aplicados a qualquer problema de programação linear inteira pura ou
mista. Como esses tipos de planos-de-corte não são específicos a um dado
problema eles recebem o nome de planos-de-corte gerais ou de propósito gerais.
Gomory introduziu os primeiros algoritmos de planos-de-corte. Naquele trabalho,
ele provou que o algoritmo termina após um número finitos de passos e que o
programa inteiro pode ser resolvido através da geração de um número também
finito de planos-de-corte. Infelizmente, os planos-de-corte de Gomory não se
mostraram eficazes em experimentos práticos. OS planos-de-corte eram “fracos” e
causavam instabilidade numérica, e apenas em problemas de pequeno porte era
possível atingir a otimalidade. Os planos-de-corte gerais são muitos limitados
quando utilizamos e, problemas de otimização combinatória. Para esse tipo de
problema recomenda-se o emprego de planos-de- corte projetados de acordo com a
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
270
estrutura do problema que se deseja resolver. Na próxima subseção, abordaremos
esse tipo de planos-de-corte denominados planos-de-corte faciais.
(b)Planos -de -Corte Facial: são desigualdades válidas definidoras de facetas para
um poliedro P. Como as facetas não são dominadas por quaisquer outras
desigualdades válidas e ainda fornecem uma descrição completa e não redundante
do poliedro, elas podem ser consideradas como sendo os melhores tipos de plano-
de-corte. Entre tanto, dois aspectos devem ser considerados: não é triviais,
encontrar desigualdades válidas definidoras de facetas, e segundo, mesmo que
tenhamos uma classe de desigualdades válidas devemos ser capazes de projetar
algoritmos de separação para encontrá- las.
9.1. Corte de Gomory
Na década de 50 Gomory sugeriu um método de planos-de-corte conhecido
como cortes de Gomory (sendo o método precursor dos planos-de-corte), com o
objetivo de resolver problemas de programação linear inteira. Nós mostraremos
abaixo o processo de obtenção de tais cortes.
Considere o problema de programação linear inteiro misto: Min cx
s.a. Ax = b
xj ≥ 0 e inteiro para j = 1,...,p
xj ≥ 0 para j = p+1,...,n.
Primeiros vão assumir que p = n, i .e. o problema é inteiro puro. Temos que
xk = bk – ∑ J∈NI ak j xj , i = 1,..,m,
é a linha correspondente para variável básica fracionária do tableau corrente ótimo
(simplex) da relaxação LP, onde NI é o conjunto de índices das variáveis não-
básicas.
Definindo:
kjkjkj
kkk
aa
bb
α+=
β+=
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
271
Temos a inequação correspondente para o corte de Gomory inteiro, abaixo:
ou
Para problemas onde p < n, i .e. onde o problema é misto a inequação de
formação do corte é alterada já que algumas das variáveis (não-básicas) podem não
ser restringida para va lores inteiros [4]; temos assim a inequação abaixo para
problemas mistos:
ou
onde,
J+ = {j ∈ NI | akj ≥ 0 }
J- = {j ∈ NI | akj < 0}
β k − ≤∈∑ a x 0 ,k j
J N I
j
− ≤ −∈∑ a xk j j
J N I
β k
,kJJ
jkjk
k
JJjkj xa
1xa β≥
−−ββ
++
∑∑∈∈
,kJJ
jkjk
k
JJjkj xa
1xa β−≤
−−ββ
−+
− ∑∑∈∈
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
272
9.2. Em detalhes, consideremos a seguinte nomenclatura:
Suponhamos que nos resolvemos o problema pelo método simplex e que a
solução ótima é dada pelo TABLEAU mostrado abaixo
Base Valor x1 x2 xm xm+1 xn
x1
x2
.
.
.
xi
xm
b1
b2
.
.
.
bi
bm
1
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
1
a1m+1
a2m+1
.
.
.
aim+1
amm+1
A1n
a2n
.
.
.
ain
amn
-z -z0 . . . cm+1 cn-1 cn
Suponhamos ainda que bi não é inteiro de modo que a solução não satisfaz a
hipótese de integrabilidade. Na linha onde a integrabilidade não é satisfeita nos
dividimos o coeficiente no maior inteiro + uma parte fracionária. (por exemplo,
318
318
234
= + = − +, -114
).
Assim
b i = nio + fio , a i j = ni j + fi j onde 0 ≤ fi j < 1 para j = 0, m + 1, m + 2,..., n.
Seja
k i = fim +1 xm+1 + fim + 2 xm +2 + . . .+fin xn ≥ 0. (1)
Para a i- ésima linha do tableau ótimo nós temos
ni0 + fi0 = xi + (nim +1 + fim+1 )xm+1 + . . .+ (nin + fin )xn (2)
tal que por subtração nós obtemos
fi0 - k i = xi + nim +1 xm+1 + nim +2 xm+2 + ... + nin xn - n i0 (3)
Agora desde que todas nos sas variáveis devem ser inteiras o RHS de (3)
deve ser inteiro e não pode ser maior do que fi0 desde que ki ≥ 0. Porém isto é uma
fração, tal que lado direito(R.H.S), não pode ser zero.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
273
Deste modo, fi0 - k i ≤ 0, isto é, k i ≥ fi0 .
Assim sendo, a existência de integrabilidade é equivalente a ki ≥ fi0 , isto é,
- fim +1 xm+1 - fim + 2 xm +2 - . . .- fin xn + xn+1 = - fi0 . (4)
onde xn+1 é uma nova variável, o qual deve não negativa e inteira desde que ela é
igual a ki - fi0 . A restrição (4) deve ser adicionada ao problema. Neste ponto o
valor de xn+1 é negativo.
9.2.1. Escolha da Linha Inicial
Cortes podem ser gerados usando como linha inicial:
Qualquer linha no quadro do LP ótimo a qual não tenha nenhum inteiro do lado
direito;
Um múltiplo de qualquer linha no quadro do LP;
Uma combinação linear de linhas do quadro LP.
Por outro lado, nenhuma regra é conhecida garantirá escolha da linha mais fácil
forçando um melhor corte.
9.2.2. Heurísticas
Diversas heurísticas foram desenvolvidas e implementadas objetivando a escolha
da linha inicial. Dentre elas podemos citar:
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
274
Passo 1
Passo 2
Passo 3
Algoritmo: Inicialização
Solucionar o problema do relaxamento do LP
Teste de otimização
A solução do LP é inteira? Se sim então, pare.
Corte
Escolha uma linha inicialmente ( com nenhum inteiro do lado direito) e gere um corte ,
adicione ao corte a base do quadro.
Pivoteamento
Re-optimize o LP, usando o algoritmo dual simplex. Retorne para o passo 1.
Passo 0
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
275
Exemplo:
Achar os inteiros não - negativos x1 , x2 tal que
x1 + x2 ≤ 5
x1 + 5x2 ≤ 10
o qual minimiza -2x1 - 9x2 = z , xi ≥ 0, i = 1, 2. Graficamente tem- se:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160
1
2
3
4
5
6
7
8
(1): 1 x1 + 1 x2 = 5
(2): 1 x1 + 5 x2 = 10
(1): 1x1 + 1x2 <= 5 (2): 1x1 + 5x2 <= 10
Aplicando-se o método simplex, tem-s e :
Base Valor x1 x2 x3 x4
x3
x4
5
10
1
1
1
5*
1
.
.
1
- z 0 -2 -9 . .
x3
x2
3
2
45
*
15
.
1
1
. −
15
15
- z 18 −
15
. .
95
x1
x2
154
54
1
.
.
1
54
−14
- 14
14
-z −
14
. .
14
74
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
276
Evidentemente os valores ótimos x1 e x2 não são inteiros. A equação (1) para
a solução ótima x1 toma a forma
3 + 34
= x1 + (1 + 14
)x3 + (-1 + 34
)x4
onde (4) torna-se
−14
x3 - 34
x4 + x5 = - 34
(5)
onde x5 é uma variável inteira não negativa. Esta é uma restrição o qual
adicionaremos ao problema, utilizaremos o método dual simplex.
Base Valor x1 x2 x3 x4 x5
x1
x2
x5
154
54
−34
1
.
.
.
1
.
54
−14
−14
*
14
14
−34
.
.
1
-z 754
. . 1
4
74
.
x1
x2
x3
0
2
3
1
.
.
.
1
.
.
.
1
-4
1
3
5
-1
-4
-z 18 . . . 1 1
A solução ótima inteira é x1 = 0 , x2 = 2 e z = -18.
Em termos das variáveis x1 e x2 a restrição adicional (5) toma a forma
x5 = - 34
+ 14
x3 + 34
x4 ≥ 0
isto é, - 34
+ 14
(5 - x1 - x2 ) + 34
(10 - x1 - 5x2) ≥ 0
isto é, x1 + 4x2 ≤ 8.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
277
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160
1
2
3
4
5
6
7
8
(1): 1 x1 + 1 x2 = 5
(2): 1 x1 + 5 x2 = 10
(3): 1 x1 + 4 x2 = 8
(1): 1x1 + 1x2 <= 5 (2): 1x1 + 5x2 <= 10 (3): 1x1 + 4x2 <= 8
10. Exercícios Resolvidos
1. Considere o seguinte P.P.I.:
Máx z = 14x1 + 18x2
s.a. -x1 + 3x2 ≤ 6
7x1 + x2 ≤ 35
xi ≥ 0; xi inteiro (i = 1, 2)
A tabela ótima para o P.P.L. é dada na Tabela 2. Use o algoritmo dos planos cortantes para
resolver o P.P.I.
Base x1 x2 s1 s2 b
X2 0 1 7/22 1/22 7/2
X1 1 0 -1/22 3/22 9/2
z 0 0 56/11 30/11 126
Tabela 2.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
278
Solução: Escolhendo-se arbitrariamente x2, temos:
x2 + (0 + 7/22)s1 + (0+1/22)s2 = (3 + 1/2) Fazendo a equação do corte:
-7/22s1 - 1/22s2 + s3 = -1/2 Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:
Base x1 x2 s1 s2 s3 b
x2 0 1 7/22 1/22 0 7/2
x1 1 0 -1/22 3/22 0 9/2
s3 0 0 -7/22 * -1/22 1 -1/2
z 0 0 56/11 30/11 0 126
x2 0 1 0 0 1 3
x1 1 0 0 1/7 -1/7 32/7
s1 0 0 1 1/7 -22/7 11/7
z 0 0 0 2 112/7 118
Devem-se fazer os passos acima novamente, desta vez escolhendo-se s1 :
s1 + (0 + 1/7)s2 + (-4 + 6/7)s3 = (1 + 4/7)
Fazendo a equação do corte: -1/7s2 - 6/7s3 + s4 = -4/7
Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:
Base x1 x2 s1 s2 s3 s4 b
x2 0 1 0 0 1 0 3
x1 1 0 0 1/7 -1/7 0 32/7
s1 0 0 1 1/7 -22/7 0 11/7
s4 0 0 0 -1/7 * -6/7 1 -4/7
z 0 0 0 2 112/7 0 118
x2 0 1 0 0 1 0 3
x1 1 0 0 0 -1 1 4
s1 0 0 1 0 -4 1 1
s2 0 0 0 1 6 -7 4
z 0 0 0 0 4 14 110
Logo a solução ótima para este P.P.I. é z = 110; V.B.: x1 = 4; x2 = 3; s1 = 1; s2 = 4; V.N.B.: s3 = s4 = 0.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
279
2. Considere o seguinte P.P.I.:
Mín z = 6x1 + 8x2
s.a. 3x1 + x2 ≤ 4
x1 + 2x2 ≤ 4
xi ≥ 0; xi inteiro (i = 1, 2)
A tabela ótima para o P.P.L. é dada na Tabela 3. Use o algoritmo dos planos cortantes para resolver
o P.P.I.
Tabela 3.
Base x1 x2 e1 e2 b
x1 1 0 -2/5 1/5 4/5
x2 0 1 1/5 -3/5 8/5
z 0 0 -4/5 -18/5 88/5
Solução Escolhendo-se arbitrariamente x2, temos:
x2 + (0 + 1/5)e1 + (-1 + 2/5)e2 = (1 + 3/5) Fazendo a equação do corte:
-1/5e1 - 2/5e2 + e3 = -3/5 Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:
Base x1 x2 e1 e2 e3 b
x1 1 0 -2/5 1/5 0 4/5
x2 0 1 1/5 -3/5 0 8/5
e3 0 0 -1/5 * -2/5 1 -3/5
Z 0 0 -4/5 -18/5 0 88/5
x1 1 0 0 1 -2 2
x2 0 1 0 -1 1 1
e1 0 0 1 2 -5 3
Z 0 0 0 2 -4 20
Logo a solução ótima para este P.P.I. é z = 20; V.B.: x1 = 2; x2 = 1; e1 = 3; V.N.B.: e2 = e3= 0.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
280
3. Considere o seguinte P.P.I:
Mín z = 2x1 - 4x2
s.a. 2x1 + x2 ≤ 5
-4x1 + 4x2 ≤ 5
xi ≥ 0; xi inteiro (i = 1, 2)
A tabela ótima para o P.P.L. é dada na Tabela 4. Use o algoritmo dos planos cortantes para resolver
o P.P.I.
Base x1 x2 e1 e2 b
x1 1 0 1/3 -1/12 5/4
x2 0 1 1/3 1/6 5/2
z 0 0 -2/3 -5/6 -15/2
Tabela 4
Solução:
Escolhendo-se arbitrariamente x2, temos:
x2 + (0 + 1/3)e1 + (0 + 1/6)e2 = (2 + 1/2)
Fazendo a equação do corte:
-1/3e1 - 1/6e2 + e3 = -1/2
Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:
Base x1 x2 e1 e2 e3 b
x1 1 0 1/3 -1/12 0 5/4
x2 0 1 1/3 1/6 0 5/2
e3 0 0 -1/3 * -1/6 1 -1/2
z 0 0 -2/3 -5/6 0 -15/2
x1 1 0 0 -1/4 1 3/4
x2 0 1 0 0 1 2
e1 0 0 1 ½ -3 3/2
z 0 0 0 -1/2 -2 -13/2
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
281
Devem-se fazer os passos acima novamente, desta vez escolhendo-se e1 :
e1 + (0 + 1/2)e2 + (-3 + 0)e3 = (1 + 1/2) Fazendo a equação do corte:
-1/2e2 + e4 = -1/2
Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:
Base x1 x2 e1 e2 e3 e4 b
x1 1 0 0 -1/4 1 0 3/4
x2 0 1 0 0 1 0 2
e1 0 0 1 1/2 -3 0 3/2
e4 0 0 0 -1/2 * 0 1 -1/2
z 0 0 0 -1/2 -2 0 -13/2
x1 1 0 0 0 1 -1/2 1
x2 0 1 0 0 1 0 2
e1 0 0 1 0 -3 1 1
e2 0 0 0 1 0 -2 1
Z 0 0 0 0 -2 -1 -6
Logo a solução ótima para este P.P.I. é z = -6; V.B.: x1 = 1; x2 = 2; e1 = 1; e2 = 1; V.N.B.: e3 = e4 =
0.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
282
11. Exercícios Propostos
1) Seja o problema de programação linear inteira
Máx z = 7x1 + 9x2
s.a -x1 + 3x2 ≤ 6
7x1 + x2 ≤ 35
x1, x2 ≥ 0, inteiros
cuja solução ótima do problema de programação linear é dado pelo tableau abaixo:
Base x1 x2 x3 x4 solução
x2 0 1 722
1
22
72
x1 1 0 −
122
3
22
92
z 0 0 2811
1511
63
Sugestão: Aplique o método dos planos cortantes a partir da variável x2, até encontrar uma solução
inteira ótima.
2) Seja o problema de programação linear inteira
Máx z = 7x1 + 9x2
s.a -x1 + 3x2 ≤ 6
7x1 + x2 ≤ 35
x1, x2 ≥ 0, inteiros
cuja solução ótima do problema de programação linear é dado pelo tableau abaixo
Base x1 x2 x3 x4 solução
x2 0 1 722
1
22
72
x1 1 0 −
122
3
22
92
z 0 0 2811
1511
63
Aplicando-se o método dos cortes de Gomory, com respeito a variável x2 obtém-se o seguinte
quadro:
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
283
Base x1 x2 x3 x4 S1 Solução
x2 0 1 722
1
22
0 72
x1 1 0 −
122
3
22
0 92
S1 0 0 -
722
-1
22
1 -12
Z 0 0 2811
1511
0 63
a) Construir a restrição adicionada ao quadro acima em termos das variáveis x1 e x2.
Aplicando-se o dual simplex ao quadro acima se obtêm.
Base x1 x2 x3 x4 S1 Solução
x2 0 1 0 0 1 3
x1 1 0 0 17
-17
327
x3 0 0 1 17
-227
117
z 0 0 0 1 8 59
b) Complete o quadro abaixo, aplicando o método dos cortes de Gomory ao quadro
acima em relação a variável x1.
Base x1 x2 x3 x4 S1 S2 Solução
x2 0 1 0 0 1 0 3
x1 1 0 0 17
-17
0 32
7
x3 0 0 1 17
-227
0 11
7
S2 0 0 0 1 -47
z 0 0 0 1 8 0 59
c) Construir a restrição adicionada ao quadro acima em termos das variáveis x1 e x2.
d) Com as restrições obtidas dos itens a) e c) resolver graficamente o problema. Obtenha a solução
inteira ótima.
e) Aplique o dual simplex ao quadro do item b e compare a solução com o item d.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
284
3) Resolver os seguintes modelos lineares inteiro, usando o método de cortes de Gomory.
Máx z = 2x1 + x2
s.a 3x1 + x2 ≤ 21
7x1 + 4x2 ≤ 56
x1 + x2 ≤ 12
x1, x2 ≥ 0, inteiros
4) Considere o seguinte problema da mochila
Máx z = 10x1 + 24x2 + 10x3 + 2x4
s .a 2x1 + 4x2 + 3x3 + x4 ≤ 23
x1 , x2 , x3 , x4 ≥ 0, inteiros
a) Resolver este modelo usando o método dos cortes de Gomory.
b) Transforme este problema em um problema da mochila 0-1. Use o método de
Branch-and- Bound para resolver este problema da mochila 0-1.
5) Exercícios Computacionais
Implementar códigos computacionais para executar problemas de programação
linear inteira e binária 0-1, considerando:
a) Método dos Cort es de Gomory, a partir da rotina allint.pas, do livro Discrete
Optimization Algoritms with Pascal Programs by Syslo, M. M et alli .
a1) Construir uma entrada e saida de dados.
a2) Efetuar vários testes, com problemas até 50variáveis e 52 restrições.
6) Assinale (V) verdadeiro ou (F) falso
( ) É possível obter uma solução viável inteira por arredondamento da solução ótima de um
problema de programação linear com restrições de igualdade.
( ) O custo ótimo inteiro de um problema pode fornecer um melhor custo do que seu custo
contínuo associado.
( ) O número de subproblemas obtidos por uma ramificação do método de Branch-and-Bound
pode ser drasticamente reduzido se um bom limite é descoberto para a solução inteira.
( ) A principal desvantagem do algoritmo de Branch-and-Bound é o número de subproblemas que
pode sobrecarregar a memória computacional.
( ) O algoritmo de enumeração implícita 0 - 1 é um caso especial do método geral de Branch-and-
Bound.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
285
7) Aplique o algoritmo de “Branch-and-Bound” ao Problema de Programação Inteira(PLI) abaixo.
mín z = 10x1 + 9x2
s.a x1 ≤ 8
x2 ≤ 10
5x1 + 3x2 ≥ 45
x1, x2 ≥ 0 inteiros.
a)Construir uma árvore composta pelos subproblemas lineares PL1, PL2, PL3, PL4 e PL5.
b) Interprete os resultados em cada nó da árvore.
6) Mostrar a árvore de Branch-and-Bound que corresponde a solução ótima do seguinte modelo
linear inteiro
Máx z = 2x1 + x2
s.a: x1 + 2x2 ≤ 8
x1 - x2 ≤ 12
x1, x2 ≥ 0; x1, x2 inteiros
8)Utilizando o método de Branch-and-Bound ache a solução ótima dos seguintes problemas
inteiros.
a) Máx z = 5x1 + 2x2
s.a: 3x1 + x2 ≤ 12
x1 + x2 ≤ 5
x1, x2 ≥ 0; x1, x2 inteiros
b) Máx z = 7x1 + 3x2
s.a: 2x1 + x2 ≤ 9
3x1 + 2x2 ≤ 13
x1, x2 ≥ 0; x1, x2 inteiros
9) Implementar o algoritmo de Branch-and-Bound em MATLAB
10) Resolver graficamente o exemplo da “fabrica de moveis” interpretando cada etapa do método
de Branch-and-Bound.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
286
11) Considere o modelo:
mín z = x1
s.a 15x1 - 20x2 ≤ 4
21x1 - 20x2 ≥ 10
x1, x2 ≥ 0 inteiros.
Mostre que o arredondamento da solução ótima do problema linear para uma solução inteira deste
modelo, não é a solução ótima do problema inteiro.
12) Seja o problema inteiro
(PI) Máx z = c x c xt t1 1 2 2+
s.a a x a x b
d x d x b
t t
t t1 1 2 2 1
1 1 2 2 2
+ ≤
+ ≤
x1 20 0≥ ≥, x inteiros
Descreva a aplicação do algoritmo de Branch-and-Bound ao problema (PI), narrando:
a) As ramificações com subproblemas inclusive os que tenham soluções impossíveis.
b) Descrever limitações dos vários subproblemas candidatos a solução, descrevendo os critérios a
melhor escolha.
13) Resolver através do algoritmo de Branch-and-Bound os seguintes problemas abaixo:
a) Máx z = 3x1 + x2 b) Máx z = 4x1 + 3x2 + x3
s.a. 5x1 + 2x2 ≤ 10 s.a. 3x1 + 2x2 + x3 ≤ 7
4x1 + x2 ≤ 7 2x1 + x2 + 2x3 ≤ 3
x1, x2 ≥ 0; x2 inteiro x1, x2, x3 ≥ 0; x2, x3 inteiros
14) Considere o modelo
Máx z = x1
s.a. 15x1 - 20x2 ≤ 4
21x1 - 20x2 ≥ 10
x1, x2 ≥ 0
a)Resolver o problema na forma linear e inteira utilizando o LINDO.
b)Verifique que o arredondamento da solução linear do PPL não implica na solução do problema
inteiro.
c) Resolver o problema linear graficamente.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
287
15) Considere o modelo
Máx z = 3x1 + 3x2 + 13x3 s.a. -3x1 + 6x2 + 7x3 ≤ 8 6x1 - 3x2 + 7x3 ≤ 8 x1, x2 , x3 ≥ 0 e inteiros
a) Resolver o problema utilizando o método de Branch-and-Bound com a versão do
jumptracking.(A ramificação(bound) é sempre sobre a variável de menor índice que não é inteira).
b) Quando a versão do backtracking é aplicada para este problema, existe a liberdade na escolha do
subproblema com xi ≤ *, ou o subproblema com xi ≥ * + 1. Analise
a diferença entre as duas versões do backtracking.
c) Compare o resultado com a solução encontrada no item (a).
d)O que podemos dizer neste caso sobre o jumptracking em relação ao backtracking.
16) Através do método de Branch-and-Bound para construir a árvore de solução dos seguintes
problemas linear inteiro. Utilize o computador para resolver os subproblemas.
a) Máx z = 3x1 + 3x2 + 13x3
s.a. -3x1 + 6x2 + 7x3 ≤ 8
6x1 - 3x2 + 7x3 ≤ 8
0 ≤ x1, x2 , x3 ≤ 5, inteiros
b) Máx z = 23x1 + 14x2 + 17x3
s.a. -x1 + x2 + 2x3 ≤ 7
2x1 + 2x2 - x3 ≤ 9
3x1 + 2x2 + 2x3 ≤ 13
x1, x2 , x3 ≥ 0, inteiros
c) Máx z = 26x1 + 17x2 + 13x3
s.a. 3x1 + x2 + 4x3 ≤ 9
x1 + 2x2 - 3x3 ≤ 6
4x1 - x2 + x3 ≤ 17
x1, x2 , x3 ≥ 0, inteiros
d) Máx z = 19x1 + 27x2 + 23x3
s.a. 4x1 - 3x2 + x3 ≤ 7
2x1 + x2 - 2x3 ≤ 11
-3x1 + 4x2 + 2x3 ≤ 5
x1, x2 , x3 ≥ 0, inteiros
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
288
e) Máx z = 34x1 + 29x2 + 2x3
s.a. 7x1 + 5x2 - x3 ≤ 16
-x1 + 3x2 + x3 ≤ 10
- x2 + 2x3 ≤ 3
x1, x2 , x3 ≥ 0, inteiros
f) Máx z = 135x1 + 31x2 + 142x3
s.a. x1 + 2x2 - x3 ≤ 13
2x1 - x2 + 3x3 ≤ 5
x1 - x2 + 2x3 ≤ 3
x1, x2 , x3 ≥ 0, inteiros
17) Qual das seguintes afirmações é verdadeira e quais são falsas? Justifique suas respostas.
a) Se um modelo linear inteiro tem uma solução ótima, então o modelo linear também tem solução
ótima.
c) Se um modelo linear tem uma solução ótima, então o modelo linear inteiro também tem solução
ótima.
18) Considere o seguinte modelo linear inteiro
Máx z = 77x1 + 6x2 + 3x3 + 6x4 + 33x5 + 13x6 + 110x7 + 21x8 + 47x9
s.a 77x1 + 76x2 + 22x3 + 42x4 + 21x5 + 760x6 + 818x7 + 62x8 + 785x9 ≤ 1500
67x1 + 27x2 + 794x3 + 53x4 + 234x5 + 32x6 + 792x7 + 97x8 + 435x9 ≤ 1500
x1,...,x9 ∈ {0,1}
a) Resolver a relaxação linear deste problema e determine uma solução inteira viável por
arredondamento da solução linear.
b) Mostre que z* = 176, x x x x x x x x x1 2 3 4 5 6 7 8 9 1* * * * * * * * *= = = = = = = = = é uma solução ótima
do modelo, usando o método de Branch-and-Bound. Mostre também a árvore do método de Branch-
and-Bound.
19) Considere o seguinte modelo linear inteiro
Máx z = -x1 - 9x2
s.a -x1 + x2 + x3 = 0.5
x1, x2 ≥ 0, x3 ∈ {0,1}
Determine a solução ótima e a árvore correspondente pelo método de Branch-and-Bound.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
289
20) Seja o PPI
Máx z = x1 + x2 + 4x3 – x4 + 5x5
s .a x2 + x5 ≤ 4
- x1 + x2 ≤ 1
x3 - x4 ≤ 0
- x3 - x4 + x5 ≤ 5
x1 ≤ 2
xI ≥ 0, I= 1,…,5
A solução do problema de programação linear corresponde a solução do problema de programação
inteira. Justifique sua resposta.
Solução: A solução do problema de programação linear não corresponde a solução do problema de
programação inteira, pois as hipóteses do teorema
“Seja A uma matriz inteira, e F = {x ∈ Ån; Ax ≤ b, x ≥ 0} não vazio. Então A é Totalmente
Unimodular se e somente se para cada vetor inteiro b ∈ Ån o conjunto F tem vértices inteiros” não
são satisfeitas. De fato, a matriz:
−−−
−=
0000111100011000001110010
A não é totalmente unimodular, pois a sub- matriz
−−
−=
11
11A possui determinante igual a –2.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
290
21) Considere o seguinte P.P.I.:
Mín z = 6x1 + 8x2
s.a. 3x1 + x2 ≥ 4
x1 + 2x2 ≥ 4
xi ≥ 0; xi inteiro (i = 1, 2)
A tabela ótima para o P.P.L. é dada abaixo. Use o algoritmo dos planos cortantes de Gomory para resolver o P.P.I.
Base x1 x2 e1 e2 b
x1 1 0 -2/5 1/5 4/5
x2 0 1 1/5 -3/5 8/5
z 0 0 -4/5 -18/5 88/5
Sugestão: Construa o corte de Gomory considerando a equação envolvendo x2.
22) Considere o seguinte P.P.I. :
Mín z = 2x1 - 4x2
s .a. 2x1 + x2 ≤ 5
-4x1 + 4x2 ≤ 5
xi ≥ 0; xi inteiro (i = 1, 2)
A tabela ótima para o P.P.L. é dada abaixo. Use o algoritmo dos planos cortantes
para resolver o P.P.I.
Base x1 x2 e1 e2 b
x1 1 0 1/3 -1/12 5/4
x2 0 1 1/3 1/6 5/2
z 0 0 -2/3 -5/6 -15/2
23)Verifique
Se A e B são matrizes Totalmente Unimodular, então
a) At é Totalmente Unimodular.
b)
BA
é Totalmente Unimodular.
c) Se A é uma matriz Totalmente Modular então [I A] é Unimodular.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
291
24)Determine qual das seguintes matrizes são Totalmente Unimodulares.
a)
−
−=
101011101
A ; b)
−=
111010011
A ;
−
−−−
=
00100011001000101011
A ;
−−−
−=
0000111100011000001110010
A
25) Justifique as seguintes questões:
a) Dar um exemplo de uma matriz unimodular de posto completo que não é
totalmente unimodular.
b) Dar um exemplo de uma matriz totalmente unimodular de posto completo,
com no mínimo um inteiro positivo e um inteiro negativo em cada coluna, que não
satisfaz as condições do teorema 3.
26) Mostre, calculando todas as soluções viáveis básicas, que a região
{x ∈R6 ; 0} x ,bx100101010011001001
≥=
tem somente vértices inteiros quando b
é um vetor inteiro.
27) Uma fábrica de cerâmica produz 2 tipos de vasos(A e B) nas suas seções de
cozimento e pintura. Os tempos necessários à preparação de uma unidade de cada
tipo nas seções referidas, bem como a disponibilidade diária destas constam no
quadro seguinte:
Tempo
Necessário (h)
Tempo
Necessário (h)
Seção Tipo A Tipo B Disponível/Dia
Cozimento 3 1 4
Pintura 1 2 4
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
292
O lucro unitário da venda de A e B é respectivamente 6 e 8 unidades monetárias:
a) Modelar o problema de programação linear inteira;
b) Aplicando-se o simplex a modelo acima se obtêm o seguinte quadro ótimo:
Base x1 x2 e1 e2 b
x1 1 0 -2/5 1/5 4/5
x2 0 1 1/5 -3/5 8/5
z 0 0 4/5 18/5 88/5
Objetivando encontrar uma solução ao problema de programação linear inteira, empregar o método
dos cortes de Gomory.
(sugestão: Desenvolver o corte de Gomory em relação a variável x1)
Solução Escolhendo-se arbitrariamente x2, temos:
x2 + (0 + 1/5)e1 + (-1 + 2/5)e2 = (1 + 3/5) Fazendo a equação do corte:
-1/5e1 - 2/5e2 + e3 = -3/5 Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:
Base x1 x2 e1 e2 e3 b
x1 1 0 -2/5 1/5 0 4/5
x2 0 1 1/5 -3/5 0 8/5
e3 0 0 -1/5 * -2/5 1 -3/5
Z 0 0 -4/5 -18/5 0 88/5
x1 1 0 0 1 -2 2
x2 0 1 0 -1 1 1
e1 0 0 1 2 -5 3
Z 0 0 0 2 -4 20
Logo a solução ótima para este P.P.I. é z = 20; V.B.: x1 = 2; x2 = 1; e1 = 3; V.N.B.: e2 = e3= 0.
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
293
27) O gerente de informática da Universidade do Estado de DED deseja habilitar o
acesso de cinco diferentes arquivos. Estes arquivos armazenados em dez discos
como mostrado na tabela abaixo:
1 2 3 4 5 6 7 8 9 10
Arq. 1 X X X X X X
Arq. 2 X X
Arq. 3 X X X X
Arq. 4 X X X
Arq. 5 X X X X X X X
A quantidade de armazenagem requerida em cada disquete é: disco 1, 3K; disco 2,
5K; disco3, 1K; disco 4, 2K; disco 5, 1K; disco 6, 4K; disco 7, 3K; disco 9, 2K;
disco 10, 2K.
a)Formule uma Programação inteira que determine o conjunto de discos requeridos para
armazenar uma quantidade mínima de arquivos, tal que cada arquivo está no mínimo em
um dos discos. Para um dado disco, devemos armazenar nele o arquivo inteiro ou não
armazenar; não podemos armazenar o arquivo em parte do disco.
min 3x1 + 5x2 + x3 + 2x4 + x5 + 4x6 + 3x7 + x8 + 2x9 + 2x10 s.t. x1 + x2 + x4 + x5 + x8 + x9 >= 1 x1 + x3 >= 1 x2 + x5 + x7 + x10 >= 1 x3 + x6 + x8 >= 1 x1 + x2 + x4 + x6 + x7 + x9 + x10 >= 1 xi ∈ {0, 1} i = 1,..., 10
b)Modifique sua formulação tal que se o disco 3 ou o disco 5 são usados, então o disco 2 deve também ser
usado.
min 3x1 + 5x2 + x3 + 2x4 + x5 + 4x6 + 3x7 + x8 + 2x9 + 2x10
s.t. x1 + x2 + x4 + x5 + x8 + x9 >= 1 x1 + x3 >= 1 x2 + x5 + x7 + x10 >= 1 x3 + x6 + x8 >= 1 x1 + x2 + x4 + x6 + x7 + x9 + x10 >= 1 x2 - x3 >= 0 x2 - x5 >= 0 xi ∈ {0, 1} i = 1,..., 10
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
294
Bibliografia
1) Scharage, L., Optimization Modeling with LINGO, LINDO SYSTEMS INC,
USA, 2a Edition, 1999;
2) Scharage, L., Optimization Modeling with LINDO , LINDO SYSTEMS INC,
USA, 5a Edition, 1999;
3) Bazaraa et alli., Linear Programming and Network Flows . John Wiley Wiley
& Sons. Second Edit ion;
4) Arbel, A. Exploring Interior-Point Linear Programming, Algorithms and
Software , The MIT Press;
5) Puccini, A. L. et alli., Programação Linear, LTC;
6)Bregalda, P. F. et alli . , Introdução à Programação Linear, Ed. Ca mpus;
7)Ramalhete, M. et alli. , Programação Linear, Vol I e II, Ed. McGraw- Hill;
8)Syslo, M. M. et alli. , Discrete Optimization Algorithms with Pascal Problems;
9)Lieberman et alli. , Introdução à Pesquisa Operacional. Ed. Campus;
10)Bronson, R., Pesquisa Operacional . Coleção Schaum.
11)Avriel, M. et alli. Mathematical Programming for Industrial Engineers .
Marcel Dekker, Inc.1996.
12) Chvátal. V. Linear Programming , Freeman and Company, 1983.
13) Pinheiro, P. R., Uma Metodologia de Feixe e Benders Aplicada a um Problema Linear
Inteiro de Grande Porte, Tese de Doutorado, PESC/COPPE/UFRJ, 1998.
14) Clemente, N. Ao Mestre com Carinho, Revista Exame , no. 4, ed. 682, ano 32, p. 56-58,
Editora abril, 1999.
15) Avriel, M., AND GOLANY, B., Mathematical Programming for Industrial Engineers, Marcel
Dekker, Inc.1996.
16) Winston, W. L., Operations Research, Applications and Algorithms ,
Duxbury- 1994.