Sie sind auf Seite 1von 71

UFFLP: Integrando Programao Inteira Mista e Planilhas de Clculo

Artur Pessoa Eduardo Uchoa Engenharia de Produo UFF

Roteiro Aula 1
Apresentao geral da UFFLP Criao de modelos bsicos com UFFLP
Exemplo 1: Problema do Mix de Produo Exemplo 2: Problema da p-Mediana

Programao Linear e Inteira Mista


Importantes ferramentas bsicas em Pesquisa Operacional Pacotes resolvedores de PIM: Fechados (alto desempenho, licenas comerciais caras)
IBM ILOG CPLEX FICO XPRESS Gurobi (graas a ele, hoje todos esses pacotes oferecem licenas acadmicas ilimitadas e gratuitas sob certas condies).

Abertos (mdio desempenho)


COIN CBC GLPK MINLP

Como usar esses pacotes?


1. Criar manualmente arquivos nos formatos MPS ou LP
Invivel exceto para modelos simples e poucos dados No separa o modelo dos dados Muitos cursos de PO ainda no ensinam outros mtodos => Muitos engenheiros de produo recm-formados no so capazes de aplicar PIM em problemas reais.
Maximize obj: 12 x1 + 5 x2 + 15 x3 + 10 x4 Subject To c1: 5 x1 + x2 + 9 x3 + 12 x4 <= 15 c2: 3 x1 + 2 x2 + 4 x3 + 10 x4 <= 8 Bounds 0 <= x1 <= 5 0 <= x2 <= 5 0 <= x3 <= 5 0 <= x4 <= 5 Generals x1 x2 x3 x4 End

Como usar esses pacotes?


2. Usar interfaces integradas a planilhas (tipo Solver do Excel)
Sem dvida melhor, mas ainda invivel para problemas reais com milhares de restries. Separao entre modelo e dados pouco clara. Geralmente usam resolvedores com desempenho inferior.

Como usar esses pacotes?


3. Usar funes de programao C/C++/Java oferecidas pelos pacotes
Permite criar modelos de tamanho e complexidade arbitrrios Baixo nvel, variveis e restries referenciadas pela numerao das colunas e linhas. Exige conhecimento relativamente avanado de programao
int CPXaddcols (CPXENVptr env, CPXLPptr lp, int ccnt, int nzcnt, double *obj, int *cmatbeg, int *cmatind, double *cmatval, double *lb, double *ub, char **colname);

Como usar esses pacotes?


4. Usar linguagens de modelagem
Permite criar modelos de tamanho e complexidade arbitrrios Alto nvel, variveis e restries representadas de forma semelhante a notao matemtica Separao entre modelo e dados Exige pouco conhecimento de programao
Na verdade, modelos simples exigem um mnimo de programao; modelos complexos acabam exigindo bastante programao.

Atualmente a melhor alternativa para um usurio que pretende fazer uso srio de PIM, mas no tem formao em computao. Particularmente apropriada para prottipos.

AMPL: diet1.mod
set NUTR ordered; set FOOD ordered; param cost {FOOD} >= 0; param f_min {FOOD} >= 0, default 0; param f_max {j in FOOD} >= f_min[j], default Infinity; param n_min {NUTR} >= 0, default 0; param n_max {i in NUTR} >= n_min[i], default Infinity; param amt {NUTR,FOOD} >= 0; var Buy {j in FOOD} integer >= f_min[j], <= f_max[j]; # -------------------------------------------------------minimize Total_Cost: sum {j in FOOD} cost[j] * Buy[j]; subject to Diet {i in NUTR}: n_min[i] <= sum {j in FOOD} amt[i,j] * Buy[j] <= n_max[i];

AMPL: diet1.dat
param: FOOD: "Quarter Pounder w/ Cheese" "McLean Deluxe w/ Cheese" "Big Mac" "Filet-O-Fish" "McGrilled Chicken" "Fries, small" "Sausage McMuffin" "1% Lowfat Milk" "Orange Juice" param: NUTR: Cal Carbo Protein VitA VitC Calc Iron cost f_min f_max := 1.84 . . 2.19 . . 1.84 . . 1.44 . . 2.29 . . 0.77 . . 1.29 . . 0.60 . . 0.72 . .;

n_min n_max := 2000 . 350 375 55 . 100 . 100 . 100 . 100 .;

AMPL: diet1.dat
param amt (tr): "Quarter Pounder w/ Cheese" "McLean Deluxe w/ Cheese" "Big Mac" "Filet-O-Fish" "McGrilled Chicken" "Fries, small" "Sausage McMuffin" "1% Lowfat Milk" "Orange Juice" Cal Carbo Protein VitA VitC 510 34 28 15 6 30 370 35 24 15 10 20 500 42 25 6 2 25 370 38 14 2 0 15 400 42 31 8 15 15 220 26 3 0 15 0 345 27 15 4 0 20 110 12 9 10 4 30 80 20 1 2 120 2 Calc Iron := 20 20 20 10 8 2 15 0 2;

Pacotes que incluem linguagens de modelagem


Fechados (incluem sofisticadas interfaces para importao/exportao de dados, ambiente de depurao, ferramentas de visualizao, etc)
AMPL
Verso de estudante limitada a 300 var/rest

GAMS
Licena acadmica c/ interface CPLEX: $1280

MOSEL (XPRESS)
Nmero limitado de licenas p/ Academic Partners

OPL (CPLEX)
Livre para Academic Initiative

Abertos (praticamente s a prpria linguagem)


COIN PuLP Zimpl

Uma crtica s linguagens de modelagem


Perfeitas para restries simples, que s usam conceitos matemticos previstos na linguagem (Ex: somatrio de j=1 at m).
m

x
j =1

ij

=1

i = 1, , n

Entretanto, restries complexas obrigam o usurio a programar numa linguagem nova e relativamente pobre, que carece de algumas construes e recursos bsicos encontradas em linguagens de uso geral ...

Uma crtica s linguagens de modelagem


Um usurio (mesmo que saiba programar!) tem uma grande dificuldade ao se deparar com a primeira restrio que usa um conceito matemtico no diretamente suportado pela linguagem. Ex: Uma enumerao de permutaes, uma operao sobre grafos, etc.

UFFLP
Uma abordagem de mdio nvel:
um conjunto de funes em C/C++/VBA (em breve, Java) As variveis e restries so indexadas pelo nome. Outros conceitos matemticos, simples ou complexos, so implementados na linguagem hospedeira.

UFFLP
Modelos simples so escritos de forma quase to simples quanto nas linguagem de modelagem.
Ex: um somatrio de 1 a m exige um comando de iterao
em C: for(j=1;j<=m;j++){...} em VBA: For j=1 To n ... Next j

Modelos complexos se beneficiam de todas as construes e recursos existentes na linguagem hospedeira.


Ex: uma funo recursiva para gerar permutaes, uma bibilioteca de algoritmos sobre grafos. Existe maior motivao para aprender algo que faz parte de uma linguagem de uso geral. Farta documentao, exemplos na internet, etc.

UFFLP em VBA
O suporte linguagem VBA (Visual Basic for Applications) essencial na concepo da UFFLP: Apesar de injustamente criticada por puristas de computao, a linguagem Basic possui uma das mais rpidas curvas de aprendizado.

UFFLP em VBA
A planilha Excel (que contm um interpretador VBA) fornece mais recursos do que os disponveis em qualquer pacote contendo uma linguagem de modelagem: Ambiente de depurao Facilidade na manipulao de dados Importao/Exportao para praticamente qualquer outra plataforma Funes grficas

UFFLP em VBA
A UFFLP chamada de dentro do Excel vem sendo usada com sucesso desde 2007 nos cursos de psgraduao em engenharia de produo da UFF:
Alguns alunos que nunca tinham programado, ao final dos cursos se mostraram capazes de escrever aplicaes de modelos de PIM para uso real.

UFFLP - Resolvedores de PIM

Atualmente a UFFLP suporta os resolvedores CPLEX e COIN CBC

Exemplo 1 Problema do Mix de Produo


Uma fbrica de cadeiras capaz de produzir os seguintes modelos:

Exemplo 1 Problema do Mix de Produo

O limitante da produo o fornecimento de 2 matria-primas: lminas de madeira e tecido

50 lminas/semana

75 metros/semana

Lucro X gasto de matria-prima

150 1 1

500 4 1

400 3 1

200 1 2

Modelo de programao linear

max 150 x1 + 500 x2 + 400 x3 + 200 x4 1 x1 1 x1 + 4 x2 + 1 x2 + 3 x3 + 1 x3 + 1 x4 + 2 x4 50 75

Modelo de programao linear

max 150 x1 + 500 x2 + 400 x3 + 200 x4 1 x1 1 x1 + 4 x2 + 1 x2 + 3 x3 + 1 x3 + 1 x4 + 2 x4 50 75

Soluo: x1= 25, x2= 0, x3= 0, x4= 0; lucro = R$8750,00

Funes bsicas UFFLP


1. 2. 3. 4. 5. 6. 7. 8. UFFLP_CreateProblem UFFLP_AddVariable UFFLP_SetCoefficient UFFLP_AddConstraint UFFLP_Solve UFFLP_GetObjValue UFFLP_GetSolution UFFLP_DestroyProblem Usadas em praticamente qualquer aplicao

Outras funes UFFLP usadas no exemplo


UFFLP_WriteLP UFFLP_SetLogInfo

UFFLP: linguagem C

UFFLP: linguagem C

UFFLP: linguagem VBA

UFFLP: linguagem VBA

Exemplo 2 Problema das pmedianas


n clientes m locais potenciais p/ abrir algum servio Distncias dij entre cliente i e local j Escolher p locais para minimizar a soma das distncias de cada cliente ao local aberto mais prximo.

Exemplo 2 Problema das pmedianas


Variveis: xj (j = 1, ..., m) = 1 se o local j aberto yij (i = 1, ..., n; j = 1, ..., m) = 1 se o cliente i atendido no local j

Exemplo 2 Problema das pmedianas


n m ij

Min S.a

d
i =1 j =1 m j =1 ij

yij i = 1, n

y
m

=1

yij x j 0 i = 1, n; j = 1, m

x
j =1

=p i = 1, n; j = 1, m j = 1, m

x j {0,1}

yij {0,1}

Tela principal Excel

Criao das variveis

Criao das restries

Roteiro Aula 2
Modelos avanados com UFFLP Separao de cortes / branch-and-cut
Exemplo 3: Problema da Soma Mxima Exemplo 4: Problema do Caixeiro Viajante

Gerao de colunas
Exemplo 5: Problema do Bin Packing

Exemplo 3 Problema da Soma Mxima


Instncia fixa de exemplo: 8 nmeros:
13332 252342 223442 75312 83435 282632 374351 263721

Encontrar um subconjunto cuja soma seja mxima sem ultrapassar


1143641

A soluo tima soma 1132767

Adicionando Cortes no UFFLP


1. 2. 3. 4. 5. UFFLP_SetCutCallBack UFFLP_GetSolution * UFFLP_SetCoefficient * UFFLP_AddConstraint * UFFLP_PrintToLog *

Dentro de uma funo de call back de gerao de cortes Retorna a soluo da relaxao linear do n corrente da rvore de B&B

Adicionando Cortes no UFFLP

Funo de call back de separao

Exemplo 4 Problema do Caixeiro Viajante


n cidades p/ visitar Distncias dij entre as cidades i e j Escolher um circuito de comprimento mnimo visitando cada cidade uma nica vez e voltando ao ponto de partida.

Exemplo 4 Problema do Caixeiro Viajante


G = (V,E) um grafo completo onde cada vrtice uma cidade.

Variveis: xe (e = (i,j) E) = 1 se o caminho entre as cidades i e j usado em qualquer sentido

Exemplo 4 Problema do Caixeiro Viajante


Min S.a

e ( i )

d x
eE

xe =2 i V

e ( S )

xe 2 S V e E

xe {0,1}

Nmero exponencial de restries

Problema de Separao

xe (e = (i,j) E) = valor fracionrio da


varivel xe na soluo tima da relaxao linear.

Encontrar S V que minimiza

e ( S )

xe

Se o valor timo for menor que 2, o corte est violado

Problema de Separao
S
1 0,1 0,2 0,3 0,8 0,9 1 0,3

0,6

0,1 0,8 0,9

Valor = 0,8

Problema de Separao

Variveis: we (e E) = 1 se e (S) yi (i = 1, ..., n) = 1 se i S

Problema de Separao
Min S. a

x
eE

we e = (i, j ) E e = (i, j ) E

we yi y j we y j yi
n

y
i =2

n2 e E i = 2, , n

y1 = 1 we {0,1} yi {0,1}

Tela Principal Excel

Criao do MIP Incompleto

Criao das variveis (Separao)

Criao das restries (Separao)

Insero do corte (Separao)

Exemplo 5 Problema do Bin Packing


Dado um conjunto de n items, cada um com um peso wi, coloc-los no menor nmero possvel de caixas com capacidade C.

Exemplo: n=5, w1= 3, w2 = 4, w3 = 6, w4 = 8, w5=9 e C=10.

Exemplo 5 Problema do Bin Packing


Dado um conjunto de n items, cada um com um peso wi, coloc-los no menor nmero possvel de caixas com capacidade C.

Exemplo: n=5, w1= 3, w2 = 4, w3 = 6, w4 = 8, w5=9 e C=10. So necessrias 4 caixas.

Formulao de Kantorovitch
Seja U um limite superior ao nmero de caixas necessrias. Variveis yj indicando se a caixa j vai ser usada. Variveis xij indicando que o item i vai para a caixa j.
U

M in S.a

y
n j =1 U i =1

j =1 ij

i = 1 n j = 1U

wi xij

x, y

{0,1}

C. y j
n (U +1)

Formulao de Kantorovitch
Essa formulao no funciona na prtica O limite inferior da sua relaxao linear ruim, igual ao n limite trivial w C .

i =1

No exemplo, esse limite seria 2,9. A simetria das variveis faz com que algoritmos para PI, como o branch-and-bound, sejam ineficientes.

Formulao de GilmoreGomory
Defina uma varivel para cada uma das Q possveis combinaes de itens em caixas. O nmero Q pode ser muito grande! Com n=5, w1= 3, w2 = 4, w3 = 5, w4 = 8, w5=9 e C=10; so 8 combinaes: {1}, {2}, {3}, {4}, {5}, {1,2}, {1,3} {2,3}.

Formulao de GilmoreGomory
Defina o coeficiente aij como sendo 1 se o item i est na combinao j e 0 caso contrrio.
Q

M in S.a


j =1 Q j =1

aij j

i = 1 n
Q

{0,1}

Formulao de GilmoreGomory
No exemplo:

Min 1 S.a

+ 2

+ 3

+ 4

+ 5

+ 6 + 6 + 6

+ 7 + 7 + 7

+ 8 + 8 + 8 = = = = = 1 1 1 1 1

1 2 3 4 5

{0,1}8

Formulao de GilmoreGomory
No exemplo acima, o limite obtido pela relaxao linear da formulao 3,5. Em geral, os limites dessa relaxao so extremamente fortes. Raramente se encontra uma instncia em que o limite arredondado para cima no iguale o valor da soluo tima. Nunca se achou uma instncia em que o limite arredondado para cima estivesse a mais de 1 unidade da soluo tima!

Resolvendo a relaxao linear por Gerao de Colunas


Seja R um (pequeno) subconjunto das variveis suficiente para que o seguinte PL mestre tenha soluo:

M in S.a

jR

jR

aij j

= 1 i = 1 n 0

Seja o vetor de variveis duais timas

Subproblema de Pricing
M in 1 i xi S.t.
n

i =1 n

i =1

wi xi

{0,1}

Esse um clssico problema da mochila, que NPdifcil, mas muito bem resolvido na prtica. Enquanto o valor da soluo do subproblema for negativo, a varivel correspondente adicionada ao conjunto R e o PL mestre resolvido novamente. Caso contrrio, a soluo do PL mestre a soluo da relaxao da formulao G-G.

Obtendo boas solues inteiras

Uma possvel maneira de encontrar boas solues inteiras para o problema do bin packing resolver um MIP apenas com as variveis do conjunto R final. O limite inferior encontrado pela relaxao muitas vezes suficiente para provar que essa soluo tima.

Outras Funes UFFLP usadas no exemplo


UFFLP_GetDualSolution UFFLP_ChangeVariableType

Tela principal Excel

Criao do PL Mestre

Criao do Subproblema

Adio de Varivel (coluna)

Notar a simetria entre a adio de restries e de variveis

Resolve o Mestre Restrito Final como um MIP

Obrigado!

Das könnte Ihnen auch gefallen