GithubHelp home page GithubHelp logo

hector-fc / simplex_prog_linear Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sergiosilvar/simplex_prog_linear

0.0 1.0 0.0 2.55 MB

Implementação do algoritmo Simplex conforme abordagem do livro "Algorithms" dos autores Chirstos Papadimitriou et all.

simplex_prog_linear's Introduction

SIMPLEX

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.

ARQUIVOS

  • 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.

Pré-requisitos

Para utilizar o algorimto é necessário os seguintes softwares:

Como usar em linha de comando

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.

================================================================

Formato do Arquivo de Entrada

  • 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.

Exemplo de um arquivo de entrada

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

TODO

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.

simplex_prog_linear's People

Contributors

sergiosilvar avatar

Watchers

Hector FC avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.