Programação Linear Inteira

62
Pesquisa Operacional / Capítulo 6 / Programação Linear Inteira 233 Capítulo 6 Programação Linear Inteira 1. Introdução A programação linear inteira é uma eficiente ferramenta na modelagem e solução de um grande número de problemas. São eles provenientes das mais diversas áreas, tais como recolhimento de lixo, planejamento de sistemas de telecomunicações, cortes em uma, duas ou três dimensões, etc. Os problemas de programação linear inteiro de grande porte são freqüentemente impossíveis de serem resolvidos diretamente através de softwares comerciais. Em tais casos a relaxação lagrangeana, combinada com a otimização por subgradientes é muitas vezes usada para achar cotas inferiores para o valor ótimo da função objetivo. Estas cotas podem ser usadas, por exemplo, no método de Branch-and-Bound [Salkin and Mathur. 89], ou apenas para medir a qualidade das soluções viáveis. Tais propriedades encontram-se atualmente incorporadas em softwares comerciais como [CPLEX3.0 97], [OSL1.2 90], conforme descrito em MINTO [Nemhauser et alii. 94]. Outras estratégias também são consideradas: obtenção de cotas superiores, uma maior eficiência nas rotinas sobre a geração de cortes além do uso do processamento paralelo, veja, por exemplo [Nemhauser. 94] para o primeiro e [Lee. 94] para o último. A relaxação lagrangeana foi utilizada por [Held and Karp. 70] e [Held and Karp. 71] com seus trabalhos sobre problemas do caixeiro viajante; os métodos de Branch-and-Bound e enumeração implícita tiveram considerável ganho em [Geoffrion 74] com a relaxação lagrangeana; em [Fisher. 81], encontramos várias questões norteadoras sobre a relaxação lagrangeana nos problemas lineares inteiros, dentre estas como calcular os multiplicadores de Lagrange, de que maneira escolher dentre as várias relaxações do problema e como obter soluções viáveis para o problema primal. Recentes técnicas para resolver o dual lagrangeano relaxado de problemas de otimização combinatória, em um tempo polinomial, utilizando como subrotina o algoritmo dos Elipsóides 77[Khachian. 79] ou o

description

Material sobre Programação Linear inteira aplicada à pesquisa operacional

Transcript of Programação Linear Inteira

Page 1: Programação Linear Inteira

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

233

Capítulo 6

Programação Linear Inteira

1. Introdução

A programação linear inteira é uma eficiente ferramenta na modelagem e

solução de um grande número de problemas. São eles provenientes das mais

diversas áreas, tais como recolhimento de lixo, planejame nto de sistemas de

telecomunicações, cortes em uma, duas ou três dimensões, etc.

Os problemas de programação linear inteiro de grande porte são

freqüentemente impossíveis de serem resolvidos diretamente através de softwares

comerciais. Em tais casos a re laxação lagrangeana, combinada com a otimização

por subgradientes é muitas vezes usada para achar cotas inferiores para o valor

ótimo da função objetivo. Estas cotas podem ser usadas, por exemplo, no método

de Branch-and- Bound [Salkin and Mathur. 89], ou apenas para medir a qualidade

das soluções viáveis. Tais propriedades encontram- se atualmente incorporadas em

softwares comerciais como [CPLEX3.0 97], [OSL1.2 90], conforme descrito em

MINTO [Nemhauser et alii . 94]. Outras estratégias também são consideradas:

obtenção de cotas superiores, uma maior eficiência nas rotinas sobre a geração de

cortes além do uso do processamento paralelo, veja, por exemplo [Nemhauser. 94]

para o primeiro e [Lee. 94] para o último.

A relaxação lagrangeana foi utilizada por [Held and Karp. 70] e [Held and

Karp. 71] com seus trabalhos sobre problemas do caixeiro viajante; os métodos de

Branch-and- Bound e enumeração implícita tiveram considerável ganho em

[Geoffrion 74] com a relaxação lagrangeana; em [Fisher. 81], encontramos várias

questões norteadoras sobre a relaxação lagrangeana nos problemas lineares

inteiros, dentre estas como calcular os multiplicadores de Lagrange, de que

maneira escolher dentre as várias relaxações do problema e como obter soluções

viáveis para o proble ma primal. Recentes técnicas para resolver o dual lagrangeano

relaxado de problemas de otimização combinatória, em um tempo polinomial,

utilizando como subrotina o algoritmo dos Elipsóides 77[Khachian. 79] ou o

Page 2: Programação Linear Inteira

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

234

algoritmo de Vaidya [Vaidya. 90], tem sido ap resentadas desde 1994, com

[Bertsimas and Orlin. 94].

Outras metodologias de decomposição usam heurísticas lagrangeanas,

combinando a solução do dual lagrangeano, através do método de subgradientes,

juntamente com soluções primais viáveis heurísticas. Estas técnicas foram

aplicadas a problemas de fluxo em redes “multicommodity” em [Holmberg. 96a],

[Holmberg and Yuan. 96b], [Holmberg and Hellstrand. 96c], a problemas de

localização capacitada em [Holmberg and Ling. 97b] e [Holmberg et alii . 97].

2 . Conceitos Preliminares

O objetivo desta seção é deixar claro alguns termos que empregaremos no

decorrer deste capítulo. Os conceitos a serem abordados serão em Teoria Poliedral.

3. Definições em Teoria Poliedral Definição 2.1 Um conjunto de pontos x1 , x2 ,.. . ,xk ∈Rn é dito linearmente

independente se a solução única para ∑ki=1 λ i xi = 0 é λ i = 0 para i = 1,2,. . . ,k.

Definição 2.2 Um conjunto de pontos x1 , x2 , ..., xk ∈ Rn é dito ser afim

independente se a solução única para ∑ki=1 λ i xi = 0 e ∑k

i=1 λ i = 0 é λ i = 0 para i =

1,2,...,k.

Definição 2.3 Seja S = {x1 , x2 , . . . ,xn} um conjunto de pontos em Rn. A envoltória

convexa de S, denotada por conv(S), é o conjunto de pontos dados por conv(S) =

{∑ki=1 λ i x i : ∑k

i=1 λ i = 1, xi ∈ S, λ i ∈ R e λ i ≥ 0 ∀ i = 1, 2, 3, . . . ,n}.

Definição 2.4 Um poliedro P ⊆ Rn é um conjunto de pontos que satisfaz um

número finito de desigualdades lineares, isto é, P = {x ∈ Rn : Ax ≤ b}.

Definição 2.5 Dado um Poliedro P = { x ∈ Rn : Ax ≤ b}, o fecho inteiro de P

consiste na envoltória convexa dos vetores inteiros de P, isto é, P= conv({x ∈ P: x

é inteiro}).

Page 3: Programação Linear Inteira

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

235

Definição 2.6 Um poliedro P ⊆ Rn é dito limitado se existem vetores l e u ∈ Rn ,

tal que, l ≤ x ≤ u para todo x ∈ P. Um poliedro limitado é denominado um polítipo.

Definição 2.7 A desigualdade π x ≤ π 0 é denominada uma desigualdade válida para

o poliedro P ⊆ Rn se ela é satisfeita por todos os pontos de P.

Definição 2.8 Um conjunto ƒ ⊆ P = { x: Ax ≤ b} é uma face de P, se e somente

se, para algum subsistema A0 x ≤ b0 de Ax ≤ b nós temos ƒ = {x ∈ P : A0 x = b0}.

Uma fase é dita ser própria se ƒ ≠ ∅ e ƒ ≠ P.

Definição 2.9 Seja ƒ uma face própria de um poliedro P. Então ƒ é uma faceta, se e

somente se, dim( ƒ) = dim(P) – 1.

4. Problemas de Programação Linear Inteira

Definição 3.1: Um problema de programação linear da forma Máx{c t x; Ax ≤ b, x ≥ 0,

x inteiro} com x, c ∈Rn , b∈Rm e A∈Rm x n é denominado problema de programação

linear inteira.

Exemplo 1: Seja o seguinte problema de programação Linear Inteira, conforme

ilustrado na figura 1.

Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x i ≥ 0, i = 1, 2; inteiros

Page 4: Programação Linear Inteira

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

236

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 200

1

2

3

4

5

6

7

8

9

10

11

: 1 x1 + 1 x2 = 6

: 9 x1 + 5 x2 = 40

Payoff: 8 x1 + 5 x2 = 36

Optimal Decisions(x1,x2): ( 2, 4): 1x1 + 1x2 <= 6: 9x1 + 5x2 <= 40

Figura 1

4.1. Propriedades:

a) Máx{c t x; Ax ≤ b, x ≥ 0} ≥ Máx{c t x; Ax ≤ b, x ≥ 0, x inteiro}

b) Mín{c t x; Ax ≤ b, x ≥ 0} ≤ mín{c t x; Ax ≤ b, x ≥ 0, x inteiro}

c) O arredondamento da solução de um Problema de Programação Linear não

implica na solução do Problema de Programação Linear Inteira

Exemplo:

Mín z = x1

s .a 15x1 - 20x2 ≤ 4

21x1 - 20x2 ≥ 10

x i ≥ 0, i =1, 2 int eiros

d) É falso afirmar: Se um modelo de Programação Linear Inteira tem solução então

o problema linear correspondente também tem solução ótima.

Exemplo:

Máx z = x1

s .a x1 - π x2 = 0 (π pi)

xi ≥ 0, i =1, 2 inteiros

Page 5: Programação Linear Inteira

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

237

Existem diversas técnicas desenvolvidas para a busca da solução inteira dos

problemas de programação linear, das quais podemos citar:

°Técnicas de Enumeração:

-Separação e avaliação progressiva ou “Branch- and-Bound” (B&B);

-Enumeração implícita;

-Restrições “Surrogate”.

° Técnicas de Cortes:

-Cortes Inteiros (primais e duais);

-Cortes Combinatórios;

-Cortes de interseção;

-Método de decomposição de Benders.

° Técnicas Híbridas:

-“Branch-and-Cut”;

° Teoria de Grupo.

Page 6: Programação Linear Inteira

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

238

5. O Conceito de Branch-and-Bound

O espaço solução de um problema de programação inteiro geral pode ser

assumido limitado. Podemos assumir que o número de pontos inteiros é limitado e

em assim sendo investigaremos um número finito de pontos. O caminho mais

simples para resolver o problema inteiro é enumerar todos os pontos, descartando

as inviabilidades e sempre mantendo a solução viável correspondente ao melhor

valor ótimo. Quando a enumeração esta completa encontra a solução ótima(se

existir), associado ao melhor valor da função objetivo.

Se a solução do problema contínuo é inteira, então esta corresponde a

solução do problema inteiro. Caso contrário, a técnica de Branch- and- Bound é

aplicada implementando duas operações básicas:

(1) Ramificação → Particionamos o espaço das soluções continuas sobre

subproblemas os quais são também continuo. O propósito deste partionamento é

eliminar do espaço continuo soluções não viáveis do problema inteiro.

(2) Limitação → Assumindo que o problema original é do tipo maximização, o

valor da função objetivo para cada subproblema criado por um ramo gera um limite

superior sobre o valor da função objetivo.

O método denominado de “Branch- and- Bound” (B&B) baseia- se na idéia de

desenvolver uma enumeração “inteligente” dos pontos candidatos à solução ótima

inteira de um problema. O termo branch refere-se ao fato de que o método efetua

partições no espaço das soluções. O termo bound ressalta que a prova da

otimalidade da solução utiliza-se de limites calculados ao longo da enumeração.

Definido:

{ }( ) | , ,P cx Ax b x x Z= = ≥ ∈ +Maximizar 0

e

{ }( ) | , ,P cx Ax b x x R= = ≥ ∈ +Maximizar 0

Definindo ainda V P∗ ( ) eV P∗ ( ) os valores das funções objetivo no ótimo de ( )P e ( )P respectivamente temos que:

V P V P∗ ∗≤( ) ( )

Page 7: Programação Linear Inteira

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

239

Considerando ainda qualquer solução viável ~x de (P), então:

V x V P∗ ∗≤(~) ( ) e dessa forma V P∗ ( )é um limite superior para (P), e qualquer de suas soluções viáveis. Se x é a solução ótima de ( )P tal que x j é não inteiro teremos: x xj j≥ + 1ou x xj j≤ (1)

em toda a solução viável de (P). Dessa forma o problema (P) pode ser dividido em

dois novos problemas (P1 ) e (P2 ) em que a envoltória convexa C de (P1 ) ∪ (P2 )

ou Conv((P1 ) ∪ (P2 )) é estritamente contida na envoltória de (P) ou Conv ((P1) ∪

(P2) )⊂Conv ((P)).

Vamos exemplificar o processo de divisão da envoltória convexa de (P) com

o seguinte exemplo:

+∈

≤+≤+

+=

Zx,x

45x9x56xx

:asujeitox8x5zMaximizar

21

21

21

21

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

contínua do problema é encontrada em: x x1 294

154

= =; levando a z = 4114

.

Desenvolvendo a idéia de separação da envoltória convexa em relação a variável x2 podemos organizar a seguinte equação disjuntiva:

x ou x2 2154

1 4154

3≥

+ ≥ ≤

A equação a equação anterior produz duas restrições disjuntivas que, quando

acrescidas ao problema original são capazes de criar dois novos problemas que não

mais possuem a solução ótima contínua x em sua envoltória convexa.

Page 8: Programação Linear Inteira

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

240

x2

x1O

z=5x1 +8x2

5x1 + 9x2 =45

x1 + x2 =6

Soluções Inteiras

AB

C

Figura 2: Solução gráfica do exemplo

A figura 3 mostra o efeito da aplicação da equação disjuntiva gerada em

relação a variável x2 , no problema exemplo.

x2

x1O

A

B

C

(P2 )

(P1 )

Figura 3: Resultado do “branch” (divisão)

Page 9: Programação Linear Inteira

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

241

Com a consideração da disjunção o problema original será reduzido então a

dois novos problemas, a saber:

+∈

=

Zx

xx

bAx

cxzP

i

ii0

1

:aSujeitoMaximizar)(

+∈

+≥

=

Zx

xx

bAx

cxzP

i

ii 1

:a SujeitoMaximizar)(

0

2

A essência do algoritmo de Bra nch-and-Bound é a seguinte:

1)Resolver a relaxação linear do problema. Se a solução é inteira, então se obtêm a

solução ótima. Caso contrário, cria-se dois novos subproblemas ramificando-se

uma variável fracionária.

2) Um subproblema não é ramificado qua ndo:

Todas as variáveis na solução são inteiras,

A solução do subproblema é inviável,

3) Escolha um subproblema onde há variáveis fracionárias e ramifique sobre uma

delas. Repita até que não tenhamos variáveis fracionárias.

A estratégia de separação cria novos e mais restritos problemas que,

normalmente, serão de mais fácil solução. No exemplo o problema (P) é separado

em dois problemas (P1) e (P2 ). A estratégia de separação pode ser reaplicada a

esses problemas em função, por exemplo, da variável x1 . Vamos enumerar através

de uma árvore as possibilidades de solução dos problemas que serão gerados pela

divisão de (P). Na árvore da figura 4 cada nível representa uma separação ou

“branch” em relação a uma variável.

Page 10: Programação Linear Inteira

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

242

P0x1 =2,25 x2 =3,75 z=41,25

P2

x1 =1,8 x2 =4,0 z=41

P1x1 =3,0 x2 =3,0 z=39

P3

Inviável P4

x1 =1,0 x2 =4,25 z=40,4

P5 x1 =0 x2 =5 z=40

P6

x1 =1,0 x2 =4,0 z=37

x2 4,0≥ x 2≤3,0

x1 2,0≥ x 1≤1,0

x2 ≥5,0 x 1≤4,0

Figura 4: Árvore branch do exemplo

Para entendermos o efeito do “bound” suponhamos que tenhamos escolhido a

seqüência de “branchs” da figura 5, deixando de solucionar os problemas

marcados:

P0x1 =2,25 x2 =3,75 z=41,25

P2x1 =1,8 x2 =4,0 z=41

P1 Aguarda

P3 Aguarda

P4x1 =1,0 x2 =4,25 z=40,4

P5 x1 =0 x2 =5 z=40

P6 Aguarda

x2 4,0≥ x 2≤3,0

x1 2,0≥ x 1≤1,0

x2 ≥5,0 x 1≤4,0

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

Page 11: Programação Linear Inteira

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

243

As soluções cont ínuas são um limite superior para o valor de z0∗ , sob as

condições estabelecidas nos vértices da árvore, enquanto que as soluções inteiras

geram um limite inferior. Como (P4 ), um problema com solução contínua possui

z = 40 4, e (P5 ), um problema com solução inteira, possui z = 40 , o problema (P6 )

não precisa mais ser solucionado, uma vez que entre 40,4 e 40 não existe a

possibilidade de uma outra solução inteira melhor que 40 (40≤ z0∗ ≤40,4). O

problema (P2 ) com z=41 pode dar origem, contudo, ainda a um problema com uma

solução inteira de valor 41 (40 ≤ z0∗ ≤41), o que obriga ao desenvolvimento de (P3 ) .

De modo semelhante (P0 ) com z =41,25 pode dar origem a um problema com a

solução também de valor 41 (40 ≤ z0∗ ≤ 41,25), o que obriga ao desenvolvimento de

(P1) .

A redução pelo limite inferior (bound) de apenas um vértice da árvore de

enumeração do exemplo pode parecer pequena, mas devemos lembrar que esse

problema é pequeno. Em muitos casos reais o poder de simplificação do limite

inferior (ou superior no problema de minimização) se mostra dramático, sendo

extremamente útil no processo de solução.

5.2. O Método de Branch-and-Bound e sua Forma Geral

Podemos observar 4 fases do método:

a) Fase de Seleção

b) Fase de Ramificação

c) Fase de Limitação

d) Fase de Aprofundamento

Fase de Seleção

a) Um subproblema que não esta ainda particionado (veja as fases(b) e (d)), é

selecionado para continuar o procedimento. Existem três possibilidades:

a1) Backtracking - A ramificação ocorre sobre o nó criado mais recentemente da

árvore de Branch- and- Bound; se o nó é aprofundado (veja (d)) então novos

procedimentos de Backtrakings são desenvolvidos. Backtraking é chamado de Busca

LIFO( Last- in- first-out).

Page 12: Programação Linear Inteira

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

244

a1 2) A busca FIFO(First- in- first-out) procede a busca sobre um nó não ramificado.

a2) Jumptracking - Aplicamos a ramificação sobre o ramo com o melhor valor

finito da função objetivo. O Jumptracking é chamado de b usca BF(Best- first).

Em geral, FIFO e jumptracking apresentam menos ramos do que o Backtracking.

Enterrando, mais requerem armazenagem, em termos computacionais do que os

outros procedimentos.

Fase de Ramificação

b) A solução de um subproblema, representado por um nó k da árvore de Branch-and-

Bound, é particionada em subconjuntos mutuamente exclusivos; cada um destes

subconjuntos é representado por um nó conectado por arco, denominado nó k. Se duas

ou mais variáveis não são inteiras então aplicamos as seguintes estratégias de

ramificação:

b1) Escolha da variável não inteira pelo maior interesse econômico.

b2) Muitos códigos computacionais, escolhem a ramificação sobre a variável não

inteira com o menor índice.

Fase de Limitação

No caso de um modelo de má ximo, limites superiores sobre a solução ótima

de um determinado subproblema são determinados. Por exemplo, a relaxação das

variáveis inteiras, determina um problema com variáveis contínuas onde sua

solução fornece um limite superior sobre a solução ótima.

Fase de Aprofundamento

Os subproblemas são excluídos, quando a solução inteira é encontrada ou

solução inviável.

Page 13: Programação Linear Inteira

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

245

5.3. Algoritmo de Branch-and-Bound

Passo 1: Relaxe todas as restrições de integralidade no problema linear inteiro

(PLI) e resolva o pr oblema linear(PL). Se a solução ótima do problema linear

relaxado satisfaz as condições de integralidade, pare, esta é a solução inteira

ótima.

Passo 2: Se o problema resolvido é de maximização seja zbest =−∞ . Se o problema

resolvido é de minimização seja zbest =∞ . (Em geral, zbest representa o valor da

função objetiva da melhor solução inteira conhecida).

Passo 3: Seja xj representando uma variável que viola a condição de integralidade na

solução do problema que foi por último resolvido e seja b j representando seu valor não

inteiro. Seja INT(b j) representando o maior inteiro que é menor do que bj. Criar dois

novos problemas candidatos: um por anexar a restrição xj ≤ INT(bj) ao (PL) mais

recente resolvido e o outro por anexar a restrição xj ≥ INT(bj) + 1 também ao (PL)

mais recente resolvido. Colocar ambos destes novos (PL) em uma lista de problemas

candidatos a serem resolvidos.

Passo 4: Se a lista de problemas candidatos é vazio, vá para o passo 9. Caso

contrário, remova um problema candidato da lista, relaxe qualquer condição de

integralidade no problema e resolva ele.

Passo 5: Se não existe solução para o corrente problema candidato( isto é, ele é

inviável), volte ao passo 4. Caso contrário, seja Zcp denotando o valor ótimo da

função objetivo para o corrente problema candidato.

Passo 6: Se Zcp não é melhor do que Zbes t (para o problema de maximização Zcp ≤

Zbest ou para um problema de minimização Zcp ≥ Zbest ) vá para o passo 4.

Passo 7: Se a solução do corrente problema candidato não satisfaz as condições

originais de integralidade, vá para o passo 3.

Passo 8: Se a solução do corrente problema candidato não satisfaz as condições

originais de integralidade, uma melhor solução inteira foi encontrada. Assim sendo,

seja Zcp = Zbest e mantenha a solução obtida para este problema candidato. Então

retorne para o passo 4.

Passo 9: Pare. A solução ótima foi encontrada e tem um valor para a função

objetiva dada pelo valor corrente de Zbest.

Page 14: Programação Linear Inteira

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

246

5.3. Exercícios Resolvidos

Exemplo 1: Consideremos a seguinte aplicação:

A fabrica de moveis “Pedro Gabriel” produz mesas e cadeiras. Uma mesa requer 1

hora de trabalho e 9dm2 de madeira enquanto que a cadeira requer 1 hora de

trabalho e 5dm2 de madeira. Tem- se disponível 6 horas de trabalho e 45dm2 de

madeira. O lucro da produção de uma mesa é de R$ 8 e uma cadeira é de R$ 5.

Formule e resolva o problema linear inteiro de modo a maximizar o lucro.

Solução: Sejam x1 = o número de mesas e x2 o número de cadeiras, variáveis

inteiras.

Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x i ≥ 0, i = 1, 2; inteiros

Relaxando- se as variáveis de integralidade tem- se o seguinte problema linear (PL)

Subproblema I Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x i ≥ 0, i = 1, 2

cuja solução é z x= = =1654

154

941; e x2 onde o valor de z é um limite superior para

o custo ótimo. Escolhendo-se aleatoriamente x1 a variável a ser ramificada tem-se

x1 ≤ 3 e x1 ≥ 4.

Subproblema II = S ubproblema I + restrição x1 ≥ 4

Subproblema II Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x1 ≥ 4 xi ≥ 0, i = 1, 2

Page 15: Programação Linear Inteira

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

247

Subproblema III = S ubproblema I + restrição x1 ≤ 3

Subproblema III Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x1 ≤ 3

xi ≥ 0, i = 1, 2

Do subproblema II tem- se como solução, z x= = =41 4951; e x2 e subproblema III

tem-se z x= = =39 31 2; x . Da variável x2 tem-se x2 ≤ 1 e x2 ≥ 2 do subproblema II

Subproblema IV Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x1 ≥ 4

x2 ≥ 2

xi ≥ 0, i = 1, 2

Subproblema V Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x1 ≥ 4

x2 ≤ 1

xi ≥ 0, i = 1, 2

subproblema IV tem solução inviável, enquanto que o subproblema V tem solução

ótima z x= = =3659

409

11; e x 2 . Considerando-se a solução x1 do subproblema V

tem-se os subproblemas VI e VII com x1 ≤ 4 e x1 ≥ 5 .

Subproblema VI Máx z = 8x1 + 5x2

s .a: x1 + x2 ≤ 6

9x1 + 5x2 ≤ 45

x1 ≥ 4

x2 ≤ 1

x1 ≥ 5

x i ≥ 0, i = 1, 2

Page 16: Programação Linear Inteira

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

248

Subproblema VII Máx z = 8x1 + 5x2

s.a: x1 + x2 ≤ 6

x1 + 5x2 ≤ 45

x1 ≥ 4

x2 ≤ 1

x1 ≤ 4

x i ≥ 0, i = 1, 2

A solução do problema VI é z x= = =40 5 01; e x2 , enquanto que o subproblema

VII tem solução z x= = =37 4 11; e x2 . Por outro lado, o subproblema III tem solução

z x= = =39 3 31; e x2 .

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

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

Subproblema I

z = 1654

154

94

; ; x x1 2= =

Subproblema II

z = 41 495

; ; x x1 2= =

Subproblema IV Solução Inviável

Subproblema V

z = 3659

409

1; ; x x1 2= =

Subproblema III z = 39 3 3; ; x x1 2= =

Candidato a solução

Subproblema VI z = 40 5 0; ; x x1 2= = Candidato a solução

Subproblema VII z = 37 4 1; ; x x1 2= = Candidato a solução

Page 17: Programação Linear Inteira

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

249

Exemplo 2: Seja o PLI abaixo,

mín z = 10x1 + 9x2

s .a x1 ≤ 8

x2 ≤ 10

5x1 + 3x2 ≥ 45

x i ≥ 0, i = 1, 2; inteiros

Denominando por PL-1 o problema linear, sua solução ótima tem valores

ótimos Z1 = 95; x1 = 8 e x2 = 53

.

Esta solução não satisfaz à condição das variáve is serem inteiras, mas

permite ilustrar os aspectos fundamentais da técnica de Branch- and-Bound. Por

outro lado

Z1 = 95 é um limite inferior para a função objetivo, ou seja, ao se forçar soluções

inteiras, o valor de Z1 não pode se reduzir além de Z1 = 95 (delimitação inferior).

Por outro lado, o valor x2 = 53

123

= sugere dividir (ramificar) o problema em dois

outros, tendo em vista que x2 deve ser um número inteiro, a saber: x2 ≤ 1 e x2 ≥ 2.

A incorporação das restrições cria os problemas PL-2 e PL- 3, respectivamente:

mín z = 10x1 + 9x2 mín z = 10x1 + 9x2

s .a x1 ≤ 8 s .a x1 ≤ 8

x2 ≤ 10 x2 ≤ 10

5x1 + 3x2 ≥ 45 5x1 +3x2 ≥ 45

x2 ≤ 1 x2 ≥ 2

xi ≥ 0, i = 1, 2; inteiros xi ≥ 0, i = 1, 2; inteiros

A resolução do subproblemas PL-2 e PL-3 graficamente ou pelo método simplex

tem soluções ótimas PL-2: inviável e PL-3: Z3 = 96; x1395

745

2= = = e x2

A inviabilidade de PL-2 mostra que não há mais o que explorar nessa

ramificação; ela esta concluída. A resolução de PL-3 mostra que Z3 = 96 é o novo

limite inferior para o problema proposto, em face da inviabilidade de PL-2. Como

x1= 745

o problema deve ser ramificado em dois outros, com restrições

correspondentes x1 ≤ 7 e x1 ≥ 8. Tais problemas são denominados PL-4 e PL- 5,

respectivamente:

Page 18: Programação Linear Inteira

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

250

mín z = 10x1 + 9x2 mín z = 10x1 + 9x2

s .a x1 ≤ 8 s .a x1 ≤ 8

x2 ≤ 10 x2 ≤ 10

5x1 + 3x2 ≥ 45 5x1 +3x2 ≥ 45

x2 ≤ 1 x2 ≥ 2

x1 ≤ 7 x1 ≥ 8

xi ≥ 0, i = 1, 2; inteiros xi ≥ 0, i = 1, 2; inteiros

As soluções ótimas dos problemas (PL-4) e (PL-5) podem ser obtidas

facilmente a partir da solução ótima de PL-3, de maneira a reduzir o esforço

computacional. As soluções ótimas são:

PL-4: Z = 100; x1 = 7 e x2 = 107

e PL-5: Z = 98; x1 = 8 e x2 = 2

PL-1

Z1 = 95; x1 = 8; x2 = 123

PL-2; Inviável. PL-3

Z3 = 96; x1 =745

; x2 = 2

PL-4

Z4 = 100; x1 =7; x2 = 103

PL-5 Z3 = 98; x1 =8; x2 = 2

Page 19: Programação Linear Inteira

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

251

Exemplo 3: Consideremos o seguinte problema de programação linear inteira

Máx z = 2x1 + x2

s .a. 5x1 + 2x2 ≤ 8

x1 + x2 ≤ 3

x1 , x2 ≥ 0; x1 inteiro

De modo similar ao problema de programação inteira pura, aplica-se o

algoritmo de Branch- and- Bound ao problema de programação linear mista inteira.

Assim sendo, relaxando-se a condição de integralidade da variável x1 e

resolvendo-se o problema:

Máx z = 2x1 + x2

s .a. 5x1 + 2x2 ≤ 8

x1 + x2 ≤ 3

x1 , x2 ≥ 0

tem-se como solução ótima z = = =113

23

73

, , x x1 2 . Desde que a variável x2 pode ser

fracionária, nos não ramificaremos x2 . Então ramificaremos a variável x1 e a

partir desta tem-se os se guintes subproblemas II e III.

Subproblema II = S ubproblema I + restrição x1 ≥ 1

Máx z = 2x1 + 5x2

s .a: 5x1 + 2x2 ≤ 8

x1 + x2 ≤ 3

x1 ≥ 1

x1 , x2 ≥ 0

Subproblema III = S ubproblema I + restrição x1 ≤ 0

Máx z = 2x1 + x2

s .a: 5x1 + 2x2 ≤ 6

x1 + x2 ≤ 45

x1 ≤ 0

x1 , x2 ≥ 0

Page 20: Programação Linear Inteira

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

252

Do subproblema II tem-se como solução, z = = =3 0 31; x e x2 e o subproblema III

tem como solução z = = =72

1321; x e x2 o qual é solução ótima do problema linear

misto inteiro.

Subproblema I

z = = =113

23

73

, , x x1 2

Subproblema II z = = =3 0 3, , x x1 2 Candidato a solução

Subproblema III

z = = =72

132

, , x x1 2

Candidato a solução

Page 21: Programação Linear Inteira

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

253

6. Técnicas de Ramificação do Branch-and-Bound

Na maioria das ocasiões as técnicas de solução são especializadas para os

inúmeros tipos de problemas de programação inteira, desenvolvendo- se abordagens

e algoritmos específicos para cada situação. Apresentaremos agora duas técnicas

exatas muitas empregadas na solução de problemas de PLI. Um dos pontos

fundamentais para o sucesso do B&B é a qualidade do limite ger ado pela solução

inteira. Em várias situações esses limites podem ser alcançados através de

procedimentos heurísticos. A qualidade do limite alcançado normalmente depende,

para cada problema, da estratégia de desdobramento da árvore de busca. Existem

basic amente duas grandes estratégias de divisão ou “branch”.

O B&b é uma técnica de ampla aplicação. A idéia geral é sujeita a inúmeras

adaptações e estratégias de implementação. Basicamente os aspectos envolvidos

são:

° Técnicas de desenvolvimento da árvore de enumeração:

-Busca em profundidade;

-Busca em largura;

-Variantes híbridas.

A figura 6 apresenta o aspecto das árvores desenvolvidas pela busca em

profundidade e pela busca em largura.

P0

P2P1

P4P3

P6P5

P0

P4P3

P1

P6P5

P2

Busca em Profundidade Busca em Largura Figura 6: Estratégias de divisão

Page 22: Programação Linear Inteira

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

254

° Técnicas de formação da á rvore (escolha da variável de divisão):

-Variante de Dankin (1960);

-Variante de Lang e Doing (1965);

-Variante de Spielberg (1968);

-Método das penalidades (1965);

-Método de Taha (1971)

-Estratégias Dinâmicas (1976);

-Outras variantes.

° Técnicas complementares para obtenção dos limites

-Relaxação Lagrangeana;

-Algoritmos heurísticos (com uso de meta- heurísticas);

-Cortes.

ü Variante de Dank

Esse autor propõe que a variável a ser escolhida para a divisão em um certo

nível da árvore seja a que possuir o maior resíduo em relação a solução inteira, ou

seja, considerando que ~x j seja a variável que escolheremos para a divisão proposta

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

( ) ( ){ }~x x x e x xj j j j j= − −Maximo (2)

Se a solução cont ínua do nó a ser expandido se apresenta como na figura 7

(a), então, pela proposta de Dank o nó ~x j será x2 , uma vez que possui um resíduo

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

Pnx1 =7,25 x2 =11,75

x1 ou x2 ?

Pnx1 =7,25 x2 =11,75

res (x1 ) = 0,25res ( x2 ) = 0,75

(a) (b)

Figura 7: Estratégias de divisão de Dank

Page 23: Programação Linear Inteira

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

255

ü Variante de Land e Doig

Essa abordagem sugere que a árvore de enumeração seja expandida em vários valores

simultâneos para a variável de divisão, como mostra a figura 8.

Pnx1 =7,25 x2 =11,75

(b)

x2

x1

x2 12≥

x 2 = 11

x 2 ≤ 10

(a) Figura 8: Estratégias de divisão de Land e Doing

ü Variante de Spielberg

Desenvolve o nó com maior valor de z∗ e o mais recentemente calculado,

usando o critério de Land e Doig para aumentar a retirada de espaço contínuo no

entorno do nó pesquisado. Trata-se de uma busca em profundidad e associada ao

critério de Land e Doig.

ü Método das Penalidades

Essa estratégia pode ser descrita nos seguintes passos:

wDetermina uma estimativa do decréscimo da função objetivo quando

obrigamos as variáveis a assumir valores inteiros;

wEscolhe o nó na lista dos nós em aberto com a menor estimativa de

decréscimo (utiliza um pivoteamento associado a variável ~x j );

wAproveita as reduções possíveis quando a estimativa de decréscimo

ultrapassa o limite inferior corrente.

Page 24: Programação Linear Inteira

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

256

ü Método de Taha

A abordagem objetiva inspecionar os 2n vértices do hipercubo unitário

contendo a solução ótima do sub-problema de PL. Considerando o problema P0

abaixo descrito a estratégia de Taha é buscar a solução de um programa linear em

função dos vértices do hipercubo unitário vizinho a 0x .

0

asujeito

Maximizar)( 0

∈≤

=

j

iNj

jij

Njjj

x

Mibxa

xczP

Definindo a vizinhança inteira de x0 por ~ ( , ,..., )x x x xn0

01

02 0= e fazendo

x x yj j j= +0 , para y j ∈{ , }0 1 , podemos constit uir com P0 o seguinte programa

linear:

}1,0{

,

asujeito

Maximizar)(

0

00

∈−≤

+=

∑∑

∑∑

∈∈

j

Njjiji

Njjij

jjNj

jj

y

Mixabya

xcyczQ

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

problema:

0,

122

asujeitoMaximizar )(

21

2

21

21

≤≤+

+=

xx

xxx

xxzPe

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

Page 25: Programação Linear Inteira

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

257

x2

x1O2x1 + x2 =2

x2 =1

Hipercubo2

1

(1/2;1)

Figura 9: Hipercubo no entorno de (1/2; 1) Substituindo os valores x x x yj j j

0 01 2 1= = +( / ; ); em ( )Pe t e m o s :

}1,0{,

)10(1)10(22

asujeito1Maximizar)(

21

2

21

210

+−≤+−≤+

++=

yy

yyy

yyzQ

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

vértice inteiro ótimo: x x1 21 2 0 1 0= + = +/ ; , ou seja: x ∗ = ( , )01

Page 26: Programação Linear Inteira

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

258

7. Soluções Heurísticas para os Problemas de Programação Linear Inteira Enquanto os problemas lineares contínuos possuem no Simplex um algoritmo

muito eficiente para a solução exata, os problemas lineares discretos, salvo alguns

casos particulares, normalmente carecem da mesma sorte. O estudo de Garey e

Johnson (ver Garey e Johnson (1979) ) é um marco para o entendimento dos

obstáculos que se interpõem entre uma possível solução teórica para um problema

de programação discreta e sua implementação prática através dos instrumentos

computacionais da atualidade. O cerne da dificuldade da abordagem exata dos

problemas denominados “NP-Árduos”, que, por sinal, representam uma grande

parte dos problemas de PLI realmente interessantes, está na explosão combinatória

dos métodos enumerativos. É fácil perceber que uma árvore de B&B pode envolver

um número da ordem de 2n nós, onde n representa a altura (distância entre o nó raiz

e o nó mais extremo, também denominado folha da árvore) da árvore de

enumeração. Para que possamos entender melhor essa dificuldade vamos

solucionar o problema (PAT) que se segue:

Seja n um número ímpar ≥ 3. Considere o seguinte problema da mochila:

(PAT) M áx x1 + . . . . + xn

s .a 2x1 + .... + 2xn ≤ n

xi ∈ {0, 1} para i = 1,. . . ,n

No caso n= 3, tem-se :

Max z = x1 + x2 + x3

s.a. 2x1 + 2x2 + 2x3 ≤ 3

x i ∈ {0, 1}, i = 1,..,3

Como notícia informamos que (PAT) é um modelo que pertence a uma classe

de problemas de programação linear inteira denominada Problemas da Mochila,

que se caracteriza por possuir apenas uma restrição e será estudado a seguir. Se

decidirmos solucionar (P AT) através da utilização de uma estratégia B&B básica a

árvore de enumeração seria a representada na figura 10.

No método de Branch-and- Bound, o número de subproblemas pode ser

exorbitantemente grande. Mostraremos que o número de subproblemas a ser

resolv ido é em geral uma função exponencial do número de variáveis.

Page 27: Programação Linear Inteira

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

259

A solução deste modelo é tomar n2

= n − 1

2 variáveis de decisão xi iguais a 1 e o restante

n2

+ 1 = n + 1

2 variáveis de decisão xi iguais a 0. O valor ótimo da função objetivo satisfaz z* =

n2

. De qualquer maneira, resolvendo-se este modelo pelo método de Branch-and-Bound, obtêm-

se um tempo computacional exorbitantemente grande, de fato o número de subproblemas resolvidos

é exponencial em n.

Os: Se as soluções de um problema lineares não são inteiras, então exatamente uma das variáveis de

valor não inteiro é ½.

Teorema: O número de subproblemas resolvidos para n arbitrário(impar) é de no mínimo 21

2( )n+

.

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

ineficiente para resolver problemas lineares inteiros.

P0x1 =1 x2 =1/2

x2 1≥x 2 ≤ 0

P6x1 =1/2 x2 =1

P1x1 =1 x3 =1/2

P3x1 =1/2 x3 =1

P2

Inviável P7x2 =1 x3 =1/2

x 3 ≤ 0 x3 1≥

x 1 ≤ 0

P4

Inviável P5

Inviável

x1 1≥

P8

Inviável P9

Inviável

P10 Inviável

x 1 ≤ 0 x1 1≥

x 3 ≤ 0 x3 1≥

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

Page 28: Programação Linear Inteira

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

260

Para concluir da inviabilidade de (PAT) foi necessário desenvolver 11 problemas. É fácil

provar que esse algoritmo aplicado a um problema com n variáveis desenvolverá no mínimo cerca

de 21

2n+

nós. Se o problema possuir 201 variáveis (os problemas reais podem possuir da ordem de

milhares ou milhões de variáveis), então a árvore será da ordem de 2100 nós. Um computador capaz

de examinar 1,5 trilhões de nós por segundo dessa árvore levaria cerca de 537 milhões de anos para

esgotar todas as possibilidades possíveis !! Apesar de todo o avanço das técnicas atuais que,

obviamente, fariam melhor que desenvolver a árvore de enumeração completa de (PAT) para

determinar a inviabilidade do problema, ainda permanece a dificuldade imposta pela explosão

combinatória desse tipo de problema. Em virtude dessa realidade, nos últimos anos tem se

verificado o surgimento de um significativo conjunto de técnicas e algoritmos computacionalmente

muito eficientes mas que não garantem a solução ótima do problema de programação linear inteira.

Esses algoritmos são denominados de “heurísticos” ou aproximativos (para detalhes

complementares ver o anexo em complexidade de algoritmos).

O termo “heurística” é derivado do Grego “heuriskein” que significa descobrir ou achar.

Mas o significado da palavra em Pesquisa Operacional vai um pouco além de sua raiz etimológica.

Podemos dizer que uma heurística, no sentido dado ao termo, refere-se a um método de busca de

soluções em que não existe qualquer garantia de sucesso. O sucesso do método pode ser expresso

quantitativa ou qualitativamente. Em um problema de otimização o sucesso pode ser representado

pela obtenção da solução ótima. Alguns autores entendem que a possibilidade de fracasso seja

extensiva até para a obtenção de uma solução viável. Não comungamos dessa opinião. Definiremos

o termo da seguinte forma:

Uma heurística é uma técnica que busca alcançar uma boa solução utilizando um esforço computacional considerado razoável, sendo capaz de garantir a viabilidade ou a otimalidade da solução encontrada ou ainda, em muitos casos, ambas, especialmente nas ocasiões em que essa busca partir de uma solução viável próxima ao ótimo. As heurísticas iniciaram historicamente seu desenvolvimento a partir de problemas

específicos. As primeiras heurísticas relatadas na literatura pretendiam a solução de problemas

específicos e não eram, vias de regra, passíveis de serem utilizadas em outros problemas. As

heurísticas clássicas de roteamento são um bom exemplo disso.

Page 29: Programação Linear Inteira

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

261

Podemos também considerar que os primeiros métodos gerais clássicos estavam associados

a estratégias de enumeração incompleta, solução parcial ou relaxações. Dentre as muitas

classificações possíveis para as heurísticas sugerimos a constante da figura 11:

ProcedimentosAproximativosProcedimentosAproximativos

HeurísticasHeurísticas RelaxaçõesRelaxações

LinearLinearLagrangeanaLagrangeanaClássicasClássicas

-Dual Ascent-Dual Ascent-Subgradiente-Ajuste Múltiplo

-Subgradiente-Ajuste Múltiplo

-Míopes .Construtivas .Por economia-Busca local .Método descendente .Método aleatório-Particionamento/ Grupamento

-Míopes .Construtivas .Por economia-Busca local .Método descendente .Método aleatório-Particionamento/ Grupamento

EstocásticasEstocásticas

-Simulated Anneling-Tabu Search .Clássica .Reativa-GRASP

-Simulated Anneling-Tabu Search .Clássica .Reativa-GRASP

AnalógicasAnalógicas

-Redes Neurinais-Computação Evolutiva .Algoritmos genéticos .Scatter Search .Colônia de formigas

-Redes Neurinais-Computação Evolutiva .Algoritmos genéticos .Scatter Search .Colônia de formigas

Figura 11: Classificação das abordagens aproximativas

Utilizando-se um diagrama semelhante ao sugerido poderemos examinar o comportamento

típico de uma busca heurística míope. A figura 12 representa, dentro dos círculos, o valor final da

solução obtida no estágio i da busca. Nesse caso podemos visualizar o esforço de busca na medida

em que as possíveis combinações entre as variáveis n e n-1 são exploradas. No gráfico é facilmente

perceptível que, na medida do crescimento do número de opções, representado pelo comprimento

das colunas do diagrama, o esforço cresce exponencialmente. No caso da figura 11, apenas a

vizinhança imediata de uma solução (ou configuração) é explorada (a de maior valor no estágio i da

busca). Entendemos por vizinhança de uma configuração as configurações que diferem da

configuração base pelo valor atribuído a uma variável.

Page 30: Programação Linear Inteira

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

262

1 S

10

6

9

13

8

11

16

4

9

02 3 4

7

Figura 12: Tomada de decisão míope

É claro que podemos melhorar o exame das soluções vizinhas e reduzir o grau de “miopia”

da tomada de decisão. A figura 12 mostra essa possibilidade. Nesse caso a exploração estende-se

agora para a vizinhança de duas configurações (as duas melhores segundo o critério do valor de

f(s) ). A penalidade que devemos pagar pela remoção da “miopia” é o crescimento do número de

configurações admitidas como candidatas à exploração. Obviamente se examinássemos todas as

configurações encontraríamos a solução ótima, mas é exatamente esse enorme trabalho que

desejamos evitar. O que se deseja é uma solução de compromisso com o risco de não encontrar a

solução ótima. Existem dois procedimentos que permitem a gerência desse risco:

• Buscar a análise de um número crescente de combinações entre as variáveis selecionadas

em um determinado estágio da decisão e as variáveis dos estágios seguintes (intensificação ou

melhoria na qualidade da solução);

• Buscar considerar um número cada vez maior de variáveis em cada nível (diversificação

ou aumento do alcance (diâmetro) da busca).

Page 31: Programação Linear Inteira

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

263

1

f(S)

S

10

20

6

9

13

8

11

16

4

9

02 3 4

7

2220

16

Figura 13: Incrementando a decisão míope

Podemos perceber visualmente como a inclusão da segunda configuração parcial mais

valorada em cada nível (diversificação), cresce com o número de combinações para a definição da

configuração (intensificação) representada pelas setas. O aumento do esforço de busca trás seus

resultados: as decisões 1 e 3 da figura 13 não podem ser mais consideradas apenas “gulosas”. Se o

procedimento adotado for “suficientemente inteligente” podemos encontrar o equilíbrio entre a

diversificação e a intensificação, e caminhar, economicamente em relação ao esforço de busca,

através dos máximos (ou mínimos) locais até o máximo (ou mínimo) global, como mostra a figura

14. Nesse caso a “inteligência” foi expressa pela estratégia de explorar as três soluções mais

interessantes a cada estágio. Infelizmente não podemos deduzir a priori qual seria essa estratégia

“inteligente” pois ela depende da instância de cada problema.

1

f(S)

S

10

20

6

9

13

8

11

16

4

9

02 3 4

7

2220

16

2324

26Máximo

Local

MáximoLocal

MáximoGlobal

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

Page 32: Programação Linear Inteira

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

264

A figura 14 procura resumir as várias abordagens conhecidas para os

procedimentos heurísticos de solução. Na linha clássica é bastante comum como

anteriormente ressaltamos, que as heurísticas explorem casuisticamente a estrutura

do problema, sem que, normalmente, se possa definir claramente uma estratégia

universal de solução. No caso das chamada meta- heurísticas, que envolvem as

chamadas heurísticas estocásticas e analógicas, existe invariavelmente uma

estratégia geral de solução, cabendo apenas adapta- la ao caso específico.

Na atualidade os procedimentos heurísticos são também muito empregado em

conjunto com os métodos exatos, especialmente para produzirem limites e soluções

viáveis de boa qualidade.

Page 33: Programação Linear Inteira

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

265

EEEDDDSSSGGGEEERRR WWWYYYBBBEEE DDDIIIJJJKKKSSSTTTRRRAAA

Homem brilhante, Edsger Wybe Dijkstra

colecionou vários prêmios e honras, como o Prêmio

ACM Turing, em 1972 e o Prêmio AFIPS Harry Goode

Memorial, em 1974. Ele é sócio honorário estrangeiro

da Academia americana de Artes e Ciências, sócio da

Academia Real de Artes e Ciências dos Países Baixos e da sociedade de Computação

Britânica, além de Doutor Honoris Causa de Ciência pela Universidade da Rainha de

Belfast.

As áreas de maior interesse de Dijkstra são: correção de programas, metodologia

matemática, algoritmos e sistemas. Ele concentra-se em dar forma aerodinâmica ao

argumento matemático para aumentar nossos poderes de razoamento, em particular, pelo

uso de técnicas formais.

Edsger Wybe Dijkstra foi um contribuinte principal na década de 50 para o

desenvolvimento do ALGOL (ALGOrithmic Languagem), uma linguagem de programação

de nivel alto que se tornou um modelo de clareza e rigor matemático, pois é muito eficiente

para resolver uma grande classe de problemas numéricos, porém inadequada para o

processamento de dados não-numéricos.

Dijkstra é considerado um dos exponentes principais da ciência e arte de

linguagens de programação, e tem contribuído bastante para a nossa compreensão da

estrutura, representação, e implementação destas. Os seus quinze anos de publicações

estendem-se desde artigos sobre a teoria dos grafos para manuais básicos, textos

expositivos, até contemplações filosóficas no campo de linguagens de programação. Em

1956, criou um eficiente algoritmo para otimizar os caminhos em grafos e minimizar

expansão de árvores.

O conhecido algoritmo de Dijkstra para determinar o caminho mais curto em um

grafo, determinado um ponto de começo para qualquer outro ponto, é descrito em muitos

livros, incluindo o muito completo: Introdução para Algoritmos, Thomas Cormen, Charles

Leiserson, e Ronald Rivest, Colina de McGraw, 1990.

Page 34: Programação Linear Inteira

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

266

8. Matrizes Totalmente Unimodular e Vértices Inteiros.

Definição: Uma matriz A de posto r é chamado Unimodular se todos os elementos

de A são inteiros, e o determinante de qualquer sub- matriz de ordem r é 0, 1 ou -1 .

Exemplo:

A=

2513

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

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

Exemplo:

−=

101011101

A

Observações:

1) Qualquer matriz Totalmente Unimodular consiste somente de elementos 0, ±1

2) Totalmente Unimodular implica em Unimodularidade.

3) Qualquer sub - matriz de uma matriz Totalmente Unimodular é ela mesmo

Totalmente Unimodular.

Teore ma 1: Unimodularidade e Vértices Inteiros

Seja A uma matriz inteira (m, n) de posto completo m, e F = {x ∈ Ån ; Ax = b, x ≥

0} não vazio. Então A é Unimodular se e somente se para cada vetor inteiro b ∈

Ån o conjunto F tem vértices inteiros.

Teorema 2: Tot almente Unimodular e Vértices Inteiros

Seja A uma matriz inteira, e F = {x ∈ Ån ; Ax ≤ b, x ≥ 0} não vazio. Então A é

Totalmente Unimodular se e somente se para cada vetor inteiro b ∈ Ån o conjunto

F tem vértices inteiros.(Hoffman e Kruskal, 1956).

Page 35: Programação Linear Inteira

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

267

Coro lário 2.1: Seja A uma matriz Totalmente Unimodular, b e c vetores inteiros.

Então os seguintes problemas lineares têm solução inteira:

Máx{c t x; Ax ≤ b} = Mín{yt b; yt A = c, y ≥ 0}

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

quaisquer vetores b e c, ambos os lados da equação(de dualidade linear):

Máx{c t x; Ax ≤ b, x ≥ 0} = Mín{yt b; yt A ≥ c, y ≥ 0}

são atingidos por vetores inteiros x e y(se forem finitos).

Teorema 3: Condição Suficiente para Totalmente Unimodular

Qualquer matriz A com elementos 0, ± 1 é Totalmente Unimodular se:

1. Cada coluna de A contem não mais do que dois elementos inteiros e não- nulos.

2. As linhas de A podem ser particionadas sobre dois subconjuntos tal que:

i) Se uma coluna contém dois inteiros com o mesmo sinal, então as linhas

correspondentes pertencem a diferentes subconjuntos, e,

ii) Se uma coluna contém dois inteiros com sinal opostos, então as linhas

correspondentes pertencem ao mesmo subconjunto.

Diversas caracterizações da matriz Totalmente Unimodular foram

obtidas nas décadas de 60 e 70, nenhuma das quais fornece um algoritmo

polinomial para testar total- unimodularidade. Em 1980, P. D. Seymour, “

Decomposition of regular matroids”, Journal of Combinatorial Theory(B) 28, 305-

359 (1980) car acterizou matrizes totalmente unimodulares usando decomposição

de matróides. Estes resultados foram utilizados por W. H. Cunningham, J.

Edmonds, “ A Combinatorial Decomposition Theory”, Candian Journal of

Mathematics 32, 734-765 (1980) que apresentaram um algoritmo de

reconhecimento de matrizes Totalmente Unimodular. O algoritmo mais rápido que

se conhece é devido a K. Truemper, “A Decomposition Theory for Matrizes V.

Testing of Matriz Total Unimodulary”, Journal of Combinatorial Theory (B) 49,

241-281 (19 80).

Page 36: Programação Linear Inteira

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

268

9. Algoritmos Planos -de -Corte

Os algoritmos planos-de-corte procuram reduzir o espaço de soluções

contínuas viáveis com o intuito de aproximar o poliedro obtido pela relaxação

linear do poliedro que representa a envoltória convexa das soluções inteiras [22].

Um dos resultados fundamentais da Programação Linear (PL) no qual os

algoritmos planos-de -cor te se baseiam é o seguinte: se um programa de PL tiver

um valor ótimo finito, então existe pelo menos uma solução ótima que é um vértice

do poliedro descrito pelo sistema linear associado ao problema.

Sendo assim, se fosse possível encontrar a descrição completa de conv(S),

através de um sistema de desigualdades lineares, então o problema de PLI poderia

ser diretamente resolvido por um algoritmo de PL, por exemplo, Simplex ou

Métodos de pontos interiores . Tipicamente em problemas NP-Completos, o número

de desigualdades que descreve completamente o conv(S) é exponencial (no

número de variáveis). Sendo assim, fica inviável o uso computacional da descrição

completa de conv(S), mesmo se esta fosse conhecida. Parte-se então para a

descrição parcial da envoltória convexa na esperança de que ao resolvermos a

relaxação linear associada a conv(S) encontraremos uma solução ótima inteira.

O princípio básico de um algoritmo planos -de-corte é resolver o problema

de PL dado pela relaxação das restrições de integralidade, e o fortalecimento da

relaxação linear através do acréscimo de sucessivas desigualdades válidas à

formulação.

Essas novas desigualdades melhoram a descr ição da envoltória convexa

eliminando porções do espaço de solução, tal que, nenhuma solução viável inteira

seja excluída [23]. Para ilustrar esse método observamos a Figura 1 [22].

Consideremos que o problema representado na figura seja de maximização. As

linhas cheias representam desigualdades válidas que descrevem o poliedro inicial

(relaxação linear), a seta indica a direção da função objetiva, os círculos indicam

pontos inteiros, os círculos cheios representam soluções viáveis, e por último, a

linha tracejada representa a desigualdade acrescentada à relaxação linear que

elimina a solução fracionária sem eliminar qualquer solução (viável) inteira.

Page 37: Programação Linear Inteira

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

269

Figura 1

Note que o fato importante em algoritmos em planos-de-corte reside em

termos um método apropriado para identificar desigualdades que são válidas para o

problema original, mas violadas pela solução fracionária atual. Assim, se nós

conhecemos uma classe de desigualdades válidas, nós devemos ser hábeis para

verificar se uma desigualdade dessa classe é violada, ou seja, devemos resolver um

problema de separação. Nós detalharemos melhor com problemas de separação no

final da seção onde estabeleceremos uma relação com problemas de otimização.

Citaremos agora alguns tipos de planos-de-corte comumente utilizados quando

trabalhamos com algoritmo de planos-de-corte.

(a) Planos -de -Corte Geral: Os planos-de- corte que representaremos nessa seção

podem ser aplicados a qualquer problema de programação linear inteira pura ou

mista. Como esses tipos de planos-de-corte não são específicos a um dado

problema eles recebem o nome de planos-de-corte gerais ou de propósito gerais.

Gomory introduziu os primeiros algoritmos de planos-de-corte. Naquele trabalho,

ele provou que o algoritmo termina após um número finitos de passos e que o

programa inteiro pode ser resolvido através da geração de um número também

finito de planos-de-corte. Infelizmente, os planos-de-corte de Gomory não se

mostraram eficazes em experimentos práticos. OS planos-de-corte eram “fracos” e

causavam instabilidade numérica, e apenas em problemas de pequeno porte era

possível atingir a otimalidade. Os planos-de-corte gerais são muitos limitados

quando utilizamos e, problemas de otimização combinatória. Para esse tipo de

problema recomenda-se o emprego de planos-de- corte projetados de acordo com a

Page 38: Programação Linear Inteira

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

270

estrutura do problema que se deseja resolver. Na próxima subseção, abordaremos

esse tipo de planos-de-corte denominados planos-de-corte faciais.

(b)Planos -de -Corte Facial: são desigualdades válidas definidoras de facetas para

um poliedro P. Como as facetas não são dominadas por quaisquer outras

desigualdades válidas e ainda fornecem uma descrição completa e não redundante

do poliedro, elas podem ser consideradas como sendo os melhores tipos de plano-

de-corte. Entre tanto, dois aspectos devem ser considerados: não é triviais,

encontrar desigualdades válidas definidoras de facetas, e segundo, mesmo que

tenhamos uma classe de desigualdades válidas devemos ser capazes de projetar

algoritmos de separação para encontrá- las.

9.1. Corte de Gomory

Na década de 50 Gomory sugeriu um método de planos-de-corte conhecido

como cortes de Gomory (sendo o método precursor dos planos-de-corte), com o

objetivo de resolver problemas de programação linear inteira. Nós mostraremos

abaixo o processo de obtenção de tais cortes.

Considere o problema de programação linear inteiro misto: Min cx

s.a. Ax = b

xj ≥ 0 e inteiro para j = 1,...,p

xj ≥ 0 para j = p+1,...,n.

Primeiros vão assumir que p = n, i .e. o problema é inteiro puro. Temos que

xk = bk – ∑ J∈NI ak j xj , i = 1,..,m,

é a linha correspondente para variável básica fracionária do tableau corrente ótimo

(simplex) da relaxação LP, onde NI é o conjunto de índices das variáveis não-

básicas.

Definindo:

kjkjkj

kkk

aa

bb

α+=

β+=

Page 39: Programação Linear Inteira

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

271

Temos a inequação correspondente para o corte de Gomory inteiro, abaixo:

ou

Para problemas onde p < n, i .e. onde o problema é misto a inequação de

formação do corte é alterada já que algumas das variáveis (não-básicas) podem não

ser restringida para va lores inteiros [4]; temos assim a inequação abaixo para

problemas mistos:

ou

onde,

J+ = {j ∈ NI | akj ≥ 0 }

J- = {j ∈ NI | akj < 0}

β k − ≤∈∑ a x 0 ,k j

J N I

j

− ≤ −∈∑ a xk j j

J N I

β k

,kJJ

jkjk

k

JJjkj xa

1xa β≥

−−ββ

++

∑∑∈∈

,kJJ

jkjk

k

JJjkj xa

1xa β−≤

−−ββ

−+

− ∑∑∈∈

Page 40: Programação Linear Inteira

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

272

9.2. Em detalhes, consideremos a seguinte nomenclatura:

Suponhamos que nos resolvemos o problema pelo método simplex e que a

solução ótima é dada pelo TABLEAU mostrado abaixo

Base Valor x1 x2 xm xm+1 xn

x1

x2

.

.

.

xi

xm

b1

b2

.

.

.

bi

bm

1

.

.

.

.

.

.

.

1

.

.

.

.

.

.

.

.

.

.

.

1

a1m+1

a2m+1

.

.

.

aim+1

amm+1

A1n

a2n

.

.

.

ain

amn

-z -z0 . . . cm+1 cn-1 cn

Suponhamos ainda que bi não é inteiro de modo que a solução não satisfaz a

hipótese de integrabilidade. Na linha onde a integrabilidade não é satisfeita nos

dividimos o coeficiente no maior inteiro + uma parte fracionária. (por exemplo,

318

318

234

= + = − +, -114

).

Assim

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

Seja

k i = fim +1 xm+1 + fim + 2 xm +2 + . . .+fin xn ≥ 0. (1)

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

ni0 + fi0 = xi + (nim +1 + fim+1 )xm+1 + . . .+ (nin + fin )xn (2)

tal que por subtração nós obtemos

fi0 - k i = xi + nim +1 xm+1 + nim +2 xm+2 + ... + nin xn - n i0 (3)

Agora desde que todas nos sas variáveis devem ser inteiras o RHS de (3)

deve ser inteiro e não pode ser maior do que fi0 desde que ki ≥ 0. Porém isto é uma

fração, tal que lado direito(R.H.S), não pode ser zero.

Page 41: Programação Linear Inteira

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

273

Deste modo, fi0 - k i ≤ 0, isto é, k i ≥ fi0 .

Assim sendo, a existência de integrabilidade é equivalente a ki ≥ fi0 , isto é,

- fim +1 xm+1 - fim + 2 xm +2 - . . .- fin xn + xn+1 = - fi0 . (4)

onde xn+1 é uma nova variável, o qual deve não negativa e inteira desde que ela é

igual a ki - fi0 . A restrição (4) deve ser adicionada ao problema. Neste ponto o

valor de xn+1 é negativo.

9.2.1. Escolha da Linha Inicial

Cortes podem ser gerados usando como linha inicial:

Qualquer linha no quadro do LP ótimo a qual não tenha nenhum inteiro do lado

direito;

Um múltiplo de qualquer linha no quadro do LP;

Uma combinação linear de linhas do quadro LP.

Por outro lado, nenhuma regra é conhecida garantirá escolha da linha mais fácil

forçando um melhor corte.

9.2.2. Heurísticas

Diversas heurísticas foram desenvolvidas e implementadas objetivando a escolha

da linha inicial. Dentre elas podemos citar:

Page 42: Programação Linear Inteira

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

274

Passo 1

Passo 2

Passo 3

Algoritmo: Inicialização

Solucionar o problema do relaxamento do LP

Teste de otimização

A solução do LP é inteira? Se sim então, pare.

Corte

Escolha uma linha inicialmente ( com nenhum inteiro do lado direito) e gere um corte ,

adicione ao corte a base do quadro.

Pivoteamento

Re-optimize o LP, usando o algoritmo dual simplex. Retorne para o passo 1.

Passo 0

Page 43: Programação Linear Inteira

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

275

Exemplo:

Achar os inteiros não - negativos x1 , x2 tal que

x1 + x2 ≤ 5

x1 + 5x2 ≤ 10

o qual minimiza -2x1 - 9x2 = z , xi ≥ 0, i = 1, 2. Graficamente tem- se:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160

1

2

3

4

5

6

7

8

(1): 1 x1 + 1 x2 = 5

(2): 1 x1 + 5 x2 = 10

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

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

Base Valor x1 x2 x3 x4

x3

x4

5

10

1

1

1

5*

1

.

.

1

- z 0 -2 -9 . .

x3

x2

3

2

45

*

15

.

1

1

. −

15

15

- z 18 −

15

. .

95

x1

x2

154

54

1

.

.

1

54

−14

- 14

14

-z −

14

. .

14

74

Page 44: Programação Linear Inteira

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

276

Evidentemente os valores ótimos x1 e x2 não são inteiros. A equação (1) para

a solução ótima x1 toma a forma

3 + 34

= x1 + (1 + 14

)x3 + (-1 + 34

)x4

onde (4) torna-se

−14

x3 - 34

x4 + x5 = - 34

(5)

onde x5 é uma variável inteira não negativa. Esta é uma restrição o qual

adicionaremos ao problema, utilizaremos o método dual simplex.

Base Valor x1 x2 x3 x4 x5

x1

x2

x5

154

54

−34

1

.

.

.

1

.

54

−14

−14

*

14

14

−34

.

.

1

-z 754

. . 1

4

74

.

x1

x2

x3

0

2

3

1

.

.

.

1

.

.

.

1

-4

1

3

5

-1

-4

-z 18 . . . 1 1

A solução ótima inteira é x1 = 0 , x2 = 2 e z = -18.

Em termos das variáveis x1 e x2 a restrição adicional (5) toma a forma

x5 = - 34

+ 14

x3 + 34

x4 ≥ 0

isto é, - 34

+ 14

(5 - x1 - x2 ) + 34

(10 - x1 - 5x2) ≥ 0

isto é, x1 + 4x2 ≤ 8.

Page 45: Programação Linear Inteira

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

277

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160

1

2

3

4

5

6

7

8

(1): 1 x1 + 1 x2 = 5

(2): 1 x1 + 5 x2 = 10

(3): 1 x1 + 4 x2 = 8

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

10. Exercícios Resolvidos

1. Considere o seguinte P.P.I.:

Máx z = 14x1 + 18x2

s.a. -x1 + 3x2 ≤ 6

7x1 + x2 ≤ 35

xi ≥ 0; xi inteiro (i = 1, 2)

A tabela ótima para o P.P.L. é dada na Tabela 2. Use o algoritmo dos planos cortantes para

resolver o P.P.I.

Base x1 x2 s1 s2 b

X2 0 1 7/22 1/22 7/2

X1 1 0 -1/22 3/22 9/2

z 0 0 56/11 30/11 126

Tabela 2.

Page 46: Programação Linear Inteira

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

278

Solução: Escolhendo-se arbitrariamente x2, temos:

x2 + (0 + 7/22)s1 + (0+1/22)s2 = (3 + 1/2) Fazendo a equação do corte:

-7/22s1 - 1/22s2 + s3 = -1/2 Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:

Base x1 x2 s1 s2 s3 b

x2 0 1 7/22 1/22 0 7/2

x1 1 0 -1/22 3/22 0 9/2

s3 0 0 -7/22 * -1/22 1 -1/2

z 0 0 56/11 30/11 0 126

x2 0 1 0 0 1 3

x1 1 0 0 1/7 -1/7 32/7

s1 0 0 1 1/7 -22/7 11/7

z 0 0 0 2 112/7 118

Devem-se fazer os passos acima novamente, desta vez escolhendo-se s1 :

s1 + (0 + 1/7)s2 + (-4 + 6/7)s3 = (1 + 4/7)

Fazendo a equação do corte: -1/7s2 - 6/7s3 + s4 = -4/7

Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:

Base x1 x2 s1 s2 s3 s4 b

x2 0 1 0 0 1 0 3

x1 1 0 0 1/7 -1/7 0 32/7

s1 0 0 1 1/7 -22/7 0 11/7

s4 0 0 0 -1/7 * -6/7 1 -4/7

z 0 0 0 2 112/7 0 118

x2 0 1 0 0 1 0 3

x1 1 0 0 0 -1 1 4

s1 0 0 1 0 -4 1 1

s2 0 0 0 1 6 -7 4

z 0 0 0 0 4 14 110

Logo a solução ótima para este P.P.I. é z = 110; V.B.: x1 = 4; x2 = 3; s1 = 1; s2 = 4; V.N.B.: s3 = s4 = 0.

Page 47: Programação Linear Inteira

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

279

2. Considere o seguinte P.P.I.:

Mín z = 6x1 + 8x2

s.a. 3x1 + x2 ≤ 4

x1 + 2x2 ≤ 4

xi ≥ 0; xi inteiro (i = 1, 2)

A tabela ótima para o P.P.L. é dada na Tabela 3. Use o algoritmo dos planos cortantes para resolver

o P.P.I.

Tabela 3.

Base x1 x2 e1 e2 b

x1 1 0 -2/5 1/5 4/5

x2 0 1 1/5 -3/5 8/5

z 0 0 -4/5 -18/5 88/5

Solução Escolhendo-se arbitrariamente x2, temos:

x2 + (0 + 1/5)e1 + (-1 + 2/5)e2 = (1 + 3/5) Fazendo a equação do corte:

-1/5e1 - 2/5e2 + e3 = -3/5 Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:

Base x1 x2 e1 e2 e3 b

x1 1 0 -2/5 1/5 0 4/5

x2 0 1 1/5 -3/5 0 8/5

e3 0 0 -1/5 * -2/5 1 -3/5

Z 0 0 -4/5 -18/5 0 88/5

x1 1 0 0 1 -2 2

x2 0 1 0 -1 1 1

e1 0 0 1 2 -5 3

Z 0 0 0 2 -4 20

Logo a solução ótima para este P.P.I. é z = 20; V.B.: x1 = 2; x2 = 1; e1 = 3; V.N.B.: e2 = e3= 0.

Page 48: Programação Linear Inteira

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

280

3. Considere o seguinte P.P.I:

Mín z = 2x1 - 4x2

s.a. 2x1 + x2 ≤ 5

-4x1 + 4x2 ≤ 5

xi ≥ 0; xi inteiro (i = 1, 2)

A tabela ótima para o P.P.L. é dada na Tabela 4. Use o algoritmo dos planos cortantes para resolver

o P.P.I.

Base x1 x2 e1 e2 b

x1 1 0 1/3 -1/12 5/4

x2 0 1 1/3 1/6 5/2

z 0 0 -2/3 -5/6 -15/2

Tabela 4

Solução:

Escolhendo-se arbitrariamente x2, temos:

x2 + (0 + 1/3)e1 + (0 + 1/6)e2 = (2 + 1/2)

Fazendo a equação do corte:

-1/3e1 - 1/6e2 + e3 = -1/2

Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:

Base x1 x2 e1 e2 e3 b

x1 1 0 1/3 -1/12 0 5/4

x2 0 1 1/3 1/6 0 5/2

e3 0 0 -1/3 * -1/6 1 -1/2

z 0 0 -2/3 -5/6 0 -15/2

x1 1 0 0 -1/4 1 3/4

x2 0 1 0 0 1 2

e1 0 0 1 ½ -3 3/2

z 0 0 0 -1/2 -2 -13/2

Page 49: Programação Linear Inteira

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

281

Devem-se fazer os passos acima novamente, desta vez escolhendo-se e1 :

e1 + (0 + 1/2)e2 + (-3 + 0)e3 = (1 + 1/2) Fazendo a equação do corte:

-1/2e2 + e4 = -1/2

Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:

Base x1 x2 e1 e2 e3 e4 b

x1 1 0 0 -1/4 1 0 3/4

x2 0 1 0 0 1 0 2

e1 0 0 1 1/2 -3 0 3/2

e4 0 0 0 -1/2 * 0 1 -1/2

z 0 0 0 -1/2 -2 0 -13/2

x1 1 0 0 0 1 -1/2 1

x2 0 1 0 0 1 0 2

e1 0 0 1 0 -3 1 1

e2 0 0 0 1 0 -2 1

Z 0 0 0 0 -2 -1 -6

Logo a solução ótima para este P.P.I. é z = -6; V.B.: x1 = 1; x2 = 2; e1 = 1; e2 = 1; V.N.B.: e3 = e4 =

0.

Page 50: Programação Linear Inteira

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

282

11. Exercícios Propostos

1) Seja o problema de programação linear inteira

Máx z = 7x1 + 9x2

s.a -x1 + 3x2 ≤ 6

7x1 + x2 ≤ 35

x1, x2 ≥ 0, inteiros

cuja solução ótima do problema de programação linear é dado pelo tableau abaixo:

Base x1 x2 x3 x4 solução

x2 0 1 722

1

22

72

x1 1 0 −

122

3

22

92

z 0 0 2811

1511

63

Sugestão: Aplique o método dos planos cortantes a partir da variável x2, até encontrar uma solução

inteira ótima.

2) Seja o problema de programação linear inteira

Máx z = 7x1 + 9x2

s.a -x1 + 3x2 ≤ 6

7x1 + x2 ≤ 35

x1, x2 ≥ 0, inteiros

cuja solução ótima do problema de programação linear é dado pelo tableau abaixo

Base x1 x2 x3 x4 solução

x2 0 1 722

1

22

72

x1 1 0 −

122

3

22

92

z 0 0 2811

1511

63

Aplicando-se o método dos cortes de Gomory, com respeito a variável x2 obtém-se o seguinte

quadro:

Page 51: Programação Linear Inteira

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

283

Base x1 x2 x3 x4 S1 Solução

x2 0 1 722

1

22

0 72

x1 1 0 −

122

3

22

0 92

S1 0 0 -

722

-1

22

1 -12

Z 0 0 2811

1511

0 63

a) Construir a restrição adicionada ao quadro acima em termos das variáveis x1 e x2.

Aplicando-se o dual simplex ao quadro acima se obtêm.

Base x1 x2 x3 x4 S1 Solução

x2 0 1 0 0 1 3

x1 1 0 0 17

-17

327

x3 0 0 1 17

-227

117

z 0 0 0 1 8 59

b) Complete o quadro abaixo, aplicando o método dos cortes de Gomory ao quadro

acima em relação a variável x1.

Base x1 x2 x3 x4 S1 S2 Solução

x2 0 1 0 0 1 0 3

x1 1 0 0 17

-17

0 32

7

x3 0 0 1 17

-227

0 11

7

S2 0 0 0 1 -47

z 0 0 0 1 8 0 59

c) Construir a restrição adicionada ao quadro acima em termos das variáveis x1 e x2.

d) Com as restrições obtidas dos itens a) e c) resolver graficamente o problema. Obtenha a solução

inteira ótima.

e) Aplique o dual simplex ao quadro do item b e compare a solução com o item d.

Page 52: Programação Linear Inteira

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

284

3) Resolver os seguintes modelos lineares inteiro, usando o método de cortes de Gomory.

Máx z = 2x1 + x2

s.a 3x1 + x2 ≤ 21

7x1 + 4x2 ≤ 56

x1 + x2 ≤ 12

x1, x2 ≥ 0, inteiros

4) Considere o seguinte problema da mochila

Máx z = 10x1 + 24x2 + 10x3 + 2x4

s .a 2x1 + 4x2 + 3x3 + x4 ≤ 23

x1 , x2 , x3 , x4 ≥ 0, inteiros

a) Resolver este modelo usando o método dos cortes de Gomory.

b) Transforme este problema em um problema da mochila 0-1. Use o método de

Branch-and- Bound para resolver este problema da mochila 0-1.

5) Exercícios Computacionais

Implementar códigos computacionais para executar problemas de programação

linear inteira e binária 0-1, considerando:

a) Método dos Cort es de Gomory, a partir da rotina allint.pas, do livro Discrete

Optimization Algoritms with Pascal Programs by Syslo, M. M et alli .

a1) Construir uma entrada e saida de dados.

a2) Efetuar vários testes, com problemas até 50variáveis e 52 restrições.

6) Assinale (V) verdadeiro ou (F) falso

( ) É possível obter uma solução viável inteira por arredondamento da solução ótima de um

problema de programação linear com restrições de igualdade.

( ) O custo ótimo inteiro de um problema pode fornecer um melhor custo do que seu custo

contínuo associado.

( ) O número de subproblemas obtidos por uma ramificação do método de Branch-and-Bound

pode ser drasticamente reduzido se um bom limite é descoberto para a solução inteira.

( ) A principal desvantagem do algoritmo de Branch-and-Bound é o número de subproblemas que

pode sobrecarregar a memória computacional.

( ) O algoritmo de enumeração implícita 0 - 1 é um caso especial do método geral de Branch-and-

Bound.

Page 53: Programação Linear Inteira

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

285

7) Aplique o algoritmo de “Branch-and-Bound” ao Problema de Programação Inteira(PLI) abaixo.

mín z = 10x1 + 9x2

s.a x1 ≤ 8

x2 ≤ 10

5x1 + 3x2 ≥ 45

x1, x2 ≥ 0 inteiros.

a)Construir uma árvore composta pelos subproblemas lineares PL1, PL2, PL3, PL4 e PL5.

b) Interprete os resultados em cada nó da árvore.

6) Mostrar a árvore de Branch-and-Bound que corresponde a solução ótima do seguinte modelo

linear inteiro

Máx z = 2x1 + x2

s.a: x1 + 2x2 ≤ 8

x1 - x2 ≤ 12

x1, x2 ≥ 0; x1, x2 inteiros

8)Utilizando o método de Branch-and-Bound ache a solução ótima dos seguintes problemas

inteiros.

a) Máx z = 5x1 + 2x2

s.a: 3x1 + x2 ≤ 12

x1 + x2 ≤ 5

x1, x2 ≥ 0; x1, x2 inteiros

b) Máx z = 7x1 + 3x2

s.a: 2x1 + x2 ≤ 9

3x1 + 2x2 ≤ 13

x1, x2 ≥ 0; x1, x2 inteiros

9) Implementar o algoritmo de Branch-and-Bound em MATLAB

10) Resolver graficamente o exemplo da “fabrica de moveis” interpretando cada etapa do método

de Branch-and-Bound.

Page 54: Programação Linear Inteira

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

286

11) Considere o modelo:

mín z = x1

s.a 15x1 - 20x2 ≤ 4

21x1 - 20x2 ≥ 10

x1, x2 ≥ 0 inteiros.

Mostre que o arredondamento da solução ótima do problema linear para uma solução inteira deste

modelo, não é a solução ótima do problema inteiro.

12) Seja o problema inteiro

(PI) Máx z = c x c xt t1 1 2 2+

s.a a x a x b

d x d x b

t t

t t1 1 2 2 1

1 1 2 2 2

+ ≤

+ ≤

x1 20 0≥ ≥, x inteiros

Descreva a aplicação do algoritmo de Branch-and-Bound ao problema (PI), narrando:

a) As ramificações com subproblemas inclusive os que tenham soluções impossíveis.

b) Descrever limitações dos vários subproblemas candidatos a solução, descrevendo os critérios a

melhor escolha.

13) Resolver através do algoritmo de Branch-and-Bound os seguintes problemas abaixo:

a) Máx z = 3x1 + x2 b) Máx z = 4x1 + 3x2 + x3

s.a. 5x1 + 2x2 ≤ 10 s.a. 3x1 + 2x2 + x3 ≤ 7

4x1 + x2 ≤ 7 2x1 + x2 + 2x3 ≤ 3

x1, x2 ≥ 0; x2 inteiro x1, x2, x3 ≥ 0; x2, x3 inteiros

14) Considere o modelo

Máx z = x1

s.a. 15x1 - 20x2 ≤ 4

21x1 - 20x2 ≥ 10

x1, x2 ≥ 0

a)Resolver o problema na forma linear e inteira utilizando o LINDO.

b)Verifique que o arredondamento da solução linear do PPL não implica na solução do problema

inteiro.

c) Resolver o problema linear graficamente.

Page 55: Programação Linear Inteira

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

287

15) Considere o modelo

Máx z = 3x1 + 3x2 + 13x3 s.a. -3x1 + 6x2 + 7x3 ≤ 8 6x1 - 3x2 + 7x3 ≤ 8 x1, x2 , x3 ≥ 0 e inteiros

a) Resolver o problema utilizando o método de Branch-and-Bound com a versão do

jumptracking.(A ramificação(bound) é sempre sobre a variável de menor índice que não é inteira).

b) Quando a versão do backtracking é aplicada para este problema, existe a liberdade na escolha do

subproblema com xi ≤ *, ou o subproblema com xi ≥ * + 1. Analise

a diferença entre as duas versões do backtracking.

c) Compare o resultado com a solução encontrada no item (a).

d)O que podemos dizer neste caso sobre o jumptracking em relação ao backtracking.

16) Através do método de Branch-and-Bound para construir a árvore de solução dos seguintes

problemas linear inteiro. Utilize o computador para resolver os subproblemas.

a) Máx z = 3x1 + 3x2 + 13x3

s.a. -3x1 + 6x2 + 7x3 ≤ 8

6x1 - 3x2 + 7x3 ≤ 8

0 ≤ x1, x2 , x3 ≤ 5, inteiros

b) Máx z = 23x1 + 14x2 + 17x3

s.a. -x1 + x2 + 2x3 ≤ 7

2x1 + 2x2 - x3 ≤ 9

3x1 + 2x2 + 2x3 ≤ 13

x1, x2 , x3 ≥ 0, inteiros

c) Máx z = 26x1 + 17x2 + 13x3

s.a. 3x1 + x2 + 4x3 ≤ 9

x1 + 2x2 - 3x3 ≤ 6

4x1 - x2 + x3 ≤ 17

x1, x2 , x3 ≥ 0, inteiros

d) Máx z = 19x1 + 27x2 + 23x3

s.a. 4x1 - 3x2 + x3 ≤ 7

2x1 + x2 - 2x3 ≤ 11

-3x1 + 4x2 + 2x3 ≤ 5

x1, x2 , x3 ≥ 0, inteiros

Page 56: Programação Linear Inteira

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

288

e) Máx z = 34x1 + 29x2 + 2x3

s.a. 7x1 + 5x2 - x3 ≤ 16

-x1 + 3x2 + x3 ≤ 10

- x2 + 2x3 ≤ 3

x1, x2 , x3 ≥ 0, inteiros

f) Máx z = 135x1 + 31x2 + 142x3

s.a. x1 + 2x2 - x3 ≤ 13

2x1 - x2 + 3x3 ≤ 5

x1 - x2 + 2x3 ≤ 3

x1, x2 , x3 ≥ 0, inteiros

17) Qual das seguintes afirmações é verdadeira e quais são falsas? Justifique suas respostas.

a) Se um modelo linear inteiro tem uma solução ótima, então o modelo linear também tem solução

ótima.

c) Se um modelo linear tem uma solução ótima, então o modelo linear inteiro também tem solução

ótima.

18) Considere o seguinte modelo linear inteiro

Máx z = 77x1 + 6x2 + 3x3 + 6x4 + 33x5 + 13x6 + 110x7 + 21x8 + 47x9

s.a 77x1 + 76x2 + 22x3 + 42x4 + 21x5 + 760x6 + 818x7 + 62x8 + 785x9 ≤ 1500

67x1 + 27x2 + 794x3 + 53x4 + 234x5 + 32x6 + 792x7 + 97x8 + 435x9 ≤ 1500

x1,...,x9 ∈ {0,1}

a) Resolver a relaxação linear deste problema e determine uma solução inteira viável por

arredondamento da solução linear.

b) Mostre que z* = 176, x x x x x x x x x1 2 3 4 5 6 7 8 9 1* * * * * * * * *= = = = = = = = = é uma solução ótima

do modelo, usando o método de Branch-and-Bound. Mostre também a árvore do método de Branch-

and-Bound.

19) Considere o seguinte modelo linear inteiro

Máx z = -x1 - 9x2

s.a -x1 + x2 + x3 = 0.5

x1, x2 ≥ 0, x3 ∈ {0,1}

Determine a solução ótima e a árvore correspondente pelo método de Branch-and-Bound.

Page 57: Programação Linear Inteira

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

289

20) Seja o PPI

Máx z = x1 + x2 + 4x3 – x4 + 5x5

s .a x2 + x5 ≤ 4

- x1 + x2 ≤ 1

x3 - x4 ≤ 0

- x3 - x4 + x5 ≤ 5

x1 ≤ 2

xI ≥ 0, I= 1,…,5

A solução do problema de programação linear corresponde a solução do problema de programação

inteira. Justifique sua resposta.

Solução: A solução do problema de programação linear não corresponde a solução do problema de

programação inteira, pois as hipóteses do teorema

“Seja A uma matriz inteira, e F = {x ∈ Ån; Ax ≤ b, x ≥ 0} não vazio. Então A é Totalmente

Unimodular se e somente se para cada vetor inteiro b ∈ Ån o conjunto F tem vértices inteiros” não

são satisfeitas. De fato, a matriz:

−−−

−=

0000111100011000001110010

A não é totalmente unimodular, pois a sub- matriz

−−

−=

11

11A possui determinante igual a –2.

Page 58: Programação Linear Inteira

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

290

21) Considere o seguinte P.P.I.:

Mín z = 6x1 + 8x2

s.a. 3x1 + x2 ≥ 4

x1 + 2x2 ≥ 4

xi ≥ 0; xi inteiro (i = 1, 2)

A tabela ótima para o P.P.L. é dada abaixo. Use o algoritmo dos planos cortantes de Gomory para resolver o P.P.I.

Base x1 x2 e1 e2 b

x1 1 0 -2/5 1/5 4/5

x2 0 1 1/5 -3/5 8/5

z 0 0 -4/5 -18/5 88/5

Sugestão: Construa o corte de Gomory considerando a equação envolvendo x2.

22) Considere o seguinte P.P.I. :

Mín z = 2x1 - 4x2

s .a. 2x1 + x2 ≤ 5

-4x1 + 4x2 ≤ 5

xi ≥ 0; xi inteiro (i = 1, 2)

A tabela ótima para o P.P.L. é dada abaixo. Use o algoritmo dos planos cortantes

para resolver o P.P.I.

Base x1 x2 e1 e2 b

x1 1 0 1/3 -1/12 5/4

x2 0 1 1/3 1/6 5/2

z 0 0 -2/3 -5/6 -15/2

23)Verifique

Se A e B são matrizes Totalmente Unimodular, então

a) At é Totalmente Unimodular.

b)

BA

é Totalmente Unimodular.

c) Se A é uma matriz Totalmente Modular então [I A] é Unimodular.

Page 59: Programação Linear Inteira

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

291

24)Determine qual das seguintes matrizes são Totalmente Unimodulares.

a)

−=

101011101

A ; b)

−=

111010011

A ;

−−−

=

00100011001000101011

A ;

−−−

−=

0000111100011000001110010

A

25) Justifique as seguintes questões:

a) Dar um exemplo de uma matriz unimodular de posto completo que não é

totalmente unimodular.

b) Dar um exemplo de uma matriz totalmente unimodular de posto completo,

com no mínimo um inteiro positivo e um inteiro negativo em cada coluna, que não

satisfaz as condições do teorema 3.

26) Mostre, calculando todas as soluções viáveis básicas, que a região

{x ∈R6 ; 0} x ,bx100101010011001001

≥=

tem somente vértices inteiros quando b

é um vetor inteiro.

27) Uma fábrica de cerâmica produz 2 tipos de vasos(A e B) nas suas seções de

cozimento e pintura. Os tempos necessários à preparação de uma unidade de cada

tipo nas seções referidas, bem como a disponibilidade diária destas constam no

quadro seguinte:

Tempo

Necessário (h)

Tempo

Necessário (h)

Seção Tipo A Tipo B Disponível/Dia

Cozimento 3 1 4

Pintura 1 2 4

Page 60: Programação Linear Inteira

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

292

O lucro unitário da venda de A e B é respectivamente 6 e 8 unidades monetárias:

a) Modelar o problema de programação linear inteira;

b) Aplicando-se o simplex a modelo acima se obtêm o seguinte quadro ótimo:

Base x1 x2 e1 e2 b

x1 1 0 -2/5 1/5 4/5

x2 0 1 1/5 -3/5 8/5

z 0 0 4/5 18/5 88/5

Objetivando encontrar uma solução ao problema de programação linear inteira, empregar o método

dos cortes de Gomory.

(sugestão: Desenvolver o corte de Gomory em relação a variável x1)

Solução Escolhendo-se arbitrariamente x2, temos:

x2 + (0 + 1/5)e1 + (-1 + 2/5)e2 = (1 + 3/5) Fazendo a equação do corte:

-1/5e1 - 2/5e2 + e3 = -3/5 Adicionando esta restrição ao modelo e aplicando o Dual Simplex, teremos:

Base x1 x2 e1 e2 e3 b

x1 1 0 -2/5 1/5 0 4/5

x2 0 1 1/5 -3/5 0 8/5

e3 0 0 -1/5 * -2/5 1 -3/5

Z 0 0 -4/5 -18/5 0 88/5

x1 1 0 0 1 -2 2

x2 0 1 0 -1 1 1

e1 0 0 1 2 -5 3

Z 0 0 0 2 -4 20

Logo a solução ótima para este P.P.I. é z = 20; V.B.: x1 = 2; x2 = 1; e1 = 3; V.N.B.: e2 = e3= 0.

Page 61: Programação Linear Inteira

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

293

27) O gerente de informática da Universidade do Estado de DED deseja habilitar o

acesso de cinco diferentes arquivos. Estes arquivos armazenados em dez discos

como mostrado na tabela abaixo:

1 2 3 4 5 6 7 8 9 10

Arq. 1 X X X X X X

Arq. 2 X X

Arq. 3 X X X X

Arq. 4 X X X

Arq. 5 X X X X X X X

A quantidade de armazenagem requerida em cada disquete é: disco 1, 3K; disco 2,

5K; disco3, 1K; disco 4, 2K; disco 5, 1K; disco 6, 4K; disco 7, 3K; disco 9, 2K;

disco 10, 2K.

a)Formule uma Programação inteira que determine o conjunto de discos requeridos para

armazenar uma quantidade mínima de arquivos, tal que cada arquivo está no mínimo em

um dos discos. Para um dado disco, devemos armazenar nele o arquivo inteiro ou não

armazenar; não podemos armazenar o arquivo em parte do disco.

min 3x1 + 5x2 + x3 + 2x4 + x5 + 4x6 + 3x7 + x8 + 2x9 + 2x10 s.t. x1 + x2 + x4 + x5 + x8 + x9 >= 1 x1 + x3 >= 1 x2 + x5 + x7 + x10 >= 1 x3 + x6 + x8 >= 1 x1 + x2 + x4 + x6 + x7 + x9 + x10 >= 1 xi ∈ {0, 1} i = 1,..., 10

b)Modifique sua formulação tal que se o disco 3 ou o disco 5 são usados, então o disco 2 deve também ser

usado.

min 3x1 + 5x2 + x3 + 2x4 + x5 + 4x6 + 3x7 + x8 + 2x9 + 2x10

s.t. x1 + x2 + x4 + x5 + x8 + x9 >= 1 x1 + x3 >= 1 x2 + x5 + x7 + x10 >= 1 x3 + x6 + x8 >= 1 x1 + x2 + x4 + x6 + x7 + x9 + x10 >= 1 x2 - x3 >= 0 x2 - x5 >= 0 xi ∈ {0, 1} i = 1,..., 10

Page 62: Programação Linear Inteira

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

294

Bibliografia

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

USA, 2a Edition, 1999;

2) Scharage, L., Optimization Modeling with LINDO , LINDO SYSTEMS INC,

USA, 5a Edition, 1999;

3) Bazaraa et alli., Linear Programming and Network Flows . John Wiley Wiley

& Sons. Second Edit ion;

4) Arbel, A. Exploring Interior-Point Linear Programming, Algorithms and

Software , The MIT Press;

5) Puccini, A. L. et alli., Programação Linear, LTC;

6)Bregalda, P. F. et alli . , Introdução à Programação Linear, Ed. Ca mpus;

7)Ramalhete, M. et alli. , Programação Linear, Vol I e II, Ed. McGraw- Hill;

8)Syslo, M. M. et alli. , Discrete Optimization Algorithms with Pascal Problems;

9)Lieberman et alli. , Introdução à Pesquisa Operacional. Ed. Campus;

10)Bronson, R., Pesquisa Operacional . Coleção Schaum.

11)Avriel, M. et alli. Mathematical Programming for Industrial Engineers .

Marcel Dekker, Inc.1996.

12) Chvátal. V. Linear Programming , Freeman and Company, 1983.

13) Pinheiro, P. R., Uma Metodologia de Feixe e Benders Aplicada a um Problema Linear

Inteiro de Grande Porte, Tese de Doutorado, PESC/COPPE/UFRJ, 1998.

14) Clemente, N. Ao Mestre com Carinho, Revista Exame , no. 4, ed. 682, ano 32, p. 56-58,

Editora abril, 1999.

15) Avriel, M., AND GOLANY, B., Mathematical Programming for Industrial Engineers, Marcel

Dekker, Inc.1996.

16) Winston, W. L., Operations Research, Applications and Algorithms ,

Duxbury- 1994.