Download - Ling Program - GMPL_e_GLPK

Transcript
Page 1: Ling Program - GMPL_e_GLPK

Um tutorial de GMPL e GLPK

http://code.google.com/p/ms428-unicamp/

14 de julho de 2011

Page 2: Ling Program - GMPL_e_GLPK

2

Page 3: Ling Program - GMPL_e_GLPK

i

Licenca

“Um tutorial de GMPL e GLPK” de http://code.google.com/p/ms428-unicamp/foi licenciada com uma Licenca Creative Commons - Atribuicao - Uso NaoComercial 3.0 Nao Adaptada.

Com base na obra disponıvel em http://code.google.com/p/ms428-unicamp/.Podem estar disponıveis permissoes adicionais ao ambito desta licenca em

http://code.google.com/p/ms428-unicamp/.

Licence

“Um tutorial de GMPL e GLPK” by http://code.google.com/p/ms428-unicamp/

is licensed under a Creative Commons Attribution 3.0 Unported License(http://creativecommons.org/licenses/by-nc/3.0/).

Based on a work at http://code.google.com/p/ms428-unicamp/.Permissions beyond the scope of this license may be available at http:

//code.google.com/p/ms428-unicamp/.

Page 4: Ling Program - GMPL_e_GLPK

ii

Page 5: Ling Program - GMPL_e_GLPK

Informacoes

Este livro foi concebido com o objetivo de ajudar os alunos do curso 28,Matematica Aplicada e Computacional, da Universidade Estadual de Camp-inas, UNICAMP, no aprendizado da GNU MathProg modeling language (GMPL)e no uso GNU Linear Programming Kit (GLPK).

Optou-se por utilizar o LATEX para a producao deste livro, o sistemade versionamento Mercurial e hospedar os arquivos no Google Code (http://code.google.com/p/ms428-unicamp/).

Para obter a versao mais atual deste livro deve-se adquirir os arquivos doprojeto (maiores informacoes em http://code.google.com/p/ms428-unicamp/

source/checkout e gerar a versao visual.Correcoes e sugestoes podem ser feitas via e-mail ou pelo envio de pa-

cotes ao projeto (para evitar vandalismo, a permissao para modificacoes dosarquivos presentes no repositorio sera concedida apos a primeira correcao ousugestao).

iii

Page 6: Ling Program - GMPL_e_GLPK

iv

Page 7: Ling Program - GMPL_e_GLPK

Prefacio

Como disse Flatberg, em [Fla09], a motivacao para utilizar uma linguagemde modelagem, como GMPL, sao que esta:

• apresenta uma sıntaxe que e proxima da formulacao matematica;

• permite uma separacao entre o modelo e a instancia numerica de dados.

Deste modo, nos primeiros capıtulos apresentamos a sıntaxe do linguagemGMPL.

Posteriormente apresentamos como utilizar o GLPK para resolver os mod-elos desenvolvidos na GMPL.

Na Figura 1 e apresentado uma estatıstica comparativa dos principaissolvers existentes. Pode-se observar que o GLPK apresenta o “pior” desem-penho de todos de modo que pode-se perguntar: compensa utiliza-lo? Aresposta para a pergunta depende do objetivo ao modelar e tentar resolverdeterminado problema. Didaticamente e extremamente valido utiliza-lo poissua utilizacao e muito semelhante independente do sistema operacional uti-lizado, sua simplicidade forca o usuario a procurar utilizar formulacoes fortese por ser codigo aberto permite conhecer o funcionamento do solver e tentarimplementar melhorias.

v

Page 8: Ling Program - GMPL_e_GLPK

vi PREFACIO

Figura 1: MIP solver benchmark: Geometric mean of results taken from thehomepage of Hans Mittelmann, http://plato.asu.edu/ftp/milpf.html

(16/Jan/2011).Unsolved or failed instances are accounted for with the time limit of 2 hours.

Page 9: Ling Program - GMPL_e_GLPK

Sumario

Informacoes iii

Prefacio v

1 Instalacao 11.1 Aquisicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Introducao 32.1 Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1.1 Numero . . . . . . . . . . . . . . . . . . . . . . . . . . 42.1.2 Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.1.3 String . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.1.4 Chave . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.1.5 Delimitador . . . . . . . . . . . . . . . . . . . . . . . . 52.1.6 Comentario . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Expressoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2.1 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3.1 Parametros . . . . . . . . . . . . . . . . . . . . . . . . 52.3.2 Parametros em arquivo separado . . . . . . . . . . . . 6

2.4 Variaveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.4.1 Operacoes . . . . . . . . . . . . . . . . . . . . . . . . . 62.4.2 Funcao Objetivo . . . . . . . . . . . . . . . . . . . . . 62.4.3 Restricoes . . . . . . . . . . . . . . . . . . . . . . . . . 7

A Notacao 9

vii

Page 10: Ling Program - GMPL_e_GLPK

viii SUMARIO

Page 11: Ling Program - GMPL_e_GLPK

Capıtulo 1

Instalacao

Neste capıtulo iremos apresentar como adquirir o GLPK e proceder com ainstalacao nos sistemas operacionais Linux e Windows.

1.1 Aquisicao

Para adquirir o GLPK voce deve ir ao site do projeto, http://www.gnu.org/software/glpk/, e procurar pela secao Downloading.

Atualmente a versao 4.45 e a versao mais atual e iremos utiliza-la.

1.2 Linux

Uma vez baixado o arquivo glpk-4.45.tar.gz vamos descompacta-lo como comando:

$ tar zxf glpk-4.45.tar.gz

Sera criado um novo diretorio e vamos acessa-lo pelo comando:

$ cd glpk-4.45

A instalacao se resume aos seguintes comandos:

# ./configure --disable-shared

# make

# make install

Para verificar se a instalacao foi realizada com sucesso pode-se utilizar ocomando:

$ glpsol -v

1

Page 12: Ling Program - GMPL_e_GLPK

2 CAPITULO 1. INSTALACAO

1.3 Windows

Pode-se proceder de maneira analoga a instalacao para Linux ou baixar oexecutavel disponıvel em http://gnuwin32.sourceforge.net/packages/

glpk.htm (atualmente o executavel disponibilizado correspondende a versao4.34).

Page 13: Ling Program - GMPL_e_GLPK

Capıtulo 2

Introducao

Neste capıtulo apresentamos a sintaxe basica do GMPL que baseia-se nostipos

1. numero,

2. nome,

3. string,

4. chave,

5. delimitador,

6. comentario,

expressoes e nos objetos

1. parametro,

2. conjunto,

3. variavel,

4. restricao,

5. funcao objetivo.

3

Page 14: Ling Program - GMPL_e_GLPK

4 CAPITULO 2. INTRODUCAO

2.1 Tipos

2.1.1 Numero

Um numero e uma expressao que reprenta os numeros reais na base 10 dotipo xxEsyy, onde xx e um numero decimal, s e um dos sımbolos + ou -,e yy e outro numero decimal correspondendo a potencia. A seguir algunsexemplos:

123

3.14159

56.E+5

2.1.2 Nome

Um nome e uma sequencia de caracteres alfanumericos onde o primeiro car-acter sempre e alfabetico. A seguir alguns exemplos:

alpha123

This_is_a_name

_P123_abc_321

2.1.3 String

Uma string e uma sequencia de caracteres delimitada por aspas simples ouduplas. Caso na sequencia de caracteres apresente aspas simples ou duplasestas devem ser digitadas duas vezes. A seguir alguns exemplos:

’This is a string’

"This is another string"

’1 + 2 = 3’

’That’’s all’

"She said: ""No"""

2.1.4 Chave

Uma chave e uma sequencia de caracteres que aciona alguma funcionalidade.Iremos descreve-las quando necessario.

Page 15: Ling Program - GMPL_e_GLPK

2.2. EXPRESSOES 5

2.1.5 Delimitador

Um delimitador e um ou dois caracteres especiais que aciona alguma fun-cionalidade. Todos os delimitadores sao apresentados a seguir:

+ ^ == ! : )

- & >= && ; ]

∗ < > || := |/ <= <> . .. {∗∗ = != , ( }

2.1.6 Comentario

Um comentario e qualquer sequencia de caracteres, iniciada com #, utilizadaspara documentacao. Um comentario tambem pode ser iniciado por /∗ eterminado por ∗/.

2.2 Expressoes

Expressoes sao regras para o calculo de algum valor que e representado comoalgum tipo.

2.2.1 Conjuntos

2.3 Objetos

2.3.1 Parametros

Um parametro e qualquer valor numerico que para uma instancia de determi-nado problema comporta-se como uma constante. A sintaxe a ser utilizadae:

param <nome> <pseudonimo> <dominio> , <atributos> ;

onde nome < e uma o nome do parametro, pseudonimo < e o nome doparametro, Qualquer outra constante pode ser declarada de maneira similarseguinto a sintaxe:

onde <tipo> e um dos seguintes tipos primitivos: int, double.Em muitos problemas e comum existir um ou mais conjuntos. A declaracao

de um conjunto pode ser feita de varias maneiras dependendo dos elementosdo conjunto. A seguir apresentamos alguns exemplos de conjuntos:

1. conjunto de numeros:

Page 16: Ling Program - GMPL_e_GLPK

6 CAPITULO 2. INTRODUCAO

{int} I = {1, 2, 3};

2. conjunto de numeros em sequencia:

{int} I = {1:3};

3. conjunto de strings:

{string} I = {’um’, ’dois’, ’tres’};

Uma vez definido um conjunto podemos utiliza-lo para definir um vetorutilizando a seguinte sintaxe:

int A[I] = [5, 10, 15];

2.3.2 Parametros em arquivo separado

2.4 Variaveis

Uma parte muito importante de qualquer modelo sao as variavies utilizadas.A declaracao de uma variavel utiliza a seguinte sintaxe:

dvar <tipo> <nome da variavel>;

Tambem e possıvel declarar um vetor de variaveis utilizando a seguinte sin-taxe:

dvar <tipo> <nome da variavel>[<conjunto>];

2.4.1 Operacoes

As operacoes aritmeticas permitidas sao:

2.4.2 Funcao Objetivo

Caso o problema seja de maximizacao declaramos a funcao objetivo seguindoa sintaxe:

maximize <operac~oes aritmeticas>;

Page 17: Ling Program - GMPL_e_GLPK

2.4. VARIAVEIS 7

Se o problema for de minimizacao trocamos maximize por minimize.

2.4.3 Restricoes

Para as restricoes utilizamos a seguinte sintaxe:

subsect to {

<desigualdade 1>;

<desigualdade 2>;

<...>;

}

Page 18: Ling Program - GMPL_e_GLPK

8 CAPITULO 2. INTRODUCAO

Page 19: Ling Program - GMPL_e_GLPK

Apendice A

Notacao

N Conjunto dos naturais, isso e, {1, 2, . . .}Z Conjunto dos inteirosZ≥ Conjunto dos inteiros maiores ou igual a zeroZ> Conjunto dos inteiros estritamente maiores que zeroZ≤ Conjunto dos inteiros menores ou igual a zeroZ< Conjunto dos inteiros estritamente menores que zeroR Conjunto dos reaisR≥ Conjunto dos reais maiores ou igual a zeroR> Conjunto dos reais estritamente maiores que zeroR≤ Conjunto dos reais menores ou igual a zeroR< Conjunto dos reais estritamente menores que zeroAm×n Matriz A com m linhas e n colunasA Matriz Aaij Entrada ij da matriz Abm Vetor b com m posicoesb Vetor bbi Entrada i do vetor bitalico expressao extrangeirafonte sans serif nome de alguma empresa ou softwarefonte teletype codigo ou comando de computador

9

Page 20: Ling Program - GMPL_e_GLPK

10 APENDICE A. NOTACAO

Page 21: Ling Program - GMPL_e_GLPK

Referencias Bibliograficas

[Fla09] Truls Flatberg. A short OPL tutorial, 2009. http://folk.uio.no/trulsf/opl/opl_tutorial.pdf.

[Mak08] Andrew Makhorin. Modeling Language GNU MathProg, December2008.

11