breve introdu o ao uso de solvers para resolver...

36
Breve introdução ao uso de solvers para resolver problemas de programação linear Professor: Geraldo Robson Mateus Monitor: Diego Mello da Silva [email protected] UNIVERSIDADE FEDERAL DE MINAS GERAIS Departamento de Ciência da Computação Pesquisa Operacional 3 de maio de 2010 Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 1 / 36

Upload: buihanh

Post on 19-Aug-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Breve introdução ao uso de solvers para resolverproblemas de programação linear

Professor: Geraldo Robson MateusMonitor: Diego Mello da Silva

[email protected]

UNIVERSIDADE FEDERAL DE MINAS GERAISDepartamento de Ciência da Computação

Pesquisa Operacional

3 de maio de 2010

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 1 / 36

Sumário

1 Definições

2 Linguagens de Modelagem

3 Pacotes Comerciais

4 Exemplos

5 Referências Bibliográficas

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 2 / 36

O que é um LP Solver?

Wikipedia: http://en.wikipedia.org/wiki/Solver

◮ Solver é um termo genérico para definir uma parte de um softwarematemático (programa de computador ou biblioteca) que ‘resolve’um problema matemático.

◮ Ele pega a descrição do problema de alguma forma e calcula umasolução para o mesmo.

◮ A ênfase está em criar um programa ou biblioteca que pode serfacilmente aplicada à outros problemas similares.

Um LP solver é, dessa forma, um pacote de software capaz deresolver problemas de programação matemática linear.

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 3 / 36

Pacotes comerciais para PL

Existem diversos pacotes comerciais e gratuítos disponíveis pararesolver problemas de programação linear. Em geral, eles diferementre sí pelos métodos implementados e tipos de problemas quesão capazes de resolver.

São exemplos deles:◮ ILOG CPLEX (IBM): Simplex, Pontos Interiores, Barrier, Branch &

Bound. Resolve problemas de programação inteira, programaçãolinear de larga escala, programação quadrática, problemas comrestrições quadráticas convexas.

◮ Gnu Linear Programming Kit (GLPK): Simplex Primal/Dual,Pontos Interiores Primal/Dual, Branch & Cut. Resolve problemasde programação linear e programação inteira mista.

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 4 / 36

AMPL

AMPL (A Mathematical Programming Language) consiste emuma linguagem algébrica descritiva usada para modelarproblemas de programação linear [Fourer, 1990].

AMPL permite separar o modelo (representação simbólica daclasse de problemas) dos dados necessários para especificaruma instância particular do problema [Gay, 2001]

Permite expressar o problema na forma do modelador , mas deuma maneira que o computador possa compreender o modelo

Evita erros ao traduzir o modelo em estruturas de dadoscomputacionais que podem ser resolvidas pelos algoritmos

É uma linguagem suportada por vários pacotes comerciaisdisponíveis no mercado

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 5 / 36

GNU MathProg (GMPL)

Consiste em um subconjunto da linguagem AMPL,compartilhando muitas partes da sintaxe dessa poderosalinguagem de modelagem

Em um processo denominado de tradução , um programachamado tradutor de modelo analisa a descrição do modelo e otraduz em estruturas de dados internas

Tais estruturas de dados podem ser usadas:◮ para a geração de instâncias de problemas de programação

matemática

◮ diretamente por um programa solver para obter a soluçãonumérica do problema

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 6 / 36

Componentes de um modelo de PL em AMPL/GMPL

Conjunto : qualquer coleção desordenada de objetos pertinentesao modelo.

Parâmetro : qualquer valor numérico pertinente ao modelo,fornecido pelo usuário.

Variável : valores numéricos determinados através da resoluçãodo problema (variáveis de decisão).

Objetivo : qualquer expressão linear de parâmetros e variáveis.

Restrição : qualquer igualdade/desigualdade linear deparâmetros e variáveis.

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 7 / 36

ILOG CPLEXILOG CPLEX é um dos pacotes comerciais mais utilizados pararesolver problemas de programação linear e programação inteira

Suporta arquivos de entrada escritos no formato das linguagensde modelagem AMPL e GMPL

Resolve problemas de programação linear, assim como diversasextensões de PL:

◮ Problemas Fluxo de Rede : uma caso especial de PL que permiteao CPLEX resolver mais rapidamente explorando a estrutura doproblema

◮ Programação Quadrática : problemas de PL onde a funçãoobjetivo é expandida para permitir termos quadráticos

◮ Programação Inteira Mista : problemas onde algumas (ou todas)das variáveis de decisão é restrita a possuir um valor inteiro nasolução

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 8 / 36

ILOG CPLEXCPLEX é disponibilizado de 3 maneiras diferentes, para cobrir as necessidades deseus usuários:

CPLEX Callable Library : permite aos programadores embutir otimizadoresILOG CPLEX em aplicações escritas em C, VBasic, Fortran ou qualquer outralinguagem que permita chamar funções escritas em C. A biblioteca édisponibilizada através dos arquivos cplex.dll e cplex.lib (PlataformaWindows) e pelos arquivos libcplex.a , libcplex.so e libcplex.sl(Plataforma UNIX)

ILOG Concert Technology : biblioteca de classes e funções em C++, Java e.NET que permite definir modelos para problemas de otimização e utilizaralgoritmos para resolvê-los. Provê estruturas de dados e estruturas de controleque permitem integrar a parte de otimização com o restante da aplicação emtempo real (por exemplo, para adicionar restrições ao programa em tempo deexecução)

CPLEX Interactive Optimizer : Programa executável que permite ler umproblema interativamente ou a partir de arquivos escritos nos padrões deentrada conhecidos, e entrega a solução do problema interativamente ou apartir de arquivo de saída.

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 9 / 36

GNU GLPK

Consiste em uma implementação em ANSI C do algoritmosimplex duas-fases, do método dos pontos interiores primal-dualdo do método branch-and-bound para resolver programaçãointeira mista

Inclui um solver para problemas de PL e PI construído a partirdessa rotinas (glpsol ), e suporta a linguagem de modelagemGMPL

Fornece um pré-solver opcional, que transforma o problema emum que possua propriedades numéricas ‘melhores’ para oalgoritmo simplex – característica esta particularmente útil paraproblemas de otimização de larga-escala

Permite utilizar a biblioteca GLPK em programas escritos em C

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 10 / 36

Comandos: AMPLshow Exibe os nomes dos conjuntos, variáveis, parâ-

metros, restrições e função objetivo do modeloshow <objeto> Quando informado, exibe a implementação do

conjunto, variável, parâmetro, restrição ou fun-ção objetivo informada

expand Exibe o modelo PL atual, com os dados instan-ciados. Útil para depuração do modelo

expand <objeto> Exibe o objeto instanciadomodel <file.mod> Informa qual é o arquivo de modelo a processardata <file.dat> Informa qual é o arquivo de dados contendo a

instância a resolveroption solver cplex Escolhe o CPLEX para resolver o modelooption cplex_options <opções> Configura opções do CPLEX via AMPL. Por

exemplo, pode-se usar ’sensitivity’ pararetornar dados de análise de sensibilidade, e’primalopt’ para usar o método primal sim-plex (outras opções permitem usar métodos dualsimplex, otimizador barrier, otimizador inteiromisto e otimizador de redes

solve Resolve o modelo instanciado usando o solverdefinido

quit Encerra a execução do AMPL

Tabela: Comandos AMPL para análise de sensibilidade - variáveisDiego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 11 / 36

Análise de Sensibilidade: AMPL

A análise de sensibilidade permite-nos exibir custos reduzidos, shadow prices, e osintervalos para os coeficientes da função objetivo e dos right-hand-sides

display <var name>.rc Exibe o custo reduzido da variável especi-ficada

display <var name>.down Exibe o parâmetro inferior da faixa de coe-ficientes da função objetivo da variável es-pecificada para o qual a base atual aindapermanece ótima

display <var name>.up Exibe o parâmetro superior da faixa de co-eficientes da função objetivo da variável es-pecificada para o qual a base atual aindapermanece ótima

display <var name>.current Exibe o valor atual dos coeficientes da fun-ção objetivo da variável especificada

Tabela: Comandos AMPL para análise de sensibilidade - variáveis

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 12 / 36

Análise de Sensibilidade: AMPLA análise de sensibilidade permite-nos exibir custos reduzidos, shadow prices, e osintervalos para os coeficientes da função objetivo e dos right-hand-sides

display <constr name> Exibe o shadow price da restrição infor-mada

display <constr name>.dual Exibe as variáveis duais da restrição espe-cificada

display <constr name>.slack Exibe as variáveis de folga da restrição es-pecificada

display <constr name>.down Exibe o parâmetro inferior da faixa do right-hand-side da restrição especificada para oqual a base atual ainda permanece factível,e ótima

display <constr name>.up Exibe o parâmetro superior da faixa doright-hand-side da restrição especificadapara o qual a base atual ainda permanecefactível, e ótima

display <constr name>.current Exibe o valor atual do right-hand-side darestrição especificada

Tabela: Comandos AMPL para análise de sensibilidade - restriçõesDiego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 13 / 36

Unindo o modelo aos dados de um problemaSeja um problema de programação linear na forma padrão:

min cT xAx = bxj ≥ 0

onde A é uma matriz de m linhas e n colunas. Sejam as instâncias para essesproblemas:

Instância 01

A =

2 1 1 01 3 0 1

«

, b =

23

«

e c =

0

B

B

@

−0.3−0.5

00

1

C

C

A

,

Instância 02

A =

0

@

1 2 2 1 0 02 1 2 0 1 02 2 1 0 0 1

1

A, b =

0

@

202020

1

A e c =

0

B

B

B

B

B

@

−10−12−12

000

1

C

C

C

C

C

A

,

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 14 / 36

Unindo o modelo aos dados de um problema (2)

modelo-forma-padrao.mod/ * Dimensões * /param n;param m;

/ * Matrizes e vetores * /param A {i in 1..m, j in 1..n};param b {i in 1..m};param c {j in 1..n};

/ * Variável de decisão * /var x {j in 1..n};

/ * Função objetivo * /minimize objective: sum {j in 1..n} c[j] * x[j];

/ * Restrições * /s.t. constrains {i in 1..m}: sum {j in 1..n} A[i,j] * x[j] = b[i];s.t. domain {j in 1..n}: x[j] >= 0;

end;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 15 / 36

Unindo o modelo aos dados de um problema (3)

instancia01.datparam n := 4;param m := 2;

param A: 1 2 3 4 :=1 2 1 1 02 1 3 0 1;

param b :=1 22 3;

param c :=1 -0.32 -0.53 04 0;

end;

instancia02.datparam n := 6;param m := 3;

param A: 1 2 3 4 5 6:=1 1 2 2 1 0 02 2 1 2 0 1 03 2 2 1 0 0 1;

param b :=1 202 203 20;

param c :=1 -102 -123 -124 05 06 0;

end;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 16 / 36

Resolução do PL representado pela instância 02

Resolvendo o problema pelo tableau simplex:

z x1 x2 x3 x4 x5 x6 RHSz 1 10 12 12 0 0 0 0x4 0 1 2 2 1 0 0 20x5 0 2 1 2 0 1 0 20x6 0 2 2 1 0 0 1 20

Tabela: Iteração 01

z x1 x2 x3 x4 x5 x6 RHSz 1 0 4 0 -2 -4 0 -120x3 0 0 1.5 1 1 -0.5 0 10x1 0 1 -1 0 -1 1 0 0x6 0 0 2.5 0 1 0.5 1 10

Tabela: Iteração 03

z x1 x2 x3 x4 x5 x6 RHSz 1 0 7 2 0 -5 0 -100x4 0 0 1.5 1 1 -0.5 0 10x1 0 1 0.5 1 0 0.5 0 10x6 0 0 1 -1 0 -1 1 0

Tabela: Iteração 02

z x1 x2 x3 x4 x5 x6 RHSz 1 0 0 0 -3.6 -1.6 -1.6 -136x3 0 0 0 1 0.4 0.4 -0.6 4x1 0 1 0 0 -0.6 0.4 0.4 4x2 0 0 1 0 0.4 -0.6 0.4 4

Tabela: Iteração 04

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 17 / 36

Resolvendo pelo solver: GLPK

$ glpsol -m modelo-forma-padrao.mod -d instancia02.dat -o resultado.solReading model section from modelo-padrao.mod...20 lines were readReading data section from instancia02.dat...22 lines were readGenerating objective...Generating constrains...Generating domain...Model has been successfully generatedglp_simplex: original LP has 10 rows, 6 columns, 21 non-zero sglp_simplex: presolved LP has 3 rows, 3 columns, 9 non-zeroslpx_adv_basis: size of triangular part = 3

* 0: objval = 0.000000000e+00 infeas = 0.000000000e+00 (0)

* 3: objval = -1.360000000e+02 infeas = 0.000000000e+00 (0)OPTIMAL SOLUTION FOUNDTime used: 0.0 secsMemory used: 0.1 Mb (130574 bytes)

Um ‘*’ indica que uma solução básica factível foi encontrada; objval indica o valor atual dafunção objetivo (que vai melhorando gradativamente); infeas indica a ‘quantidade’ deinfactibilidade (se uma solução factível é encontrada, deve ser zero ou muito pequeno)

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 18 / 36

Resolvendo pelo solver: GLPKVerificando o resultado no arquivo de saída resultado.sol$ cat resultado.solProblem: modeloRows: 10Columns: 6Non-zeros: 21Status: OPTIMALObjective: objective = -136 (MINimum)

No. Row name St Activity Lower bound Upper bound Marginal------ ------------ -- ------------- ------------- ----- -------- -------------

1 objective B -1362 constrains[1]

NS 20 20 = -3.63 constrains[2]

NS 20 20 = -1.64 constrains[3]

NS 20 20 = -1.65 domain[1] B 4 -06 domain[2] B 4 -07 domain[3] B 4 -08 domain[4] NL 0 -0 3.69 domain[5] NL 0 -0 1.6

10 domain[6] NL 0 -0 1.6No. Column name St Activity Lower bound Upper bound Marginal

------ ------------ -- ------------- ------------- ----- -------- -------------1 x[1] B 42 x[2] B 43 x[3] B 44 x[4] B 05 x[5] B 06 x[6] B 0

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 19 / 36

Interpretando o resultado: GLPK

O arquivo de saída gerado pelo glpsol fornece as seguintesinformações:

Seção 1 : O valor ótimo da função objetivo (136 )

Seção 2 : Quais restrições limitaram essa solução (i.e., aquelasmarcadas com NL ou NUcom seu respectivo custo marginal (i.e.,o que acontece no custo da função objetivo se relaxarmos arestrição por uma unidade)

Seção 3 : Os valores ótimos das variáveis de decisão(4,4,4,0,0,0 ). Para aquelas que estão no limite de seudomínio, apresenta o custo marginal associado se relaxarmos asrestrições de domínio/sinal

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 20 / 36

Resolvendo pelo solver: CPLEX/AMPLIniciando o interpretador AMPL:

$ amplILOG AMPL 10.100, licensed to "universidad-belo horizonte , braz".AMPL Version 20070505 (Linux 2.6.9-5.EL)ampl:

Define modelo, instância, solver e suas configurações, e resolve o modelo instanciado

ampl: option solve cplexamp;ampl: option cplex_options ’sensitivity’;ampl: model modelo-forma-padrao.mod;ampl: data instancia02.dat;ampl: solve;ILOG CPLEX 10.200, licensed to "universidad-belo horizont e, braz",

options: e m b use=10CPLEX 10.2.0: sensitivityCPLEX 10.2.0: optimal solution; objective -1363 dual simplex iterations (1 in phase I)suffix up OUT;suffix down OUT;suffix current OUT;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 21 / 36

Resolvendo pelo solver: CPLEX/AMPLExibindo a solução do problema e o valor da função objetivo

ampl: display objective, x;objective = -136x [ * ] :=1 42 43 44 05 06 0;

Exibe a solução e os coeficientes da função objetivo (.current ) junto com os valores limites(.down e .up ) que podemos alterar sem causar uma mudança de base

ampl: display x, x.down, x.current, x.up;: x x.down x.current x.up :=1 4 -16 -10 -62 4 -14.6667 -12 -83 4 -14.6667 -12 -84 0 -3.6 0 1e+205 0 -1.6 0 1e+206 0 -1.6 0 1e+20;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 22 / 36

Resolvendo pelo solver: CPLEX/AMPL

Exibe o valor de folga e shadow price das restrições do problema

ampl: display constrains.slack,constrains.dual;: constrains.slack constrains.dual :=1 0 -3.62 0 -1.63 0 -1.6;

Exibe os coeficientes do right-hand-side (i.e., o vetor de recursos b) junto com os valores emque ele pode ser modificado sem causar uma mudança de base

ampl: display constrains.down,constrains.current,cons trains.up;: constrains.down constrains.current constrains.up :=1 10 20 26.66672 10 20 26.66673 10 20 26.6667;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 23 / 36

Exemplo: O problema da dietaDescrição

Objetivo: comprar comida de forma a determinar uma dieta que cumpracom as necessidades nutricionais mínimas

Existem 3 opções de comida: maça, pão e doce

◮ Uma maça contém 5 unidades de vitamina A, 5 unidades devitamina B, e 10 unidades de vitamina C

◮ Um pão contém 2 unidades de vitamina A, 10 unidades de vitaminaB e 1 unidade de vitamina C

◮ Um doce contém 3 unidades de vitamina A

A quantidade mínima diária requerida de cada vitamina é de 30unidades de vitamina A, 50 unidades de vitamina B e 30 unidades devitamina C

Cada maça custa R$ 2,00, cada pão custa R$ 1,00 e cada doce custaR$ 0,20

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 24 / 36

Exemplo: O problema da dieta

Modelo# Declare setsset Foods;set Nutrients;

# Declare variablesvar quantity{Foods} >= 0;

# Declare parametersparam cost{Foods} >= 0;param amount{Nutrients, Foods} >= 0;param minimum{Nutrients} >= 0;

# Objective functionminimize obj: sum{j in Foods} cost[j] * quantity[j];

# Declare constraintss.t. minnutr{i in Nutrients}:

sum{j in Foods} amount[i,j] * quantity[j] >= minimum[i];

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 25 / 36

Exemplo: O problema da dieta

Dados da instânciaset Foods := apples, breads, candies;set Nutrients := vitamin_a, vitamin_b, vitamin_c;

param cost :=apples 2breads 1candies 0.2;

param amount: apples breads candies :=vitamin_a 5 2 3vitamin_b 5 10 0vitamin_c 10 1 0;

param minimum :=vitamin_a 30vitamin_b 50vitamin_c 30;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 26 / 36

Exemplo: O problema da dieta

Resultado Programa Linear glpsolProblem: modeloRows: 4Columns: 3Non-zeros: 10Status: OPTIMALObjective: obj = 9.578947368 (MINimum)

No. Row name St Activity Lower bound Upper bound Marginal------ ------------ -- ------------- ------------- ----- -------- -------------

1 obj B 9.578952 minnutr[vitamin_a]

NL 30 30 0.06666673 minnutr[vitamin_b]

NL 50 50 0.07368424 minnutr[vitamin_c]

NL 30 30 0.129825

No. Column name St Activity Lower bound Upper bound Marginal------ ------------ -- ------------- ------------- ----- -------- -------------

1 quantity[apples]B 2.63158 0

2 quantity[breads]B 3.68421 0

3 quantity[candies]B 3.15789 0

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 27 / 36

Exemplo: O problema da dieta

Resultado Programa Inteiro glpsolProblem: modeloRows: 4Columns: 3 (3 integer, 0 binary)Non-zeros: 10Status: INTEGER OPTIMALObjective: obj = 10.6 (MINimum)

No. Row name Activity Lower bound Upper bound------ ------------ ------------- ------------- ------- ------

1 obj 10.62 minnutr[vitamin_a]

32 303 minnutr[vitamin_b]

55 504 minnutr[vitamin_c]

34 30

No. Column name Activity Lower bound Upper bound------ ------------ ------------- ------------- ------- ------

1 quantity[apples]

* 3 02 quantity[breads]

* 4 03 quantity[candies]

* 3 0

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 28 / 36

Exemplo: O problema da dietaArquivo dieta.runreset;model dieta.mod;data dieta.dat;option solver cplexamp;solve;display quantity;

Execução no AMPL/CPLEX$ ampl < dieta.run$ cat dieta.run | ampl

Resultado no AMPL/CPLEX$ ampl < dieta.runILOG AMPL 10.100, licensed to "universidad-belo horizonte , braz".AMPL Version 20070505 (Linux 2.6.9-5.EL)ILOG CPLEX 10.200, licensed to "universidad-belo horizont e, braz",

options: e m b use=10CPLEX 10.2.0: optimal integer solution; objective 10.63 MIP simplex iterations0 branch-and-bound nodesquantity [ * ] :=

apples 3breads 4

candies 3;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 29 / 36

Exemplo: Atribuição de tarefasDescrição do problemaHavendo m tarefas e n máquinas aptas a executá-las, determine a atribuição de tarefas à cadamáquina de forma a minimizar o custo total de execução.

minX

i∈I

X

j∈J

cij xij

s.t .X

j∈J

xij = 1, i ∈ I

X

i∈I

xij = 1, j ∈ J

xij ≥ 0

Exemplot1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12

maq1 37 94 26 76 118 32 109 79 51 178 97 45maq2 67 110 44 99 133 46 106 110 80 150 140 60maq3 30 80 50 66 78 45 87 93 44 85 105 54maq4 64 34 87 89 94 54 91 80 67 129 110 80

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 30 / 36

Exemplo: Atribuição de tarefas

Modelo# Define o número de tarefas e máquinas aptas a executá-lasparam m >= 0;param n >= 0;

# Define o conjunto de tarefas e de máquinasset tasks := 1..m;set machines := 1..n;

# Tempo que cada máquina leva para executar cada tarefaparam t {machines, tasks} >= 0;

# Variável de decisãovar x {tasks, machines} binary;

# Função objetivominimize time: sum {i in tasks, j in machines} t[j,i] * x[i,j];

# Restrições do modelosubject to constr {i in tasks} : sum{j in machines} x[i,j] = 1;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 31 / 36

Exemplo: Atribuição de tarefas

Dados# Número de tarefasparam m := 12;

# Número de máquinasparam n := 4;

# Custo, em tempo de execução de cada tarefa por cada máquinaparam t : 1 2 3 4 5 6 7 8 9 10 11 12 :=

1 37 94 26 76 118 32 109 79 51 178 97 452 67 110 44 99 133 46 106 110 80 150 140 603 30 80 50 66 78 45 87 93 44 85 105 544 64 34 87 89 94 54 91 80 67 129 110 80;

Arquivo tarefa.runreset;model tarefa.mod;data tarefa.dat;option solver cplexamp;solve;display x;

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 32 / 36

Exemplo: Atribuição de tarefasResultado no AMPL/CPLEX$ ampl < tarefa.runILOG AMPL 10.100, licensed to "universidad-belo horizonte , braz".AMPL Version 20070505 (Linux 2.6.9-5.EL)ILOG CPLEX 10.200, licensed to "universidad-belo horizont e, braz", options: e m b use=10CPLEX 10.2.0: optimal integer solution; objective 7030 MIP simplex iterations0 branch-and-bound nodesx [ * , * ]: 1 2 3 4 :=1 0 0 1 02 0 0 0 13 1 0 0 04 0 0 1 05 0 0 1 06 1 0 0 07 0 0 1 08 1 0 0 09 0 0 1 010 0 0 1 011 1 0 0 012 1 0 0 0;

Solução:

maq1 = t3, t6, t8, t11 e t12

maq2 = nenhuma tarefamaq3 = t1, t4, t5, t7, t9 e t10

maq4 = t2Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 33 / 36

Exemplo: Atribuição de tarefas

Resultado no GLPKProblem: tarefaRows: 13Columns: 48 (48 integer, 48 binary)Non-zeros: 96Status: INTEGER OPTIMALObjective: time = 703 (MINimum)

No. Row name Activity Lower bound Upper bound------ ------------ ------------- ------------- ------- ------

1 time 7032 constr[1] 1 1 =3 constr[2] 1 1 =

.

.

.12 constr[11] 1 1 =13 constr[12] 1 1 =

No. Column name Activity Lower bound Upper bound------ ------------ ------------- ------------- ------- ------

1 x[1,1] * 0 0 12 x[1,2] * 0 0 13 x[1,3] * 1 0 14 x[1,4] * 0 0 1

.

.

.45 x[12,1] * 1 0 146 x[12,2] * 0 0 147 x[12,3] * 0 0 148 x[12,4] * 0 0 1

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 34 / 36

Para saber mais...

Robert Fourer, David M. Gay and Brian W. KernighanAMPL: A Mathematical Programming Language.Management Science 36 (1990) 519-554.

Andrew Makhorin.Modeling Language GNU MathProgLanguage Reference, Draft Edition, for GLPK Version 4.34

David M. GaySymbolic-Algebraic Computations in a Modeling Language for Mathematical ProgrammingSymbolic Algebraic Methods and Verification Methods (2001) 99-106.

University of TexasCplex Tutorial Handout – Acessado em Maio/2010http://www.me.utexas.edu/~bard/LP/LP%20Handouts/CPL EX%20Tutorial%20Handout.pdf

GNU Linear Programming KitGNU Linear Programming Kit - Modeling Language GNU MathProg, version 4.9.Disponível em www.gnu.org/software/glpk/glpk.html . Acessado em Maio/2010

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 35 / 36

Para saber mais...

ILOG AMPL CPLEX Systems Version 10.0 - User’s GuideDisponível em www.ampl.com/BOOKLETS/amplcplex100userguide.pdf

AMPL Student EditionDisponível em http://www.ampl.com/DOWNLOADS/index.html

AMPL Technical ReferenceDisponível em http://www.ampl.com/REFS/abstracts.html

Diego Mello da Silva (UFMG) PL Solvers 3 de maio de 2010 36 / 36