Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Programação Linear Inteira

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 62

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

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

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 ∑ k i=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 ∑ k i=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) =
{∑ k i=1 λ i x i : ∑ k i=1 λ i = 1, x i ∈ 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}).

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.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 ≤ b 0 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 = 8 x1 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 45
x i ≥ 0, i = 1, 2; inteiros

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.

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 ) = 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 )

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 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 +

Que pode ser representado graficamente na figura 2. A solução ótima


9 15 1
contínua do problema é encontrada em: x1 = ; x 2 = levando a z = 41 .
4 4 4
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:

15  15 
x2 ≥   + 1 ≥ 4 ou x 2 ≤   ≤ 3
4 4

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.

239
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
x2

Soluções Inteiras

A z=5x 1 +8x2
B

5x1 + 9x2 =45

x1 + x 2 =6

O C x1
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

(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 +

A essência do algoritmo de Bra n c h-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- s e
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 (P 1 ) e (P 2 ). 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.

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

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:

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

Figura 5: O efeito de redução do “bound” (limite)

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 ).

De modo semelhante (P0 ) c o m 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

(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.

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:
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 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(b j ) ao (PL) mais
recente resolvido e o outro por anexar a restrição xj ≥ INT(b j ) + 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 Zc p denotando o valor ótimo da
função objetivo para o corrente problema candidato.
Passo 6: S e Zc p não é melhor do que Zb e s t (para o problema de maximização Zc p ≤
Z best ou para um problema de minimização Zc p ≥ Z best ) 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 Zc p = 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.
245
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 d e
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 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 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 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 45
x i ≥ 0, i = 1, 2
165 15 9
cuja solução é z = ; x1 = e x 2 = onde o valor de z é um limite superior para
4 4 4
o custo ótimo. Escolhendo- se aleatoriamente x1 a variável a ser ramificada tem- s e
x1 ≤ 3 e x1 ≥ 4.
Subproblema II = S ubproblema I + restrição x1 ≥ 4
Subproblema II Máx z = 8x1 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 45
x1 ≥ 4
xi ≥ 0, i = 1, 2

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 IV Máx z = 8x1 + 5 x2


s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 45
x1 ≥4
x2 ≥ 2
xi ≥ 0, i = 1, 2
Subproblema V Máx z = 8x1 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 4 5
x1 ≥ 4
x2 ≤ 1
xi ≥ 0, i = 1, 2
subproblema IV tem solução inviável, enquanto que o subproblema V tem solução
365 40
ótima z= ; x1 = e x 2 = 1. Considerando- se a solução x1 do subproblema V
9 9
te m- se os subproblemas VI e VII com x1 ≤ 4 e x1 ≥ 5 .
Subproblema VI Máx z = 8x1 + 5 x2
s.a: x1 + x2 ≤ 6
9 x1 + 5 x2 ≤ 45
x1 ≥4
x2 ≤ 1
x1 ≥ 5
x i ≥ 0, i = 1, 2
247
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Subproblema VII Máx z = 8x1 + 5 x2
s.a: x1 + x2 ≤ 6
x1 + 5 x2 ≤ 45
x1 ≥ 4
x2 ≤ 1
x1 ≤ 4
x i ≥ 0, i = 1, 2
A solução do problema VI é z = 40; x1 = 5 e x 2 = 0 , enquanto que o subproblema
VII tem solução z = 37; x1 = 4 e x 2 = 1. Por outro lado, o subproblema III tem solução
z = 39; x1 = 3 e x 2 = 3 .

Árvore do Algoritmo de Branch-and- Bound Aplicado ao Problema

Subproblema I
165 15 9
z= ; x1 = ; x 2 =
4 4 4

Subproblema II Subproblema III


9 z = 39; x 1 = 3; x 2 = 3
z = 41; x1 = 4; x 2 =
5 Candidato a solução

Subproblema IV Subproblema V
365 40
z= ; x1 = ; x 2 = 1
Solução Inviável 9 9

Subproblema VI Subproblema VII


z = 40; x1 = 5; x 2 = 0 z = 37; x 1 = 4; x 2 = 1
Candidato a solução Candidato a solução

Logo a solução ótima é z = 40; x1 = 5; x 2 = 0 .

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

Subproblema II Subproblema III


z = 3, x1 = 0, x 2 = 3 7 3
z = , x1 = 1, x 2 =
Candidato a solução 2 2
Candidato a solução

252
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 P0

P1 P2
P1 P2
P3 P4

P3 P4 P5 P6
P5 P6

Busca em Profundidade Busca em Largura


Figura 6: Estratégias de divisão

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

pela equação (1), então:

x j = Maximo
~
{ ( x − x ) e (x  − x ) }
j j j j (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á x 2 , uma vez que possui um resíduo

igual a 0,75, maior que o de x1 .

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.

ü 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;
w Escolhe 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.

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}

Podemos exemplificar a formação do problema auxiliar (Q 0 ) com o seguinte


problema:

( Pe ) Maximizar z = x1 + x 2
sujeito a
2x1 + x2 ≤ 2
x2 ≤ 1
x1 , x 2 ≥ 0

Cujo hipercubo unitário do problema está representado na figura 9.

256
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
x2

2 Hipercubo

(1/2;1)
x2 =1

O 1 x1
2x1 + x2 =2

Figura 9: Hipercubo no entorno de (1/2; 1)

Substituindo os valores x 0 = (1 / 2;1); x j =  x 0j  + y j em ( Pe ) t e m o s :

( 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}

Que solucionado nos leva a y1∗ = 0 e y∗2 = 0 . Finalmente podemos calcular o

vértice inteiro ótimo: x1 = 1 / 2 + 0; x 2 = 1 + 0 , ou seja: x ∗ = ( 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

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 + .... + 2 xn ≤ n
xi ∈ {0, 1} para i = 1,...,n
No caso n= 3, tem- s e :
Max z = x1 + x2 + x3
s.a. 2x1 + 2 x2 + 2 x3 ≤ 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.

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 .

A conclusão é que embora, prático, o método de Branch-and-Bound é teoricamente


ineficiente para resolver problemas lineares inteiros.

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

Figura 10: Árvore B&B de (PAT)

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.

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.

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

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.

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

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).

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

Figura 14: Esforço ótimo para a busca heurística

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.

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.

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

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.

265
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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:

3 1
A=  
 5 2 

Uma matriz A é chamado Totalmente Unimodular se o determinante de qualquer


sub- matriz de A é 0, 1 ou - 1.
Exemplo:

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.

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).

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}

Corolário 2.2: Uma matriz A é Totalmente Unimodular se e somente se para


q uaisquer 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).

267
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 -c o r t e 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 -d e- 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.

268
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Figura 1

Note que o fato importante em algoritmos em planos- d e- 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- d e- 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- d e- 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- d e- 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

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.

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
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

akj = akj + αkj

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

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:

β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 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 b1 1 . . a1m+1 A1n
x2 b2 . 1 . a2m+1 a2n
. . . . . . .
. . . . . . .
. . . . . . .
xi bi . . . aim+1 ain
xm bm . . 1 amm+1 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,
1 1 1 3
3 = 3 + , -1 = −2 + ).
8 8 4 4
Assim

b i = nio + fio , a i j = ni j + f ij onde 0 ≤ f ij < 1 para j = 0, m + 1, m + 2,..., n.

Seja

k i = f im +1 xm + 1 + fi m + 2 xm + 2 + ...+fin xn ≥ 0. (1)

Para a i- ésima linha do tableau ótimo nós temos

ni0 + fi0 = xi + (n im +1 + f im+1 ) xm+1 + ...+ ( n in + f in ) xn (2)

tal que por subtração nós obtemos

f i0 - k i = x i + n im +1 xm+1 + nim +2 xm+2 + ... + n in xn - n i 0 (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.

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.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:

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

(1): 1x1 + 1x2 <= 5


(2): 1x1 + 5x2 <= 10

Aplicando-se o método simplex, tem-s e :

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

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
3 1 3
x5 = - + x3 + x4 ≥ 0
4 4 4
3 1 3
isto é, - + (5 - x1 - x2 ) + (10 - x1 - 5 x2 ) ≥ 0
4 4 4
isto é, x1 + 4 x2 ≤ 8.

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

(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.

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

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.

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

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.

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:

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

280
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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.

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.

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 7 1 7
22 22 2
x1 1 0 1 3 9

22 22 2
z 0 0 28 15 63
11 11

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

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 1 1 32
-
7 7 7
x3 0 0 1 1 22 11
-
7 7 7
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 1 1 0 32
-
7 7 7
x3 0 0 1 1 22 0 11
-
7 7 7
S2 0 0 0 1 4
-
7
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.
283
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 + 2 4 x2 + 10x3 + 2 x4
s.a 2x1 + 4 x2 + 3 x3 + 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.

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

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.

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.

12) Seja o problema inteiro

(PI) Máx z = c1t x1 + c t2 x 2

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.

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.
286
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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
287
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
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 *1 = x *2 = x *3 = x *4 = x *5 = x *6 = x *7 = x *8 = x *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.

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.

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:

 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.:

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 - 4 x2
s.a. 2x1 + x2 ≤ 5
- 4 x1 + 4 x2 ≤ 5
xi ≥ 0; x i 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.

 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

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.

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 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

293
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira
Bibliografia

1) Scharage, L., Optimization Modeling with LINGO, LINDO SYSTEMS INC,


USA, 2 a Edition, 1999;
2) Scharage, L., Optimization Modeling with LINDO, LINDO SYSTEMS INC,
USA, 5 a 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.

294
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira

Você também pode gostar