Este repositório contém uma implementação do algoritmo Simplex baseado na técnica de programação linear apresentada no livro Algorithms, de Christos Papadimitriou, Sanvoy Dasgupta e Umesh Vazirani.
Esta implementação foi desenvolvida por Anna Carolina, Fernando Menucci e Sérgio Rodrigues, como trabalho da disciplina [Estrutura de Dados e Algoritmos] (https://github.com/arademaker/ED-2013-1), do curso de Mestrado em Modelagem Matemática da Informação da Fundação Getúlio Vargas, Rio de Janeiro, 2013.
O algoritmo está preparado para maximização, portanto para usá-lo em minimização é necessário converter a função objetivo pelo simétrico.
- SimplexAFS.py: Classe SimplexAFS que implementa o algoritmo tomando como entrada o sistema a ser maximizado como uma matriz descrita em um arquivo texto a ser passado como parâmetro.
- simplex.py: Módulo para execução em linha de comando, caso queira utilizar o algoritmo diretamente no comando do sistema operacional.
Para utilizar o algorimto é necessário os seguintes softwares:
- [Interpretador Python versão 2.7;] (http://www.python.org)
- [Biblioteca Numpy;] (http://www.numpy.org)
- Editor de texto de sua preferência.
Para executar o algoritmo Simplex, abra o prompt de comando de seu sistema operacional, navegue até a pasta onde estão os arquivos *.py e digite o seguinte comando:
python simplex.py arquivo_de_entrada
O algoritmo será executado e se houver uma solução uma saída como a abaixo será exibida:
===============================================================
SIMPLEX - Arquivo: exemplo.txt
---------------------------------------------------------------
SISTEMA ORIGINAL
Funcao Objetivo:
+2.0*x_0+5.0*x_1
Restricoes
[0]: +2.0*x_0-1.0*x_1 <= 4.0
[1]: +1.0*x_0+2.0*x_1 <= 9.0
[2]: -1.0*x_0+1.0*x_1 <= 3.0
SOLUCAO:
Funcao Objetivo:
+1.0*x_0+4.0*x_1
Valor: 22.0
================================================================
Caso o arquivo esteja mal formatado ou o sistema não tenha solução possível, será exibida a saída:
================================================================ SIMPLEX - Arquivo: pag_204.txt ---------------------------------------------------------------- ERRO: Nao foi possivel encontrar uma solucao. Verifique conteudo do arquivo. ================================================================
- O conteúdo do aqruivo é uma matriz onde os elementos são separados por um ou mais espaços;
- O sistema no arquivo deve representar um sistema para maximização;
- É aceito qualquer ou nenhuma extensão, desde que o arquivo seja do tipo texto puro.
- Os elementos na matriz são os coeficientes da função objetivo, coeficientes das restrições, e valores das restrições.
- 1.a linha: Coeficientes da função objetivo, seguido pelo valor 0.
- 2.a linha em diante: Coeficientes das restrições, seguido pelo valor das restrições.
- As variáveis assumem valor -1, pois esta implementação entende todas as restrições como menor ou igual a 0.
- Em qualquer linha ou posição, comentários são aceitos desde que iniciados com o caracter "#".
- Caso a função objetivo ou uma restrição não possua determinada variável, sua posição na matriz deve assumir como coeficiente o valor 0.
2 5 0 #Funcao objetivo com duas variáveis. Necessário colocar um '0' ao final. 2 -1 4 #1.a inequacao 1 2 9 #2.a inequacao -1 1 3 #3.a inequacao
Listamos abaixo algumas evoluções que podem ser feitas para melhorar esta implementação.
- Dispensar digitação das restrições das variáveis básicas no arquivo de entrada.
- Permitir entrar com problemas de minimização diretamente no arquivo, e o programa converter para maximização.
Fim do README.md.