Ling Program - GMPL_e_GLPK

Click here to load reader

  • date post

    16-Feb-2016
  • Category

    Documents

  • view

    21
  • download

    0

Embed Size (px)

description

Linguagem de Programaçao para Pesuisa Operacional

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