Sei sulla pagina 1di 21

Um tutorial de GMPL e GLPK

http://code.google.com/p/ms428-unicamp/
14 de julho de 2011

Licenca
Um tutorial de GMPL e GLPK de http://code.google.com/p/ms428-unicamp/
foi licenciada com uma Licenca Creative Commons - Atribuicao - Uso Nao
Comercial 3.0 Nao Adaptada.
Com base na obra disponvel em http://code.google.com/p/ms428-unicamp/.
Podem estar disponveis 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/.

ii

Informa
co
es
Este livro foi concebido com o objetivo de ajudar os alunos do curso 28,
Matematica Aplicada e Computacional, da Universidade Estadual de Campinas, 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 sistema
de 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 do
projeto (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 pacotes ao projeto (para evitar vandalismo, a permissao para modificacoes dos
arquivos presentes no repositorio sera concedida apos a primeira correcao ou
sugestao).

iii

iv

Pref
acio
Como disse Flatberg, em [Fla09], a motivacao para utilizar uma linguagem
de modelagem, como GMPL, sao que esta:
apresenta uma sntaxe que e proxima da formulacao matematica;
permite uma separacao entre o modelo e a instancia numerica de dados.
Deste modo, nos primeiros captulos apresentamos a sntaxe do linguagem
GMPL.
Posteriormente apresentamos como utilizar o GLPK para resolver os modelos desenvolvidos na GMPL.
Na Figura 1 e apresentado uma estatstica comparativa dos principais
solvers existentes. Pode-se observar que o GLPK apresenta o pior desempenho de todos de modo que pode-se perguntar: compensa utiliza-lo? A
resposta para a pergunta depende do objetivo ao modelar e tentar resolver
determinado problema. Didaticamente e extremamente valido utiliza-lo pois
sua utilizacao e muito semelhante independente do sistema operacional utilizado, sua simplicidade forca o usuario a procurar utilizar formulacoes fortes
e por ser codigo aberto permite conhecer o funcionamento do solver e tentar
implementar melhorias.

vi

PREFACIO

Figura 1: MIP solver benchmark: Geometric mean of results taken from the
homepage 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.

Sum
ario
Informaco
es

iii

Pref
acio

1 Instalac
ao
1.1 Aquisicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1
1
1
2

2 Introduc
ao
2.1 Tipos . . . . . . . . . . . . . .
2.1.1 Numero . . . . . . . .
2.1.2 Nome . . . . . . . . . .
2.1.3 String . . . . . . . . .
2.1.4 Chave . . . . . . . . .
2.1.5 Delimitador . . . . . .
2.1.6 Comentario . . . . . . .
2.2 Expressoes . . . . . . . . . . .
2.2.1 Conjuntos . . . . . . .
2.3 Objetos . . . . . . . . . . . . .
2.3.1 Parametros . . . . . .
2.3.2 Parametros em arquivo
2.4 Variaveis . . . . . . . . . . . .
2.4.1 Operacoes . . . . . . .
2.4.2 Funcao Objetivo . . .
2.4.3 Restricoes . . . . . . .

3
4
4
4
4
4
5
5
5
5
5
5
6
6
6
6
7

A Notac
ao

. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
separado
. . . . . .
. . . . . .
. . . . . .
. . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

vii

viii

SUMARIO

Captulo 1
Instala
c
ao
Neste captulo iremos apresentar como adquirir o GLPK e proceder com a
instalacao nos sistemas operacionais Linux e Windows.

1.1

Aquisic
ao

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 com


o 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 o
comando:
$ glpsol -v
1


CAPITULO 1. INSTALAC
AO

1.3

Windows

Pode-se proceder de maneira analoga a instalacao para Linux ou baixar o


executavel disponvel em http://gnuwin32.sourceforge.net/packages/
glpk.htm (atualmente o executavel disponibilizado correspondende a versao
4.34).

Captulo 2
Introdu
c
ao
Neste captulo apresentamos a sintaxe basica do GMPL que baseia-se nos
tipos
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


CAPITULO 2. INTRODUC
AO

2.1
2.1.1

Tipos
N
umero

Um numero e uma expressao que reprenta os n


umeros reais na base 10 do
tipo xxEsyy, onde xx e um n
umero decimal, s e um dos smbolos + ou -,
e yy e outro n
umero decimal correspondendo a potencia. A seguir alguns
exemplos:
123
3.14159
56.E+5

2.1.2

Nome

Um nome e uma sequencia de caracteres alfanumericos onde o primeiro caracter 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 ou


duplas. Caso na sequencia de caracteres apresente aspas simples ou duplas
estas devem ser digitadas duas vezes. A seguir alguns exemplos:
This is a string
"This is another string"
1 + 2 = 3
Thats all
"She said: ""No"""

2.1.4

Chave

Uma chave e uma sequencia de caracteres que aciona alguma funcionalidade.


Iremos descreve-las quando necessario.


2.2. EXPRESSOES

2.1.5

Delimitador

Um delimitador e um ou dois caracteres especiais que aciona alguma funcionalidade. Todos os delimitadores sao apresentados a seguir:
+
^
==
!
: )
&
>= && ; ]

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

2.1.6

Coment
ario

Um comentario e qualquer sequencia de caracteres, iniciada com #, utilizadas


para documentacao. Um comentario tambem pode ser iniciado por / e
terminado por /.

2.2

Express
oes

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

2.2.1

2.3
2.3.1

Conjuntos

Objetos
Par
ametros

Um parametro e qualquer valor numerico que para uma instancia de determinado problema comporta-se como uma constante. A sintaxe a ser utilizada
e:
param <nome> <pseud^
onimo> <dominio> , <atributos> ;
onde nome < e uma o nome do parametro, pseud^
onimo < e o nome do
parametro, Qualquer outra constante pode ser declarada de maneira similar
seguinto 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 elementos
do conjunto. A seguir apresentamos alguns exemplos de conjuntos:
1. conjunto de n
umeros:


CAPITULO 2. INTRODUC
AO

6
{int} I = {1, 2, 3};
2. conjunto de n
umeros em sequencia:
{int} I = {1:3};
3. conjunto de strings:

{string} I = {um, dois, tr^


es};
Uma vez definido um conjunto podemos utiliza-lo para definir um vetor
utilizando a seguinte sintaxe:
int A[I] = [5, 10, 15];

2.3.2

2.4

Par
ametros em arquivo separado

Vari
aveis

Uma parte muito importante de qualquer modelo sao as variavies utilizadas.


A declaracao de uma variavel utiliza a seguinte sintaxe:
dvar <tipo> <nome da vari
avel>;
Tambem e possvel declarar um vetor de variaveis utilizando a seguinte sintaxe:
dvar <tipo> <nome da vari
avel>[<conjunto>];

2.4.1

Opera
c
oes

As operacoes aritmeticas permitidas sao:

2.4.2

Fun
c
ao Objetivo

Caso o problema seja de maximizacao declaramos a funcao objetivo seguindo


a sintaxe:
maximize <opera
co
~es aritm
eticas>;


2.4. VARIAVEIS
Se o problema for de minimizacao trocamos maximize por minimize.

2.4.3

Restri
co
es

Para as restricoes utilizamos a seguinte sintaxe:


subsect to {
<desigualdade 1>;
<desigualdade 2>;
<...>;
}

CAPITULO 2. INTRODUC
AO

Ap
endice A
Nota
c
ao
N
Z
Z
Z>
Z
Z<
R
R
R>
R
R<
Amn
A
aij
bm
b
bi
italico
fonte sans serif
fonte teletype

Conjunto dos naturais, isso e, {1, 2, . . .}


Conjunto dos inteiros
Conjunto dos inteiros maiores ou igual a zero
Conjunto dos inteiros estritamente maiores que zero
Conjunto dos inteiros menores ou igual a zero
Conjunto dos inteiros estritamente menores que zero
Conjunto dos reais
Conjunto dos reais maiores ou igual a zero
Conjunto dos reais estritamente maiores que zero
Conjunto dos reais menores ou igual a zero
Conjunto dos reais estritamente menores que zero
Matriz A com m linhas e n colunas
Matriz A
Entrada ij da matriz A
Vetor b com m posicoes
Vetor b
Entrada i do vetor b
expressao extrangeira
nome de alguma empresa ou software
codigo ou comando de computador

10

APENDICE
A. NOTAC
AO

Refer
encias Bibliogr
aficas
[Fla09] Truls Flatberg. A short OPL tutorial, 2009. http://folk.uio.no/
trulsf/opl/opl_tutorial.pdf.
[Mak08] Andrew Makhorin. Modeling Language GNU MathProg, December
2008.

11

Potrebbero piacerti anche