Investigação Operacional I Guia de Utilização do Software José Manuel Vasconcelos Valério de Carvalho Universidade do Minho 2003 Guia de Utilização do Software Este documento apresenta diversas informações sobre a utilização dos seguintes packages de programação matemática: - Problemas de Programação Linear: LP_SOLVE - Problemas de Optimização em Rede: RELAX Estes packages usam ficheiros de dados como input. Para construir o ficheiro de dados pode ser usado qualquer processor de texto, desde que o ficheiro seja guardado como um ficheiro de texto, apenas com caracteres ASCII. No caso do WORD, deve ser usada a opção GUARDAR COMO ficheiro do tipo TEXT ONLY (*.TXT), podendo o utilizador escolher o nome que pretende dar ao ficheiro. Ficheiros do tipo *.DOC não podem ser utilizados, porque contêm um cabeçalho com caracteres invisíveis para o utilizador que os programas interpretam como dados do problema. Os resultados dos programas são, por defeito, apresentados no écran, podendo, no entanto, ser redireccionados para um ficheiro, através da opção >ficheiro. Em alternativa ao programa LP_SOLVE, existem também disponíveis na rede algumas versões educacionais de packages de resolução de problemas de programação linear. Cita-se, a título ilustrativo, o LINDO, que pode ser obtido em www.lindo.com. A dimensão das instâncias que podem ser resolvidas com estes packages é limitada, mas suficiente para resolver os problemas propostos. No Laboratório do DPS, existem 10 licenças do package de programação linear, CPLEX (versão 6.5), que permitem resolver instâncias de muito maior dimensão. Todos estes packages aceitam ficheiros de dados no formato MPS.
Existe também material disponível no endereço http://opsresearch.com/, local que fornece inúmeras informações de interesse sobre o domínio da Investigação Operacional. Problemas de Programação Linear: LP_SOLVE Autoria O package foi desenvolvido por Michel Berkelaar, michel@es.ele.tue.nl. Encontra-se acessível em http://www.cs.sunysb.edu/~algorith/implement/lpsolve/implement.shtml Objectivo Este programa determina a solução óptima de um problema de programação linear. Os dados de entrada podem ser números reais ou inteiros. Descompactação dos ficheiros Ficheiros do sistema: LPDOS20.ZIP, LP20W95.ZIP, PKUNZIP.EXE O primeiro ficheiro contém uma versão para DOS e o segundo para Windows 95. As instruções que se seguem são relativas à versão DOS. Para recuperar os ficheiros compactados, fazer - PKUNZIP LPDOS20.ZIP O ficheiro LP_EXAMP.ZIP deve, por sua vez, ser descompactado para obter um conjunto de 6 exemplos de teste. Definição do Input O package aceita dados de input, a partir de ficheiros de texto, em dois formatos diferentes: - o formato MPS (Mathematical Programming System), um standard aceite pela maioria dos packages de programação linear, cuja definição é apresentada num documento anexo; - o formato LP, em que o problema a resolver é escrito na forma de texto. 2
Conversão de formato É possível converter um ficheiro dum dado formato no outro, e vice-versa, através dos programas MPS2LP.EXE e LP2MPS.EXE, como, por exemplo, nos seguintes casos: - LP2MPS <EXEMPLO.LP >EXEMPLO.MPS, e - MPS2LP <NOME.MPS >NOME.LP. Execução do Programa Para executar o programa, com input no formato LP, fazer - LP_SOLVE -p <EXEMPLO.LP >EXEMPLO.OUT A opção -p destina-se a imprimir as variáveis duais da solução óptima. No caso de o output do programa não ser redireccionado para nenhum ficheiro de output, os resultados são mostrados no écran. Para executar o programa, com input no formato MPS, fazer - LP_SOLVE -p -mps <EXEMPLO.MPS >EXEMPLO.OUT Informações Adicionais Para obter instruções adicionais sobre o funcionamento do programa LP_SOLVE, fazer - LP_SOLVE -h Este programa pode ser também executado em modo interactivo, o que permite várias operações, como a adição ou remoção de restrições ou colunas, a modificação de coeficientes, etc. Instruções sobre este modo de operação podem ser obtidas através do programa DEMO.EXE. Instruções adicionais de funcionamento nos ficheiros DOSPORT.TXT, README. Problemas de Optimização em Rede: RELAX Autoria O programa RELAX foi desenvolvido por Dimitri Bertsekas e Paul Tseng do Laboratory for Information and Decision Systems and the Operations Research Center, MIT, e encontra-se acessível em 3
http://elib.zib.de/pub/packages/mathprog/mincost/relax-4/ Objectivo Este programa determina a solução óptima de um problema de optimização em rede. Os dados de entrada devem ser números inteiros. Definição do Input O package aceita dados de input, a partir de um ficheiro de texto, com o seguinte formato: Nas duas primeiras linhas: n m sendo n o número de vértices do grafo e m o número de arcos. Nas restantes m linhas, é feita uma listagem dos m arcos, no seguinte formato: org dst custo cap sendo org o vértice de origem do arco, dst o vértice de destino, e custo o respectivo custo unitário de transporte. A capacidade do arco (limite superior para o fluxo que nele pode ser transportado), cap, também deve ser indicada. Notar bem que não podem aparecer na lista dois arcos com a mesma origem e o mesmo destino. A definição das ofertas e das procuras em cada vértice do grafo é feita usando arcos fictícios unindo os vértices do grafo e dois vértices suplementares: o vértice n+1, que serve como um supernodo que concentra as ofertas, e o vértice n+2, um supernodo que concentra as procuras. Para estabelecer o valor da oferta no vértice i, deve ser criado um arco fictício entre o vértice n+1 e o vértice i, com uma capacidade igual à oferta real no vértice i e um custo unitário de transporte nulo. Do mesmo modo, para definir o valor da procura no vértice j, deve ser criado um arco fictício entre o vértice j e o vértice n+2, com uma capacidade igual à procura real no vértice j e um custo unitário de transporte igualmente nulo. Exemplo: Ao problema com duas origens e dois destinos da Figura, em que a capacidade de todos os arcos é igual a 1000, corresponde o ficheiro de input abaixo apresentado: 4
15 25 1 3 11 12 13 14 2 4 20 20 4 8 1 3 11 1000 1 4 12 1000 2 3 13 1000 2 4 14 1000 5 1 0 15 5 2 0 25 3 6 0 20 4 6 0 20 Exemplo: No ficheiro RELAX.INP, está definido um problema com 7 vértices e 14 arcos. Existe uma oferta de 20 unidades no vértice 1 e uma procura de 20 unidades no vértice 7. Nos restantes vértices, há conservação de fluxo. Execução do Programa Para executar o programa, fazer - RELAX <RELAX.INP >RELAX.OUT Informações Adicionais Informações adicionais sobre este programa, nomeadamente sobre a estratégia do algoritmo, as estruturas de dados utilizadas e o desempenho computacional, podem ser obtidas no artigo: Dimitri Bertsekas e Paul Tseng, The relax codes for linear minimum cost network flow problems, Annals of Operations Research 13, 125-188, 1988. 5