Optimização Combinatória
Guia de Utilização do Software
José Manuel Vasconcelos Valério de Carvalho
Universidade do Minho 2005
Introdução
Este documento apresenta diversas informações sobre a utilização dos seguintes packages de programação matemática:
· Problemas de maximização de fluxo: MAXFLOW
· Problema do caminho mais curto: LTHRS
· Problemas de afectação: APC
· Problema do caixeiro viajante: TSP2
· Problema de emparelhamento de custo mínimo em grafos não bipartidos: SAP Todos estes packages se encontram disponíveis:
- na Internet: no endereço http://OpsResearch.com/, local que fornece inúmeras informações de interesse sobre o domínio da Investigação Operacional, ou
- na ORSEP (Operations Research Software Exchange Program), por ftp (usando como login ftp e password um endereço de e-mail válido), no sistema HELIOS.MATHEMATIK.UNI-KL.DE, na directoria pub/Math/ORSEP. Para mais detalhes, ver EJOR 38/1 (1989) e EJOR 48 (1990).
Os programas foram desenvolvidos em Fortran (LTHRS, MAXFLOW e APC) e em Pascal (TSP).
Utilizadores interessados em converter os programas de Fortran para C poderão fazê-lo com software disponível na Internet no seguinte endereço:
- http://www.fortran.com/fortran/free.html
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.
Os ficheiros relativos a cada programa encontram-se na diskette, respectivamente, nas directorias fluxo, caminho, afecta e caixeiro.
Problemas de Maximização de Fluxo: MAXFLOW
Autoria
O package é baseado num artigo de D. Goldfarb, M.D. Grigoriadis, "A computational comparison of the Dinic and network simplex methods for maximum flow”, Annals of Operations Research 7, 1988.
Objectivo
Este programa determina o fluxo máximo entre um vértice fonte, abaixo designado por isou, e um terminal designado por isnk. 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:
Na primeira linha:
nodes narcs isou isnk
sendo nodes o número de vértices do grafo e narcs o número de arcos, isou a fonte de fluxo (vértice s) e isnk o terminal (vértice t).
Nas restantes narcs linhas, é feita uma listagem dos narcs arcos, no seguinte formato:
fromnode tonode arccapacity
sendo fromnode o vértice de origem do arco, tonode o vértice de destino, e arccapacity a respectiva capacidade. Se for declarado um valor de capacidade nulo, o programa assume uma capacidade infinita para o arco.
O formato de input é 4I10, pelo que devem ser reservadas 10 posições para cada dado, ou então, os dados devem ser separados por vírgulas.
Exemplo
O input da rede apresentada na Pág. 66 dos Apontamentos (atribuindo aos vértices v1,v2,v3 e v4, os números 1,2,3 e 4, respectivamente, ao vértice s, o número 5, e ao vértice t, o número 6) é o seguinte:
6,9,5,6 5,1,2 5,2,3 1,3,3 1,4,1 1,2,2 2,4,2 3,6,1 3,4,4 4,6,3
Execução do Programa Para executar o programa, fazer - MAXFLOW
sendo pedido o nome do ficheiro de input e do ficheiro de output.
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 acima referido.
Problema do Caminho mais curto: LTHRS
Autoria
O package foi desenvolvido por Gallo e Pallotino, sendo o algoritmo baseado em ideias de Glover, Klingman and Philips.
Objectivo
Este programa determina o caminho mais curto entre um vértice de raíz (origem), abaixo designado por nr, e todos os restantes vértices do grafo. São admitidos custos negativos para os arcos, mas o grafo não deve ter nenhum circuito de comprimento negativo. Os valores dos custos devem ser inteiros.
Definição do Input
O programa LTHRS lê o input numa representação designada por uma estrela de sucessores. O programa usa esta estrutura de dados por ser a mais eficiente para a implementação do algoritmo. No entanto, a introdução de dados neste formato pressupõe o trabalho prévio de organização de dados, e está sujeita a erros. Para ultrapassar este problema, foi desenvolvido o programa LA2ES que converte um ficheiro com uma lista de arcos num ficheiro com o grafo representado como uma estrela de
sucessores. Para correr este programa, fazer LA2ES, e fornecer o nome dos ficheiros de input e output.
O ficheiro com a lista de arcos deve ter o seguinte formato:
Nas três primeiras linhas:
n m nr
sendo n o número de vértices do grafo e m o número de arcos, e nr o vértice de raíz (origem). Nas restantes m linhas, é feita uma listagem dos m arcos, no seguinte formato:
org dst custo
sendo org o vértice de origem do arco, dst o vértice de destino, e custo o respectivo custo.
Exemplo
No ficheiro PAG36 está definido um problema com 7 vértices e 12 arcos, sendo o vértice de origem o vértice 7. Este Exemplo corresponde ao grafo apresentado nos Apontamentos na Página 36, e o vértice 7 corresponde ao vértice s, enquanto os restantes vértices têm a numeração apresentada na Figura. O ficheiro PAG44 apresenta outro Exemplo dos Apontamentos.
Execução do Programa Para executar o programa, fazer
- LTHRS <EXEMPLO.INP >EXEMPLO.OUT
em que EXEMPLO.INP deve ser um ficheiro com o formato de lista de adjacências.
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:
Giorgio Gallo e Stefano Pallotino, “Shortest paths algorithms”, Annals of Operations Research 13, 3-79, 1988.
A estratégia do algoritmo foi concebida por
F.Glover, D. Klingman e N.Phillips, “A new polynomially bounded shortest path algorithm”, Operations Research, 65-74, 1985.
Problema de Afectação: APC
Autoria
O algoritmo de afectação foi desenvolvido por Carpaneto, Martello e Toth e é designado por APC.
Baseia-se em ideias apresentadas no artigo Carpaneto, Martello e Toth, “Algorithms and codes dor the assignment problem”, Annals of Operations Research 13, 193-224, 1988.
O módulo A.FOR destina-se a fazer a interface com o utilizador.
Objectivo
Este programa determina a afectação de custo mínimo, dada uma matriz de custos de dimensão n x n.
Definição do Input
O ficheiro com a matriz de custos deve ter o seguinte formato:
Na primeira linha:
n
sendo n a dimensão da matriz quadrada. Em cada uma das restantes n linhas, é feita uma listagem dos n coeficientes de custo relativos a essa linha.
O formato de input é 10I8, pelo que devem ser reservadas 8 posições para cada dado, ou então, os dados devem ser separados por vírgulas.
Exemplo
Nos ficheiros LOG158.DAT e LOG159.DAT estão definidos os inputs dos problemas apresentados nas páginas 158 e 159 dos Apontamentos, respectivamente.
Execução do Programa Para executar o programa, fazer
- A
sendo pedido o nome do ficheiro de input e do ficheiro de output.
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 acima referido.
Problema do caixeiro viajante: TSP
Autoria
O algoritmo o problema do caixeiro viajante foi desenvolvido por T. Volgenant and W.B. van den Hout do Institute da Universidade de Amsterdão, e está disponível através da ORSEP.
Objectivo
Este programa determina a solução óptima do problema de caixeiro viajante simétrico, ou seja, com custos associados aos arcos cij=cji.
Informações Adicionais Ver ficheiro READ.ME
Problema de emparelhamento de custo mínimo em grafos não bipartidos: SAP
Autoria
O algoritmo é baseado em ideias de U. Derigs.
Objectivo
Este programa determina o emparelhamento perfeito de custo mínimo em grafos não bipartidos com um número par de vértices, significando emparelhamento perfeito que todos os vértices do grafo estão emparelhados. Os valores dos custos associados aos arcos do grafo devem ser inteiros.
Este algoritmo pode também ser usado para resolver o problema de emparelhamento apresentado nos Apontamentos da disciplina, em que se pretende determinar o emparelhamento de maior cardinal num grafo não-bipartido. Para o efeito, todos os custos associados aos arcos devem ser iguais a –1. A solução de menor custo é aquela em que todos os vértices (em número que deve ser sempre par) estão emparelhados.
Definição do Input
O programa SAP lê o input numa representação própria. O programa usa esta estrutura de dados por ser a mais eficiente para a implementação do algoritmo. No entanto, a introdução de dados neste formato pressupõe o trabalho prévio de organização de dados, e está sujeita a erros.
Para ultrapassar este problema, foi desenvolvido o programa LA2NBM que converte um ficheiro com uma lista de arcos num ficheiro com o grafo representado de uma forma adequada. Para correr este programa, fazer LA2NBM, e fornecer o nome dos ficheiros de input e output. Ver exemplo de aplicação em baixo.
O ficheiro com a lista de arcos deve ter 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
sendo org o vértice de origem do arco, dst o vértice de destino, e custo o respectivo custo.
Exemplo
No ficheiro APONT65 está definido um problema com 12 vértices e 16 arcos. Este Exemplo corresponde ao grafo apresentado no Exemplo dos Apontamentos relativo à solução do problema de emparelhamento em grafos não-bipartidos. Os vértices têm a numeração apresentada na Figura e os custos associados aos arcos são iguais a -1.
A aplicação do programa LA2NBM ao ficheiro APONT65 (que tem uma lista de arcos) produz o ficheiro NBM65 (que tem uma representação própria que serve de input ao programa SAP).
Execução do Programa
Para executar o programa, fazer a nível do MS-DOS - SAP <EXEMPLO.INP >EXEMPLO.OUT
em que EXEMPLO.INP deve ser um ficheiro com o formato próprio.
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:
U. Derigs, “Solving non-bipartite matching problems via shortest path techniques”, Annals of Operations Research 13, 225--261, 1988.