Programação Linear Inteira
Programação Linear Inteira
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
233
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
234
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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.9 Seja ƒ uma face própria de um poliedro P. Então ƒ é uma faceta, se e
somente se, dim( ƒ) = dim(P) – 1.
235
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
11
10
7 : 9 x1 + 5 x2 = 40
6
Payoff: 8 x1 + 5 x2 = 36
5
1
: 1 x1 + 1 x2 = 6
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
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 - 2 0 x2 ≤ 4
2 1 x1 - 2 0 x2 ≥ 1 0
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
236
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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.
237
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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.
{
( P ) = Maximizar cx | Ax = b, x ≥ 0, x ∈Z+ }
e
{
( P ) = Maximizar cx | Ax = b, x ≥ 0, x ∈ R + }
Definindo ainda V ∗ ( P ) e V ∗ ( P ) os valores das funções objetivo no ótimo
de ( P ) e ( P ) respectivamente temos que:
V ∗ (P ) ≤ V ∗ (P )
238
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Considerando ainda qualquer solução viável ~
x de (P), então:
V ∗ ( x~) ≤ V ∗ ( P )
x j ≥ x j + 1 ou x j ≤ x j (1)
em toda a solução viável de (P). Dessa forma o problema (P) pode ser dividido em
dois novos problemas (P 1 ) e (P 2 ) em que a envoltória convexa C de (P 1 ) ∪ (P 2 )
ou Conv((P 1 ) ∪ ( P 2 )) é estritamente contida na envoltória de (P) ou Conv ((P 1 ) ∪
(P 2 ) ) ⊂Conv ((P)).
Vamos exemplificar o processo de divisão da envoltória convexa de (P) com
o seguinte exemplo:
Maximizar z = 5x 1 + 8x 2
sujeito a :
x1 + x 2 ≤ 6
5x 1 + 9 x 2 ≤ 45
x1 , x 2 ∈ Z +
15 15
x2 ≥ + 1 ≥ 4 ou x 2 ≤ ≤ 3
4 4
239
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
x2
Soluções Inteiras
A z=5x 1 +8x2
B
x1 + x 2 =6
O C x1
Figura 2: Solução gráfica do exemplo
x2
(P1 )
A
(P2 )
O C x1
Figura 3: Resultado do “branch” (divisão)
240
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Com a consideração da disjunção o problema original será reduzido então a
dois novos problemas, a saber:
( P1 ) Maximizar z = cx ( P2 ) Maximizar z = cx
Sujeito a : Sujeito a :
Ax ≤ b Ax ≤ b
x i ≤ x i0 x i ≥ x i0 + 1
xi ∈ Z + xi ∈ Z +
241
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
P0
x1 =2,25 x2 =3,75
z=41,25
x2 ≥4,0 x 2≤3,0
P2 P1
x1 =1,8 x2 =4,0 x 1 =3,0 x2 =3,0
z=41 z=39
x 1 ≥2,0 x 1≤ 1,0
P3 P4
Inviável x1 =1,0 x2 =4,25
z=40,4
x 2 ≥5,0 x 1 ≤4,0
P5 P6
x1 =0 x2 =5 x1 =1,0 x 2 =4,0
z=40 z=37
P0
x1 =2,25 x2 =3,75
z=41,25
x 2 ≥4,0 x 2 ≤3,0
P2 P1
x 1 =1,8 x2 =4,0 Aguarda
z=41
x1 ≥2,0 x 1 ≤1,0
P3 P4
Aguarda x1 =1,0 x2 =4,25
z=40,4
x2 ≥5,0 x 1 ≤4,0
P5 P6
x 1 =0 x 2 =5 Aguarda
z=40
242
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 (P 4 ), um problema com solução contínua possui
z = 40,4 e (P 5 ), um problema com solução inteira, possui z = 40 , o problema (P 6 )
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 (P 3 ).
(P 1 ) .
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.
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:
a 1 ) 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).
243
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
a 1 2 ) A busca FIFO(First- in- first- out) procede a busca sobre um nó não ramificado.
a 2 ) 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:
b 1 ) Escolha da variável não inteira pelo maior interesse econômico.
b 2 ) 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.
244
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
5.3. Algoritmo de Branch-and-Bound
Passo 9: Pare. A solução ótima foi encontrada e tem um valor para a função
objetiva dada pelo valor corrente de Zbest.
245
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
5.3. Exercícios Resolvidos
246
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Subproblema III = S ubproblema I + restrição x1 ≤ 3
Subproblema III Máx z = 8x1 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 45
x1 ≤ 3
xi ≥ 0, i = 1, 2
9
Do subproblema II tem- se como solução, z = 41; x1 = 4 e x 2 = e subproblema III
5
tem- se z = 39; x1 = x 2 = 3. Da variável x2 tem- se x2 ≤ 1 e x2 ≥ 2 do subproblema II
Subproblema I
165 15 9
z= ; x1 = ; x 2 =
4 4 4
Subproblema IV Subproblema V
365 40
z= ; x1 = ; x 2 = 1
Solução Inviável 9 9
248
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Exemplo 2: Seja o PLI abaixo,
mín z = 10x1 + 9 x2
s.a x1 ≤8
x2 ≤ 1 0
5 x1 + 3 x2 ≥ 4 5
x i ≥ 0, i = 1, 2; inteiros
Denominando por PL- 1 o problema linear, sua solução ótima tem valores
5
ótimos Z1 = 95; x1 = 8 e x2 = .
3
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 = 9 5 (delimitação inferior).
5 2
Por outro lado, o valor x2 = = 1 sugere dividir (ramificar) o problema em dois
3 3
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 + 9 x2 mín z = 10x1 + 9 x2
s.a x1 ≤ 8 s.a x1 ≤ 8
x2 ≤ 1 0 x2 ≤ 10
5 x1 + 3 x2 ≥ 4 5 5 x1 + 3 x2 ≥ 4 5
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
39 4
tem soluções ótimas PL- 2: inviável e PL- 3: Z3 = 96; x1 = = 7 e x2 = 2
5 5
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
4
x1 = 7 o problema deve ser ramificado em dois outros, com restrições
5
correspondentes x1 ≤ 7 e x1 ≥ 8. Tais problemas são denominados PL- 4 e PL- 5,
respectivamente:
249
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
mín z = 10x1 + 9 x2 mín z = 10x1 + 9 x2
s.a x1 ≤ 8 s.a x1 ≤ 8
x2 ≤ 1 0 x2 ≤ 10
5 x1 + 3 x2 ≥ 4 5 5 x1 + 3 x2 ≥ 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:
10
PL- 4: Z = 100; x1 = 7 e x2 = e P L- 5: Z = 98; x1 = 8 e x2 = 2
7
PL-1
2
Z1 = 95; x1 = 8; x2 = 1
3
PL-3
PL-2; Inviável. 4
Z3 = 96; x1 = 7 ; x2 = 2
5
PL-5
PL-4 Z3 = 98; x1 =8; x2 = 2
10
Z4 = 100; x1 =7; x2 =
3
250
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Exemplo 3: Consideremos o seguinte problema de programação linear inteira
Máx z = 2x1 + x2
s.a. 5x1 + 2 x2 ≤ 8
x1 + x2 ≤ 3
x1 , x2 ≥ 0; x1 inteiro
De modo similar ao problema de programação inteira p ura, 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 + 2 x2 ≤ 8
x1 + x2 ≤ 3
x1 , x2 ≥ 0
11 2 7
tem- se como solução ótima z = , x1 = , x 2 = . Desde que a variável x2 pode ser
3 3 3
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 + 5 x2
s.a: 5x1 + 2 x2 ≤ 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 + 2 x2 ≤ 6
x1 + x2 ≤ 4 5
x1 ≤ 0
x1 , x2 ≥ 0
251
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Do subproblema II tem- se como solução, z = 3; x1 = 0 e x 2 = 3 e o subproblema III
7 3
tem como solução z = ; x1 = 1 e x2 = o qual é solução ótima do problema linear
2 2
misto inteiro.
Subproblema I
11 2 7
z = , x1 = , x 2 =
3 3 3
252
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
6. Técnicas de Ramificação do Branch- and-Bound
P1 P2
P1 P2
P3 P4
P3 P4 P5 P6
P5 P6
253
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
° 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
x j = Maximo
~
{ ( x − x ) e (x − x ) }
j j j j (2)
Pn Pn
x1 =7,25 x2 =11,75 x1 =7,25 x 2 =11,75
x1 ou x 2 ? res (x 1 ) = 0,25
res ( x2 ) = 0,75
(a) (b)
Figura 7: Estratégias de divisão de Dank
254
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
ü 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.
x2
Pn
x1 =7,25 x2 =11,75
x 2 ≤ 10 x2 ≥ 12
x 2 = 11
x1
(a) (b)
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.
255
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
ü Método de Taha
A abordagem objetiva inspecionar os 2 n 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 x 0 .
( P0 ) Maximizar z = ∑c j xj
j∈N
sujeito a
∑a ij x j ≤ bi i∈ M
j∈N
xj ≥0
Definindo a vizinhança inteira de x0 por x~0 = ( x01, x 02 ,..., x n0 ) e fazendo
x j = x 0
j + yj , para y j ∈{0,1} , podemos constit uir com P 0 o seguinte programa
linear:
( Q0 ) Maximizar z= ∑c j y j + ∑ c j x 0j
j∈N
sujeito a
∑a ij y j ≤ bi − ∑ a ij x 0j ,i ∈ M
j∈N j∈N
y j ∈ {0,1}
( Pe ) Maximizar z = x1 + x 2
sujeito a
2x1 + x2 ≤ 2
x2 ≤ 1
x1 , x 2 ≥ 0
256
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
x2
2 Hipercubo
(1/2;1)
x2 =1
O 1 x1
2x1 + x2 =2
( Q0 ) Maximizar z = y 1 + y 2 + 1
sujeito a
2 y 1 + y 2 ≤ 2 − (0 + 1)
y 2 ≤ 1 − (0 + 1)
y 1 , y 2 ∈ {0,1}
257
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
7. Soluções Heurísticas para os Problemas de Programação Linear Inteira
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.
258
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
n n −1
A solução deste modelo é tomar = variáveis de decisão xi iguais a 1 e o restante
2 2
n n +1
+1= variáveis de decisão xi iguais a 0. O valor ótimo da função objetivo satisfaz z* =
2 2
n
. De qualquer maneira, resolvendo-se este modelo pelo método de Branch-and-Bound, obtêm-
2
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 é ½.
( n+1)
Teorema: O número de subproblemas resolvidos para n arbitrário(impar) é de no mínimo 2 2 .
P0
x1 =1 x 2 =1/2
x2 ≤ 0 x2 ≥ 1
P1 P6
x1 =1 x3 =1/2 x1 =1/2 x2 =1
x3 ≤ 0 x3 ≥ 1 x1 ≤0 x1 ≥ 1
P2 P3 P7 P1 0
Inviável x1 =1/2 x3 =1 x2 =1 x3 =1/2 Inviável
x1 ≤ 0 x1 ≥ 1 x3 ≤ 0 x3 ≥ 1
P4 P5 P8 P9
Inviável Inviável Inviável Inviável
259
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
n+ 1
2
de 2 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 ava nç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.
260
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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:
Procedimentos
Procedimentos
Aproximativos
Aproximativos
Heurísticas
Heurísticas Relaxações
Relaxações
Estocásticas
Estocásticas Clássicas
Clássicas Analógicas
Analógicas Lagrangeana
Lagrangeana Linear
Linear
-Míopes
-Míopes
.Construtivas
.Construtivas
-Simulated
-SimulatedAnneling
Anneling -Redes
-RedesNeurinais
Neurinais
.Por
.Poreconomia
economia -Subgradiente
-Tabu
-TabuSearch
Search -Computação
-ComputaçãoEvolutiva
Evolutiva -Subgradiente
-Busca
-Buscalocal
local -Dual
-DualAscent
Ascent
.Clássica
.Clássica .Algoritmos
.Algoritmosgenéticos
genéticos -Ajuste
-AjusteMúltiplo
Múltiplo
.Método
.Métododescendente
descendente
.Reativa
.Reativa .Scatter
.ScatterSearch
Search
.Método
.Métodoaleatório
aleatório
-GRASP
-GRASP .Colônia de formigas
.Colônia de formigas
-Particionamento/
-Particionamento/
Grupamento
Grupamento
261
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
16
13
11
10 9 9
8
6 7
4
0
1 2 3 4 S
É 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).
262
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
f(S)
22
20 20
16 16
13
11
10 9 9
8
6 7
4
0
1 2 3 4 S
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.
Máximo
Máximo Global
Máximo
Local
f(S) Local 26
24
23
22
20 20
16 16
13
11
10 9 9
8
6 7
4
0
1 2 3 4 S
263
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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.
264
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
E D S G E R W Y B E DI J K S TR A
265
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
8. Matrizes Totalmente Unimodular e Vértices Inteiros.
3 1
A=
5 2
1 0 − 1
A = 1 1 0
1 0 − 1
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.
266
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Coro lário 2.1: S e j a 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}
267
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
9. Algoritmos Planos - de -Corte
268
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Figura 1
269
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
estrutura do problema que se deseja resolver. Na próxima subseção, abordaremos
esse tipo de planos- de- corte denominados planos- d e- 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.
Min cx
s.a. Ax = b
x j ≥ 0 e inteiro para j = 1,...,p
x j ≥ 0 para j = p+1,...,n.
Primeiros vão assumir que p = n, i.e. o problema é inteiro puro. Temos que
xk = b k – ∑ J∈ NI a k 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:
bk = bk + βk
270
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Temos a inequação correspondente para o corte de Gomory inteiro, abaixo:
ou βk − ∑ a kjx j ≤ 0 ,
J ∈N I
− ∑ a k jx j ≤ − β k
J∈N I
βk
∑ a kj x j + β k − 1 ∑ a kj x j ≥ β k ,
ou J∈ J + J∈ J −
βk
− ∑ akjx j − βk − 1 ∑ akjx j ≤ −βk ,
J∈J+ J∈J −
onde,
J + = {j ∈ NI | ak j ≥ 0 }
J - = {j ∈ N I | a k j < 0}
271
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
9.2. Em detalhes, consideremos a seguinte nomenclatura:
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,
1 1 1 3
3 = 3 + , -1 = −2 + ).
8 8 4 4
Assim
Seja
k i = f im +1 xm + 1 + fi m + 2 xm + 2 + ...+fin xn ≥ 0. (1)
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.
272
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Deste modo, fi0 - k i ≤ 0, isto é, k i ≥ f i0 .
Assim sendo, a existência de integrabilidade é equivalente a ki ≥ f i0 , isto é,
- f im +1 xm + 1 - fi m + 2 xm + 2 - . . .- f in xn + xn + 1 = - f i0 . (4)
onde xn+1 é uma nova variável, o qual deve não negativa e inteira desde que ela é
igual a ki - fi 0 . A restrição (4) deve ser adicionada ao problema. Neste ponto o
valor de xn+1 é negativo.
9.2.2. Heurísticas
273
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Algoritmo:
Passo 0
Inicialização
Solucionar o problema do relaxamento do LP
Teste de otimização
Passo 1
A solução do LP é inteira? Se sim então, pare.
Corte
Passo 2
Escolha uma linha inicialmente ( com nenhum inteiro do lado direito) e gere um corte ,
adicione ao corte a base do quadro.
Passo 3 Pivoteamento
Re-optimize o LP, usando o algoritmo dual simplex. Retorne para o passo 1.
274
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Exemplo:
Achar os inteiros não - negativos x1 , x2 tal que
x1 + x2 ≤ 5
x1 + 5 x2 ≤ 1 0
o qual minimiza - 2 x1 - 9 x2 = z , xi ≥ 0, i = 1, 2.
Graficamente tem- se:
8
4 (1): 1 x1 + 1 x2 = 5
1 (2): 1 x1 + 5 x2 = 10
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Base Valor x1 x2 x3 x4
x3 5 1 1 1 .
x4 10 1 5* . 1
-z 0 -2 -9 . .
x3 3 4* . 1 1
−
5 5
x2 2 1 1 . 1
5 5
-z 18 1 . . 9
− 5
5
x1 15 1 . 5 1
-
4 4 4
x2 5 . 1 1 1
−
4 4 4
-z 1 . . 1 7
−
4 4 4
275
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 1 3
3+ = x1 + (1 + )x3 + (-1 + )x4
4 4 4
onde (4) torna-se
1 3 3
− x3 - x4 + x5 = - (5)
4 4 4
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 15 1 . 5 1 .
4 4 4
x2 5 . 1 1 1 .
−
4 4 4
3 1* 3
x5 − . . − − 1
4 4 4
-z 75 . . 1 7 .
4 4 4
x1 0 1 . . -4 5
x2 2 . 1 . 1 -1
x3 3 . . 1 3 -4
-z 18 . . . 1 1
276
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
8
4 (1): 1 x1 + 1 x2 = 5
2 (3): 1 x1 + 4 x2 = 8
1 (2): 1 x1 + 5 x2 = 10
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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.
277
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
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.
278
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
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
279
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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:
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
280
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Devem-se fazer os passos acima novamente, desta vez escolhendo-se e1 :
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.
281
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 7 1 7
22 22 2
x1 1 0 1 3 9
−
22 22 2
z 0 0 28 15 63
11 11
Sugestão: Aplique o método dos planos cortantes a partir da variável x2 , até encontrar uma solução
inteira ótima.
Aplicando-se o método dos cortes de Gomory, com respeito a variável x2 obtém-se o seguinte
quadro:
282
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Base x1 x2 x3 x4 S1 Solução
x2 0 1 7 1 0 7
22 22 2
x1 1 0 1 3 0 9
−
22 22 2
S1 0 0 7 1 1 1
- - -
22 22 2
Z 0 0 28 15 0 63
11 11
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.
284
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
1
x1 - x2 ≤
2
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
285
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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.
a1t x1 + a t2 x 2 ≤ b1
s.a
d1t x1 + d t2 x 2 ≤ b 2
x1 ≥ 0, x 2 ≥ 0 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.
288
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
20) Seja o PPI
Máx z = x1 + x2 + 4 x3 – x4 + 5 x5
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.
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:
0 1 0 0 1
−1 1 0 0 0
A= 0 0 1 − 1 0 não é totalmente unimodular, pois a sub- matriz
0 0 −1 −1 1
1 0 0 0 0
1 −1
A = possui determinante igual a –2.
− 1 − 1
289
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
21) Considere o seguinte P.P.I.:
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
A
b) é Totalmente Unimodular.
B
c) Se A é uma matriz Totalmente Modular então [I A] é Unimodular.
290
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
24) Determine qual das seguintes matrizes são Totalmente Unimodulares.
1 −1 0 −1 0
1 0 − 1 1 1 0
−1 0 0 0 1
a) A = 1 1 0 ; b) A = 0 1 0 ; A= ;
1 0 − 1 1 1 − 1 0 0 1 1 0
0 0 −1 0 0
0 1 0 0 1
−1 1 0 0 0
A= 0 0 1 −1 0
0 0 −1 −1 1
1 0 0 0 0
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
1 0 0 1 0 0
{x ∈R ;
6 1 1 0 0 1 0 x = b, x ≥ 0} tem somente vértices inteiros quando b
1 0 1 0 0 1
é 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 Tempo
Necessário (h) Necessário (h)
Seção Tipo A Tipo B Disponível/Dia
Cozimento 3 1 4
Pintura 1 2 4
291
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
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
292
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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)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
293
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Bibliografia
294
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira