35
Programação Inteira Algoritmo Branch-and-Bound (ou enumeração implícita)

Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Programação Inteira

Algoritmo Branch-and-Bound (ou enumeração implícita)

Page 2: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

• O método Branch-and-Bound (B&B) baseia-se na idéia de desenvolver uma enumeração inteligentedas soluções candidatas à solução ótima inteira de um problema.

• Apenas uma fração das soluções factíveis é realmente examinada.

• O termo branch refere-se ao fato de que o método efetua partições no espaço das soluções e o termo bound ressalta que a prova da otimalidade da solução utiliza-se de limites calculados ao longo da enumeração.

Page 3: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

inteirosxx

xx

xxas

xxmax

21

21

21

21

,

0,

1347..

1121

≥≤+

+Exemplo

O problema é um problema de programação linear inteira, pois as variáveisdevem ser inteiras.

Page 4: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

•Na Figura (a) têm-se os pontos que representam as soluções factíveis do problema (todos os pontos inteirosque satisfazem as restrições).

• O problema de programação linear (RL) obtido ao desconsiderarmos as restrições de integralidadedas variáveis inteiras é conhecido como a relaxação lineardo PI (ver Figura (b)).

Page 5: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

(b)(a)

Ótimo = 33

Ótimo = 39

PI RL

x2

inteirosxx

xx

xxas

xxmax

21

21

21

21

,

0,

1347..

1121

≥≤+

+

(X1=1.897)

(x2=3, x1=0)

Page 6: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

• Como podemos observar a solução do problema linear (RL) ésempre maior ou iguala solução do PI, pois o problema relaxado é composto por todas as soluções inteiras e também as soluções reais do problema, logo é formado por um conjunto de soluções factíveis mais abrangente.

• Assim temos que, para um problema de maximização , ou seja, a solução ótima da relaxaçãolinear de um problema inteiro ( ) é sempre maior ou igual a solução ótima do problema inteiro( ).

*PPI

*PPL ZZ ≥≥≥≥

*PPLZ

*PPIZ

Page 7: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

(b)(a)

Ótimo = 33

Ótimo = 39

Problema inteiro Problema relaxado

(X1=1.897)

Page 8: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

•Princípio básico:se a solução do RL relaxado corresponde a uma

solução do PI, pois possui todas as variáveis inteiras, então esta solução

é a solução ótima do PI.

Page 9: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

• Idéia Geral: relaxar o problema de programação inteira e dividir o problema relaxado em vários problemas até encontrar soluções inteiras ou não factíveis, o ótimo é a melhor solução encontrada.

O algoritmo B&B é baseado na idéia de “dividir para conquistar”, ou seja, trabalhamos em problemas menores e mais fáceis de resolver em busca da solução ótima.

Page 10: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Métodos de Solução: Branch-and-Bound

• A divisão do problema é interrompida quando uma das condições a seguir ésatisfeita. Essas condições são chamadas de testes de sondagem ou Poda do nó.

(I ou poda por infactibilidade) O problema relaxado é infactível.

(O ou poda por otimalidade) A solução ótima do problema relaxado é inteira .

(Q ou poda por qualidade) O valor de qualquer solução factível do problema relaxado é pior que o valor da melhor solução factível atual (solução incumbente).

• Quando uma dessas três condições ocorre, o subproblema pode ser descartado (sondado ou podado), pois todas as suas soluções factíveis estão implicitamente enumeradas.

Page 11: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

inteirosxx

xx

xxas

xxmax

21

21

21

21

,

0,

1347..

1121

≥≤+

+

(b)(a)

Ótimo = 33

Ótimo = 39

Page 12: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

• Resolvendo o problema relaxado tem-se que:

• Valor ótimo da solução: 39

• Valores das variáveis x1=1.86e x2=0

• Logo o valor de x1 não é inteiro, então dividimos o problema em dois subproblemas:

• um onde consideramos o valor de x1≥ 2 , que vamos chamar de subproblema A

• outro consideramos x1 ≤ 1, chamado de subproblema B.

Z=39x1=1.86x2=0

Page 13: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

Ótimo = 37.5

InfactívelA

B

Suproblema A Subproblema B

0,

2

1347..

1121

21

1

21

21

≥≥

≤++

xx

x

xxas

xxmax

0,

1

1347..

1121

21

1

21

21

≥≤

≤++

xx

x

xxas

xxmax

Page 14: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

• Não encontramos solução factível ao resolver o problema A, então aplicando o o critério para podapodemos eliminá-lo ((I) O problema relaxado é infactível).

• Resolvendo o subproblema B temos Z = 37.5, x1 =1 e x2 =1.5

• Agora x2 não é inteiro, logo particionamos o problema em dois considerando o subproblema C com a variável x2 ≤ 1 e o subproblema D com x2 ≥ 2.

Z=39x1=1.86x2=0

Z=37.5x1=1 x2=1.5

x1≥2x1≤1

I

A B

Page 15: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

Suproblema C Subproblema D

0,

1

1

1347..

1121

21

2

1

21

21

≥≤≤

≤++

xx

x

x

xxas

xxmax

0,

2

1

1347..

1121

21

2

1

21

21

≥≥≤

≤++

xx

x

x

xxas

xxmax

Ótimo = 37Ótimo = 32

CD

Page 16: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

Z=39x1=1.86x2=0

Z=37.5x1=1 x2=1.5

x1≥2x1≤1

I

Z=37x1=0.71 x2=2

x2≥2x2≤1

A

DC

B

Z=32x1=1 x2=1O

(O - otimalidade) A solução ótima do problema relaxado é inteira.

Page 17: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

• A solução do subproblema C é igual a 32, x1=1 e x2=1, as duas variáveis são inteiras, logo considerando o teste de sondagem (O) este problema pode ser sondado por otimalidade.

• Resolvendo o subproblema D temos Z = 37, x1=0.71 e x2=2

• note que a variável x1 novamente não é inteira, então particionamos o subproblema gerando dois novos subproblemas como mostramos a seguir

Page 18: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

Suproblema E Subproblema F

0,

0

2

1

1347..

1121

21

1

2

1

21

21

≥≤≥≤

≤++

xx

x

x

x

xxas

xxmax

0,

1

2

1

1347..

1121

21

1

2

1

21

21

≥≥≥≤

≤++

xx

x

x

x

xxas

xxmax

Infactível

Ótimo = 35,75

F

E

Page 19: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

Z=39x1=1.86x2=0

Z=37.5x1=1 x2=1.5

x1≥2x1≤1

I

Z=37x1=0.71 x2=2

x2≥2x2≤1

A

DC

B

Z=32x1=1 x2=1O

x1≥1x1≤0 FE Z=35.75

x1=0 x2=3.25

I

Page 20: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

• O problema F é infactível, logo podemos usar I e eliminá-lo

• O subproblema E tem solução igual a 35.75 e x1=0 e x2=3.25

Suproblema G Subproblema H

0,

3

0

2

1

1347..

1121

21

2

1

2

1

21

21

≥≤≤≥≤

≤++

xx

x

x

x

x

xxas

xxmax

0,

4

0

2

1

1347..

1121

21

2

1

2

1

21

21

≥≥≤≥≤

≤++

xx

x

x

x

x

xxas

xxmax

Page 21: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-BoundZ=39x1=1.86x2=0

Z=37.5x1=1 x2=1.5

x1≥2x1≤1

I

Z=37x1=0.71x2=2

x2≥2x2≤1

A

DC

B

Z=32x1=1 x2=1O

x1≥1x1≤0 FE

Z=35.75x1=0 x2=3.25

I

x2≥4x2≤3 HG

solução ótima

Z=33x1=0 x2=3 I

O

Page 22: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo: Branch-and-Bound

• Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando o (O) este problema pode ser sondado.

• O subproblema H não tem solução factível e também pode ser sondado por infactibilidade (I).

• Temos que nenhum nó pode ser ramificado, logo, a melhor solução inteira encontrada é dada pelo problema G e é a solução ótima do problema.

• Na resolução do Exemplo através do método B&B podemos observar que muitas soluções não precisaram ser avaliadas explicitamente. Isso fica mais claro quando se resolve problemas maiores.

Page 23: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Criando a árvore do B&B

Qual explorar primeiro ?E depois ?Note que a ordem pode influir (e muito!)

Page 24: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Regras de seleção

� Regras a priori� determinam previamente a ordem de

escolha dos nós;

� Regras adaptativas

� dependem das informações dos nós.

Page 25: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Regras a priori

� Busca em profundidade com backtracking� last-in, first-out: o último nó a ser incluído na lista

é o primeiro a ser examinado

� backtracking: se o nó é podado, retorna-se ao longo do caminho em direção ao nó raiz, até encontrar um nó aberto.

� ordem: pode-se definir, por exemplo, que o filho à esquerda sempre é examinado primeiro.

Page 26: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Regras a priori� Busca em profundidade com backtracking

Page 27: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Regras a priori

� Busca em profundidade com backtracking

� vantagens:� Nós factíveis são mais facilmente encontrados em

níveis mais profundos da árvore (qual a vantagem de se encontrar nós factíveis logo ?)

� Pode-se usar re-otimização em nós filhos.

� desvantagem:� tende a gerar árvores maiores (com muitos nós).

Page 28: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Regras adaptativas

� Melhor limitante

� Selecionar a cada momento, o nó que tem melhor limitante (e que eventualmente, pode fornecer a melhor solução inteira).

Page 29: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Regras adaptativas

� Melhor limitante

� vantagem:

� menos nós explorados no final.

� desvantagem:

� grande número de nós ativos a cada momento (limites de memória ? )

Page 30: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exemplo (Livro Página 249)

Page 31: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Solução

melhor limitante

busca em profundidade

Page 32: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Outras estratégias

� Busca em largura

todos os nós em um dado nível são considerados, antes de passar-se para o nível seguinte.

Page 33: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

� Exemplo de heurística

� (Escolhe apenas os nós mais promissores para continuar a busca)

...

Page 34: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Exercício .

� Encontre a solução ótima para o problema de programação inteira abaixo. Especifique qual o motivo de cada poda dos nós. A primeira relaxação linear deve ser resolvida utilizando o algoritmo simplex O primeiro filho que será acrescentado com xi<= deverá ser resolvido

pelo simplex tabelas.

Max 21 2xxZ +=

Sujeito a:

622x 21 ≤+ x

52x 21 ≤+ x

824x 21 ≤+ x

x1≥0, x2≥0 e inteiras.

Page 35: Programação Inteira - sites.icmc.usp.br · Exemplo: Branch-and-Bound • Resolvendo o subproblema G obtemos Z = 33, x1=0 e x2=3 , logo a solução é inteira, portanto aplicando

Programação Inteira

� Referências:� Notas de aulas do Prof. Silvio Alexandre de Araujohttp://www.dcce.ibilce.unesp.br/~saraujo/Material da Professora Gladys Castillo do Departamento de Matemática da

Universidade de Aveiro (http://www.mat.ua.pt/io/)

Notas de aula do Prof. Alysson Machado Costa

www.icmc.usp.br/~alysson