Ling Program - GMPL_e_GLPK
date post
16-Feb-2016Category
Documents
view
21download
0
Embed Size (px)
description
Transcript of Ling Program - GMPL_e_GLPK
Um tutorial de GMPL e GLPK
http://code.google.com/p/ms428-unicamp/
14 de julho de 2011
2
iLicenca
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 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
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
iv
Prefacio
Como disse Flatberg, em [Fla09], a motivacao para utilizar uma linguagemde 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 linguagemGMPL.
Posteriormente apresentamos como utilizar o GLPK para resolver os mod-elos desenvolvidos na GMPL.
Na Figura 1 e apresentado uma estatstica 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
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.
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
viii SUMARIO
Captulo 1
Instalacao
Neste captulo 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
2 CAPITULO 1. INSTALACAO
1.3 Windows
Pode-se proceder de maneira analoga a instalacao para Linux ou baixar oexecutavel disponvel em http://gnuwin32.sourceforge.net/packages/glpk.htm (atualmente o executavel disponibilizado correspondende a versao4.34).
Captulo 2
Introducao
Neste captulo 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
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 smbolos + 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
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 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:
+ ^ == ! : )
- & >= && ; ] < > || := |/
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, tre^s};
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 ;
Tambem e possvel declarar um vetor de variaveis utilizando a seguinte sin-taxe:
dvar [];
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 ;
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 {
;
;
;
}
8 CAPITULO 2. INTRODUCAO
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 zeroAmn 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
10 APENDICE A. NOTACAO
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
InformaesPrefcioInstalaoAquisioLinuxWindows
IntroduoTiposNmeroNomeStringChaveDelimitadorComentrio
ExpressesConjuntos
ObjetosParmetrosParmetros em arquivo separado
VariveisOperaesFuno ObjetivoRestries
Notao