Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
1.2
Linux
CAPITULO 1. INSTALAC
AO
1.3
Windows
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
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
2.1.4
Chave
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
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:
2.3.2
2.4
Par
ametros em arquivo separado
Vari
aveis
2.4.1
Opera
c
oes
2.4.2
Fun
c
ao Objetivo
2.4. VARIAVEIS
Se o problema for de minimizacao trocamos maximize por minimize.
2.4.3
Restri
co
es
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
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