21
Fernando Nogueira Programação Inteira 1 Programação Inteira

ProgramacaoInteira.ppt [Modo de Compatibilidade] · Fernando Nogueira Programação Inteira 2 A Programação Inteira pode ser entendida como uma caso específico da Programação

Embed Size (px)

Citation preview

Fernando Nogueira Programação Inteira 1

Programação Inteira

Fernando Nogueira Programação Inteira 2

A Programação Inteira pode ser entendida como uma caso específico daProgramação Linear, onde as variáveis devem ser inteiras (ou ao menos, partedestas variáveis).

A rigor, o nome mais correto para a Programação Inteira é Programação LinearInteira.

Quando todas as variáveis devam possuir valores inteiros, o modelo édenominado de um problema de Programação Inteira Pura, caso contrário, édenominado de um problema de Programação Inteira Mista.

Modelo Formal

( )

n,...,1pjpara0x

np,...,2,1jparax

m,...,2,1iparabxa

asujeito

xc)Minou(Max

j

j

n

1jijij

n

1jjj

+=≥

≤=Ζ∈

=≤∑

=

=

Fernando Nogueira Programação Inteira 3

Exemplos de Aplicações:

1) Utilização de Equipamentos ⇒ xj representa a quantidade de equipamentos. Porexemplo, xj = 2.33 navios petroleiros pode não ter significado prático.

2) Tamanhos de Lotes ⇒ Em algumas situações de planejamento de produção, faz-se necessário que xj = 0 ou xj > Lj, onde xj representa a quantidade de produtosproduzidos e Lj uma quantidade mínima de produtos xj para compor um lote.Esta situação é um exemplo de restrição “ou-ou” (ou faz um mínimo ou não faznada).

3) Decisões “Sim-ou-Não” ⇒ xj = 1 ou xj = 0 representando decisões sim ou não(também uma situação de “ou-ou”). Por exemplo, xj = 1 representa construiruma nova fábrica.

4) Otimização Combinatória ⇒ lida com problemas de decisão de seqüências,programas e itinerários. Exemplos clássicos são:

-Problema do Caixeiro Viajante ⇒ Para n cidades, existem (n-1)! diferentespercursos (ex: n = 50, 6x1062 percursos diferentes).

-Problema de Programação de Máquinas ⇒ Para n itens a serem fabricados emcada uma de k máquinas existem (n!)k seqüências possíveis (ex: n = k = 10,4x1065 seqüências diferentes).

Fernando Nogueira Programação Inteira 4

Problemas de Programação Inteira (conjunto solução discreto) são geralmentemuito mais difíceis de serem resolvidos quando comparados aos Problemas deProgramação Linear ordinários (conjunto solução contínuo).

A solução ótima é x1 = 0 e x2 = 3 (o que pode ser verificado por enumeraçãoexaustiva).

Uma maneira de resolver este exemplo seria, por exemplo, desconsiderar arestrição das variáveis serem inteiras e resolver utilizando o algoritmo Simplexnormalmente. A solução ótima neste caso é x1 = 13/7 e x2 = 0.

A solução arredondada é x1 = 2 e x2 = 0, que é inviável.

A solução arredondada “para baixo” é x1 = 1 e x2 = 0, que é viável, porém longede ser a ótima.

A regra de arredondar a solução não funciona muito bem, e portanto, não é umprocedimento robusto para solucionar problemas de Programação Inteira.

Ζ∈≥

≤+

+

0x,x

13x4x7

asujeito

x11x21Max

21

21

21

Fernando Nogueira Programação Inteira 5

Uma dificuldade ainda mais séria é que não existe maneira fácil de verificar seuma solução viável é ótima. Este fato representa uma importante diferença entre aProgramação Linear e a Programação Inteira.

Como exemplo, suponha que se queira testar se a solução x1 = 1 e x2 = 1 é ótima.Assim, examinando se a solução representa um ótimo local, no sentido que afunção-objetivo não melhora em qualquer ponto inteiro vizinho viável x1 = 1+a ex2 = 1+b, onde a,b = -1,0,1. Os pontos vizinhos neste caso são: (x1,x2) = (0,0),(0,1), (0,2), (1,0).

A solução (1,1) é a melhor entre todas de sua vizinhança, porém não é a ótima.Com isso, um ponto pode ser ótimo localmente entre pontos vizinhos e ainda nãoser ótimo global, apesar do modelo ser linear.

Fernando Nogueira Programação Inteira 6

Algoritmo Branch-Bound (Ramifica-e-Limita)

A abordagem mais amplamente adotada para resolver problemas de ProgramaçãoInteira utiliza um método de busca em árvore, também referido como um Algoritmode Retrocesso (Backtracking).

O método pode ser aplicado em Problemas de Programação Inteira Pura ou Mista.

Admitindo que o problema de Programação Inteira seja modelo por:

( )

( )

( ) ( )

( ) n,...,1pjpara0x4

np,...,2,1jparax3

m,...,2,1iparabxa2

asujeito

xcMax1

j

j

n

1jijij

n

1jjj

+=≥

≤=Ι∈

∑ =≤

=

=

Supondo que para cada variável inteiraseja possível fornecer limites inferioresLj e superiores Uj que seguramenteincluam os valores ótimos.( ) ( )np,...,2,1jparaUxL5 jjj ≤=≤≤

A idéia principal do algoritmoBranch-Bound é oriunda de que umvalor inteiro T qualquer contido nointervalo e xj uma solução

ótima também satisfará:1UTL jj −≤≤

( ) 1Tx6 j +≥

( ) Tx7 j ≤

ou

Fernando Nogueira Programação Inteira 7

Como exemplo desta dicotomia, suponha que a restrição de inteiros (3) seja retiradae que uma solução ótima de Programação Linear para (1), (2), (4) e (5) indique quex1=1.67. Então formule e resolva mais 2 programas lineares com (1), (2) e (4),porém com (5), para j=1 modificado em um problema para:

e o outro para:

onde floor(.) é uma função que arredonda “para baixo”.

Suponha, além disto, que cada um destes 2 problemas tenha uma solução ótima quesatisfaça às restrições de inteiros (3). Então, a solução que tenha o maior valor para afunção-objetivo é de fato ótima para o problema original de Programação Inteira.

Comumente, um destes problemas (ou ambos) não tem solução ótima que satisfaça(3) e, portanto, cálculos adicionais são necessários. O algoritmo abaixo especificauma maneira sistemática para obter uma solução ótima.

( ) 11111 Ux2Ux1xfloor ≤≤⇒≤≤+

( ) 1xLxfloorxL 11111 ≤≤⇒≤≤

Fernando Nogueira Programação Inteira 8

O Método

Em qualquer iteração t, existe um limite inferior Zt para o valor da função-objetivo.Além disto, existe também um Lista-Mestra de problemas de Programação Linear aserem resolvidos com diferença entre eles apenas nos limites para as variáveis xj (5).Na iteração 1, existe um único problema consistindo em (1), (2), (4) e (5). Oprocedimento na iteração t é:

Passo 1. Termine as computações se a Lista-Mestra estiver vazia, senão tire umproblema de P.L. da Lista-Mestra.

Passo 2. Resolva o problema escolhido. Se este não tiver nenhuma solução viável ouse o valor ótimo Z for menor ou igual a Zt, então faça Zt+1 = Zt e retorne ao passo 1.

Passo 3. Se a solução ótima obtida para o problema de P.L. satisfizer às restrições deinteiros, então registre-a, faça Zt+1 ser o valor ótimo correspondente da função-objetivo Z e retorne ao Passo 1, senão, prossiga ao Passo 4.

Passo 4. Escolha qualquer variável xj, com j = 1, 2,...,p que não tenha um valorinteiro na solução ótima obtida para o problema escolhido de P.L. Faça bj denotar estevalor e [bj] significar o maior inteiro menor ou igual a bj (arredondar para baixo).Acrescente 2 problemas de P.L. à Lista-Mestra idênticos ao problema escolhido noPasso 1, exceto que em um o limite inferior Lj para xj é [bj] + 1 e no outro o limitesuperior Uj para xj é [bj]. Faça Zt+1 = Zt e retorne ao Passo 1.

Fernando Nogueira Programação Inteira 9

No fim do algoritmo, se houver registrado uma solução viável com Zt, esta é ótima,caso contrário não existe nenhuma solução viável.

É bastante comum encontrar uma solução com valores inteiros antes da últimaiteração, porém só é possível afirmar que esta é ótima após a iteração final.

O processo no Passo 1 é chamado de ramificação porque ele envolve a seleção deum problema de P.L. para consideração posterior.

O processo no Passo 2 é conhecido como afrouxamento porque o problema deProgramação Inteira é resolvido como um problema de P.L. ordinário (ignorando arestrição de inteiros).

O processo no Passo 4 é conhecido como separação, onde um problema “genitor”de P.L. com Z maior que Zt dá origem a 2 descendentes.

Exemplo

Admitindo limites para cada variável como

Ζ∈≥

≤+−

≤++−

++

e0x,x,x

8x7x3x6

8x7x6x3

)9(

asujeito

x13x3x3Max)8(

321

321

321

321

.3,2,1j,5x0)10( j =≤≤

Fernando Nogueira Programação Inteira 10

Uma vez que todo xj = 0 é uma solução viável para este problema, pode-se adotar olimite inferior Z1 = 0 para a iteração 1. A Lista-Mestra contém somente o problemade P.L. (8), (9) e (10), que é designado problema 1. Retire-o no Passo 1 e no Passo2 ache a solução ótima.

(11) Z = 16 x1 = x2 = 2.67 x3 = 0 (Problema 1)

Uma vez que a solução não apresenta valor inteiro, prossiga do Passo 3 ao Passo 4e escolha x1. Então [b1] = floor(2.67) = 2, coloque na Lista-Mestra:

Problema 2: restrições (9) e

(12)

Problema 3: restrições (9) e

Retornando ao Passo 1 com Z2 = Z1 = 0, remova o problema 2. O Passo 2estabelece que o problema 2 não tem solução viável. Então faça Z3 = Z2 = 0 eretorne ao Passo 1. Retire o problema 3 e obtenha, no Passo 2, a solução ótima:

(13) Z = 15.71 x1 = x2 = 2 x3 = 0.28 (Problema 3), o qual por sua vez,também não tem valor inteiro. Portanto, vá do Passo 3 ao Passo 4, onde é escolhidox3. Uma vez que [b3] = floor(0.28) = 0, coloque na Lista-Mestra:

5x05x05x3 321 ≤≤≤≤≤≤

5x05x02x0 321 ≤≤≤≤≤≤

Fernando Nogueira Programação Inteira 11

Uma vez que a solução não apresenta valor inteiro, prossiga do Passo 3 ao Passo 4 eescolha x1. Então [b1] = floor(2.67) = 2, coloque na Lista-Mestra:

Problema 2: restrições (9) e

(12)

Problema 3: restrições (9) e

Retornando ao Passo 1 com Z2 = Z1 = 0, remova o problema 2. O Passo 2 estabeleceque o problema 2 não tem solução viável. Então faça Z3 = Z2 = 0 e retorne ao Passo1. Retire o problema 3 e obtenha, no Passo 2, a solução ótima:

(13) Z = 15.71 x1 = x2 = 2 x3 = 0.28 (Problema 3), o qual por sua vez,também não tem valor inteiro. Portanto, vá do Passo 3 ao Passo 4, onde é escolhidox3. Uma vez que [b3] = floor(0.28) = 0, coloque na Lista-Mestra:

Problema 4: restrições (9) e

(14)

Problema 5: restrições (9) e

5x05x05x3 321 ≤≤≤≤≤≤

5x05x02x0 321 ≤≤≤≤≤≤

5x15x02x0 321 ≤≤≤≤≤≤

0x05x02x0 321 ≤≤≤≤≤≤

Fernando Nogueira Programação Inteira 12

Observe que os problemas 4 e 5 diferem do problema 3 somente nos limites para x3.Retornando ao Passo 1 com Z4 = 0, remova o problema 4. A solução ótima é:

(15) Z = 15 x1 = x2 = 0.33 x3 = 1 (Problema 4), o qual por sua vez, tambémnão tem valor inteiro. Portanto, vá do Passo 3 ao Passo 4. Suponha que você escolhax2 (poderia ter escolhido x1 também). Uma vez que [b2] = floor(0.33) = 0, coloquena Lista-Mestra:

Problema 6: restrições (9) e

(16)

Problema 7: restrições (9) e

Observe que os problemas 6 e 7 diferem do problema 4 somente nos limites para x2.Retornando ao Passo 1 com Z5 = 0, remova o problema 6 de modo que osproblemas 5 e 7 permaneçam na Lista-Mestra. O Passo 2 indicou que o problema 6não tem solução viável. Então retorne ao Passo 1 com Z6 = 0. Remova então oproblema 7, cuja solução ótima é:

(17) Z = 14.86 x1 = x2 = 0 x3 = 1.14 (Problema 7). Como x3 não é inteiro,então [b3] = floor(1.14) = 1, coloque na Lista-Mestra:

5x15x12x0 321 ≤≤≤≤≤≤

5x10x02x0 321 ≤≤≤≤≤≤

Fernando Nogueira Programação Inteira 13

Observe que os problemas 6 e 7 diferem do problema 4 somente nos limites parax2. Retornando ao Passo 1 com Z5 = 0, remova o problema 6 de modo que osproblemas 5 e 7 permaneçam na Lista-Mestra. O Passo 2 indicou que oproblema 6 não tem solução viável. Então retorne ao Passo 1 com Z6 = 0.Remova então o problema 7, cuja solução ótima é:

(17) Z = 14.86 x1 = x2 = 0 x3 = 1.14 (Problema 7). Como x3 não é inteiro,então [b3] = floor(1.14) = 1, coloque na Lista-Mestra:

Problema 8: restrições (9) e

(18)

Problema 9: restrições (9) e

Observe que os problemas 8 e 9 diferem do problema 7 somente nos limites parax3. Retornando ao Passo 1 com Z7 = 0, remova o problema 8. O Passo 2 indicouque o problema 8 não tem solução viável. Então retorne ao Passo 1 com Z8 = 0.Remova então o problema 9, cuja solução ótima é:

(19) Z = 13.5 x1 = 0.16 x2 = 0 x3 = 1 (Problema 9). Como x1 não éinteiro, então [b1] = floor(0.16) = 0, coloque na Lista-Mestra:

5x20x02x0 321 ≤≤≤≤≤≤

1x10x02x0 321 ≤≤≤≤≤≤

Fernando Nogueira Programação Inteira 14

Problema 10: restrições (9) e

(20)

Problema 11: restrições (9) e

Observe que os problemas 10 e 11 diferem do problema 9 somente nos limites parax1. Retornando ao Passo 1 com Z9 = 0, remova o problema 10. O Passo 2 indicouque o problema 10 não tem solução viável. Então retorne ao Passo 1 com Z10 = 0.Remova então o problema 11, cuja solução ótima é (repare que os valores de xj nãopodem mais variar):

(21) Z = 13 x1 = 0 x2 = 0 x3 = 1 (Problema 11).

Portanto, no Passo 3 registra-se (21), uma vez que a solução acima é viável einteira e Z11 = 13.

Retornando ao Passo 1, observa-se que somente o problema 5 permanece na Lista-Mestra, portanto, ainda não é possível afirma que (21) é a solução ótima.

1x10x02x1 321 ≤≤≤≤≤≤

1x10x00x0 321 ≤≤≤≤≤≤

Fernando Nogueira Programação Inteira 15

A solução ótima do problema 5 é:

(22) Z = 13 x1 = 2 x2 = 2.33 x3 = 0 (Problema 5).

Uma vez que Z = Z11, retorna-se ao Passo 1 e termina-se os cálculos, pois a Lista-Mestra está vazia. A solução ótima então é (21).

O histórico das iterações pode ser exposto por meio de um diagrama em árvore. Cadanó na árvore representa um problema na Lista-Mestra. Note que, para o problema 5, oramo está terminado, embora a solução ótima não tenha valor inteiro. A razão é que,quando atinge-se o problema 5 em t = 11 e Z = 13, já existe uma solução inteira com Z= 13 obtida no problema 11. Portanto, ramificar o problema 5 irá impor restrições maisfortes, ocasionando então valores menores de Z para os problemas descendentes doproblema 5, o que justifica então, o fim da busca na árvore.

Fernando Nogueira Programação Inteira 16

Fernando Nogueira Programação Inteira 17

A tabela abaixo, resume as operações de busca na árvore.

Fernando Nogueira Programação Inteira 18

Problema do Caixeiro Viajante - The Traveling Salesperson ProblemO problema do Caixeiro Viajante consiste em encontrar o caminho mais curto no qualele visite cada cidade apenas uma vez e retorne a sua cidade de origem.Em termos técnicos, as cidades são os nós de uma rede e as estradas que ligam ascidades são os arcos da rede.Este problema pode ser resolvido como um problema de Programação Linear Inteira.Nesta metodologia o número de restrições é n2-n+2.

Fernando Nogueira Programação Inteira 19{ } ( )n,...,1j;n,...,1i1,0x

ji;n,...,3,2j;n,...,3,2i,1nnxuu

n,...,2,1j1x

n,...,2,1i1x

asujeito

jiparacxcZmin

ij

ijji

n

1iij

n

1jij

ij

n

1i

n

1jijij

===

≠==−≤+−

==

==

=∞==

∑∑

=

=

= =cij é a distância (custo) entre os nós i e j;

xij é o fluxo entre os nós i e j;

Z é a distância (custo) total; e

n é o número de cidades.

Fernando Nogueira Programação Inteira 20

( )( ) ( )

( )

{ }1,0x

Aij,1jx2N1Nu

Aij,ji,1j,1ix3Nx12Nxuu

Aij,1j1x

Aij,ji,1j1x

asujeito

AijxcZmin

ij

j1j

jiijijij

N

jj1

N

iij

1i 1jijij

=

∈∀>∀−−−≤

∈∀≠>>∀−+−−−+≥

∈∀>∀≥

∈∀≠>∀=

∈∀=

∑∑= =

Problema da Árvore Geradora Mínima

Modelagem em Programação Inteira (binária)

Fernando Nogueira Programação Inteira 21

MIN=2*X12+5*X13+4*X14+2*X21+2*X23+7*X25+5*X31+2*X32+X34+4*X35+3*X36+4*X41+X43+4*X46+7*X52+4*X53+X56+5*X57+3*X63+4*X64+X65+7*X67+X72+5*X75+7*X76;

X12+X32+X52=1;-6*X23-4*X32-U2+U3>=-5;-6*X25-4*X52-U2+U5>=-5;

X13+X23+X43+X53+X63=1;-4*X23-6*X32+U2-U3>=-5;-6*X34-4*X43-U3+U4>=-5;-6*X35-4*X53-U3+U5>=-5;-6*X36-4*X63-U3+U6>=-5;

X14+X34+X64=1;-4*X34-6*X43+U3-U4>=-5;-6*X46-4*X64-U4+U6>=-5;

X25+X35+X65+X75=1;-4*X25-6*X52+U2-U5>=-5;-4*X35-6*X53+U3-U5>=-5;-6*X56-4*X65-U5+U6>=-5;-6*X57-4*X75-U5+U7>=-5;

X36+X46+X56+X76=1;-4*X36-6*X63+U3-U6>=-5;-4*X46-6*X64+U4-U6>=-5;-4*X56-6*X65+U5-U6>=-5;-6*X67-4*X76-U6+U7>=-5;

X57+X67=1;-4*X57-6*X75+U5-U7>=-5;-4*X67-6*X76+U6-U7>=-5;

X12+X13+X14>=1;5*X12+U2<=6;5*X13+U3<=6;5*X14+U4<=6;

@BIN(X12);@BIN(X13);@BIN(X14);@BIN(X21);@BIN(X23);@BIN(X25);@BIN(X31);@BIN(X32);@BIN(X34);@BIN(X35);@BIN(X36);@BIN(X41);@BIN(X43);@BIN(X46);@BIN(X52);@BIN(X53);@BIN(X56);@BIN(X57);@BIN(X63);@BIN(X64);@BIN(X65);@BIN(X67);@BIN(X75);@BIN(X76);