• Nenhum resultado encontrado

UM SOFTWARE INTERATIVO PARA O ALGORITMO SIMPLEX EM PROGRAMAÇÃO LINEAR

N/A
N/A
Protected

Academic year: 2021

Share "UM SOFTWARE INTERATIVO PARA O ALGORITMO SIMPLEX EM PROGRAMAÇÃO LINEAR"

Copied!
11
0
0

Texto

(1)

UM SOFTWARE INTERATIVO PARA O ALGORITMO SIMPLEX EM

PROGRAMAÇÃO LINEAR

Leizer de Lima Pinto

PESC / COPPE / UFRJ

Cidade Universitária, Rio de Janeiro, RJ, Brasil leizer@cos.ufrj.br

Cláudio Thomás Bornstein

PESC / COPPE / UFRJ

Cidade Universitária, Rio de Janeiro, RJ, Brasil ctbornst@cos.ufrj.br

RESUMO

O propósito deste artigo é apresentar um software didático (SPLINT - SimPLex INTerativo) contendo uma implementação interativa do algoritmo simplex tabular fases 1 e 2 para Programação Linear (PL). Devido à grande quantidade de operações necessárias em cada iteração do algoritmo simplex, torna-se difícil a resolução manual dos modelos. Assim, o aluno acaba apelando para pacotes que funcionam como caixa preta, e, com isso, não aprende o funcionamento do algoritmo. A interatividade do SPLINT visa facilitar o aprendizado do aluno no que concerne à mecânica do simplex. Ele dá ao usuário a possibilidade de tomar todas as decisões relevantes, como, por exemplo, critérios de entrada e saída da base. Ele também possibilita ao aluno testar outros critérios de entrada na base. Além disso, o SPLINT foi desenvolvido em linguagem para a internet (PHP), o que possibilita ao usuário a resolução de seus modelos on-line.

PALAVRAS CHAVE. Programação Linear. Algoritmo Simplex. Software para PL. EDU.

ABSTRACT

A Linear Programming (LP) software is presented may give subsidies for a LP course. An interactive two phase Simplex algorithm (SPLINT) is developed. The student is responsible for the main decisions like, for example, defining a new basis or deciding which variable should leave the basis. Also the different cases at the end of phase 1 and 2 have to be detected by the student. The machine updates the Simplex tableau doing the pivoting operations. This allows the student to handle bigger problems. The software also allows the student to test different criteria for introducing new basic variables. The SPLINT was developed in PHP for the internet allowing the student to solve the problems on-line without having to download any program.

(2)

1. Introdução

Neste trabalho, estamos interessados em uma implementação do algoritmo simplex para Programação Linear (PL). Em particular, estamos interessados no desenvolvimento de um software (SPLINT - SimPLex INTerativo) contendo uma implementação interativa do algoritmo simplex tabular fases 1 e 2 para PL. Os modelos de PL são problemas de Otimização onde se deseja minimizar (ou maximizar) uma função linear com restrições também lineares.

Publicado em 1951 (veja Dantzig (1951)), o simplex foi o primeiro método efetivo desenvolvido para resolver um modelo de PL. Com o início da análise de complexidade, surgiu a seguinte pergunta: quão bom é o algoritmo simplex? A resposta para esta pergunta veio em 1972 (veja Klee e Minty (1972)), onde se demonstra que o algoritmo simplex tem complexidade exponencial (pior caso), para uma certa escolha de entrada da base. Apesar disso, ele funciona muito bem na prática, motivo pelo qual é um dos métodos mais utilizados atualmente na prática da PL, mesmo com a existência de algoritmos com complexidade polinomial e com um bom funcionamento prático (veja Karmarkar (1984)).

O SPLINT foi desenvolvido na linguagem de Programação PHP, a qual nos permite criar páginas dinâmicas para a internet. O objetivo deste software é contribuir para o processo ensino-aprendizagem em PL. Acreditamos estar atingindo esta meta, uma vez que o SPLINT dá ao aluno a possibilidade de tomar todas as decisões importantes no que se refere ao simplex, como, por exemplo, critérios de entrada e saída da base e escolha de uma base inicial. Assim, somente os cálculos ficam por conta da máquina. Além disso, dependendo do modelo, o aluno pode optar apenas pela fase 2, o que dá maior flexibilidade ao programa. O aluno pode também testar outros critérios de entrada na base. Por exemplo, ao invés de entrar com a variável de custo reduzido mais negativo ele pode entrar com a primeira variável com custo reduzido negativo. Um outro fator que nos faz crer na contribuição para o processo ensino-aprendizagem é que o SPLINT está disponível na internet, bastando o usuário acessar: http://www.cos.ufrj.br/splint para resolver seus modelos de PL.

A motivação para o desenvolvimento do SPLINT na internet advém do LabPL (Laboratório de Programação Linear), que pertence a Universidade Católica de Goiás (UCG) e foi desenvolvido e é coordenado pelo Professor Marco Antonio Figueiredo Menezes. Pretendemos disponibilizar o SPLINT, também, no site do LabPL (http://www.ucg.br/Institutos/LabPL/Index.html). Foi através de Pinto e Menezes (2004) que surgiu a proposta para o desenvolvimento do SPLINT.

O SPLINT é composto por vinte e seis telas (páginas da internet) e está dividido em cinco módulos, que são: Módulo 1: Descrição do modelo geral; Módulo 2: Redução do modelo à forma padrão; Módulo 3: Resolução da 1ª fase do Simplex; Módulo 4: Resolução da 2ª fase do Simplex; e, Módulo 5: Dualidade. Para os módulos 1, 3 e 4 foram desenvolvidas telas iniciais, as quais descrevem o conjunto de telas destes módulos, uma vez que estes três módulos são compostos por várias telas cada. Os módulos 2 e 5 são compostos por uma única tela cada, por isso, optamos por não desenvolver telas iniciais para estes módulos.

Para atingirmos o objetivo de apresentar o SPLINT, dividimos este artigo da seguinte maneira: na seção 2, apresentamos um diagrama simplificado e telas iniciais associadas ao diagrama; na seção 3, apresentamos um simples modelo de PL, o qual usamos para mostrar algumas telas do SPLINT; nas seções 4, 5, 6, 7 e 8, comentamos o funcionamento dos módulos 1, 2, 3, 4 e 5, respectivamente. Além disso, exibimos algumas telas do SPLINT nestas seções.

2. Diagrama simplificado

O diagrama a seguir apresenta de forma simplificada o sistema que deu origem ao SPLINT.

(3)

Figura 1: Diagrama simplificado do SPLINT.

Como podemos observar na Figura 1, após chegar na Tela Principal o usuário deve decidir para qual módulo deseja ir. O SPLINT analisa a decisão com muita flexibilidade, por exemplo, se o usuário informar um modelo na forma padrão e informar para o sistema que conhece uma base inicial, então, o SPLINT permite ao usuário passar diretamente para o módulo 4.

Vejamos a seguir, as páginas do SPLINT referentes às telas introdutória e principal, respectivamente.

Figura 2: Tela Introdutória do SPLINT.

Tela Introdutória Tela Principal Módulo 1 Módulo 2 Módulo 3 Módulo 4 Módulo 5

(4)

Figura 3: Tela Principal do SPLINT.

Observemos na Figura 3 que o usuário deve escolher para qual módulo deseja ir e, em seguida, clicar no botão OK. Telas dos módulos 1, 2, 3, 4 e 5 são apresentadas nas seções 4, 5, 6, 7 e 8, respectivamente.

A seguir apresentamos um modelo de PL que nos auxiliará na exibição de telas do SPLINT.

3. Problema Teste

Nas próximas seções apresentamos telas do SPLINT associadas à resolução do modelo de PL que se segue:

( )

. 0 x , x 2 x 2 x x x P 2 1 1 2 1 1 ≥ ≥ = + − : a sujeito minimizar

A escolha deste modelo se deve a sua simplicidade e ao fato de ele levar a degeneração. Na resolução de alguns problemas degenerados pelo simplex é possível existir alguma variável artificial na base, com valor igual a zero no final da fase 1 para problemas viáveis. Em particular, isso pode ocorrer para o problema (P). Assim, através deste problema mostramos na seção 5 que o SPLINT trata da substituição dessas variáveis artificiais por não artificiais no final da 1ª fase do simplex.

Os módulos do sistema são apresentados a partir da próxima seção. Iniciamos com o módulo 1.

4. Módulo 1: Descrição do modelo geral

Nesta seção, apresentamos a tela inicial e descrevemos a funcionalidade das demais telas do módulo 1. Vejamos na figura que se segue, a tela inicial deste módulo.

(5)

Figura 4: Tela Menu do Módulo 1 do SPLINT.

Podemos observar que no módulo 1 (Figura 4), a primeira opção (tela 1) é inserir um modelo já armazenado, ou seja, trata-se de um modelo já formulado anteriormente e que pode ser recuperado pelo sistema. A outra opção (telas 2 a 7) compete em formular um novo modelo. Para isto o usuário deve informar: o número de variáveis (tela 2), o sinal de cada variável (tela 3), o número de restrições (tela 4), os coeficientes das restrições (tela 5), os coeficientes da função objetivo (tela 6) e, finalmente, se desejar, o usuário pode salvar o modelo (tela 7).

Após inserir o modelo que deseja resolver (aqui estamos supondo o modelo da seção 3) o usuário deve reduzi-lo à forma padrão. Vejamos na próxima seção como funciona esta tarefa no SPLINT.

5. Módulo 2: Redução do modelo à forma padrão

Consideremos o modelo de PL apresentado na seção 3. A tela única do módulo 2 é apresentada através do problema (P) na figura abaixo.

Figura 5: Tela do Módulo 2 do SPLINT após a redução do problema (P) à forma padrão.

O funcionamento do módulo 2 ocorre da seguinte forma: O modelo inserido no módulo 1 é apresentado na tela única do módulo 2. Operações para se obter um modelo equivalente na

(6)

forma padrão, ou seja, um modelo onde todas as variáveis são não negativas, todas as restrições de igualdade e a função objetivo é de minimização, estão disponíveis, bastando o usuário seguir as instruções contidas nesta tela (veja Figura 5). Além disso, é a partir deste módulo que o SPLINT começa a contar os erros do usuário. Aqui, o usuário necessita saber os procedimentos (operações) para se reduzir um modelo à forma padrão (veja, por exemplo, Bregalda, Oliveira e Bornstein (1988)). Por exemplo, ele deve saber que max f(x) = -min -f(x). Então, se a função objetivo (fo) do problema é de maximização, ele deve escolher a operação multiplicar a fo por -1. Caso seja de minimização e ele escolhe a operação multiplicar a fo por -1, então o contador de erros do SPLINT incrementa de 1.

Após a redução do modelo à forma padrão, inicia-se a execução do algoritmo simplex. Caso o usuário conheça uma solução básica viável inicial, então o SPLINT o possibilita passar diretamente para a fase 2 (módulo 4). Caso contrário, o usuário deve escolher o módulo 3 (fase 1). Este módulo é tratado na próxima seção.

6. Módulo 3: Resolução da 1ª fase do Simplex

Nesta seção, apresentamos a tela inicial e descrevemos a funcionalidade das demais telas do módulo 3. Além disso, apresentamos o procedimento para se trocar uma variável artificial (com valor igual a zero) por outra não artificial na base após o final da 1ª fase do simplex. Vejamos a tela inicial do módulo 3 na figura que se segue.

Figura 6: Tela Menu do Módulo 3 do SPLINT.

Podemos observar na Figura 6 que este módulo é composto por mais sete telas. Na tela 1, o usuário insere variáveis artificiais (va) e escolhe uma base inicial para a 1ª fase do simplex; na tela 2, ele identifica o final da fase 1 ou escolhe um nova variável básica; na tela 3, ele escolhe uma nova variável não básica; caso o usuário identifique na tela 2 que o modelo original é inviável, então, um relatório final da resolução é apresentado na tela 4; na tela 5, ele verifica a existência de va básicas no final da fase 1; na tela 6, se existir va na base, então ele as substitui por não artificiais; e, na tela 7, ele elimina as va e, se existir, restrições redundantes do modelo original.

Consideremos o problema (P) da seção 3. Para atingirmos o objetivo da 1ª fase do simplex, que é obter uma solução básica viável para o problema original, devemos ter uma base composta apenas por variáveis não artificiais. Na resolução do problema (P), uma va permaneceu na base após o final da fase 1. Nas três figuras que se seguem, mostramos como realizar a troca desta va por outra não artificial na base. Esta troca é realizada na tela 6 do módulo 3.

(7)

Figura 7: Tela 6 do módulo 3 do SPLINT após o usuário escolher x2 para substituir a va x4.

Após o usuário informar uma va para sair da base e outra não artificial para entrar, o SPLINT analisa o elemento pivô. Caso ele seja nulo, um erro é computado para o usuário, pois com esta troca não se tem uma nova base (veja o teorema de substituição de vetores em uma base, por exemplo, em Bregalda, Oliveira e Bornstein (1988)). Caso contrário (veja Figura 7), o SPLINT realiza a troca reduzindo o quadro simplex à forma canônica. Porém, antes de apresentar o novo quadro, o SPLINT apresenta uma mensagem alertando a troca que será realizada (veja Figura 8).

Figura 8: Mensagem avisando a substituição de x4 por x2 na base.

A seguir, o SPLINT realiza os cálculos para reduzir o quadro simplex à forma canônica e apresenta, novamente na tela 6, o novo quadro simplex (veja Figura 9).

(8)

Podemos observar na Figura 9 que, finalmente, temos uma base inicial para a fase 2, pois todas as variáveis básicas são não artificiais. Deste modo, basta o usuário clicar o botão OK para passar para a tela 7 (última do módulo 3), onde se elimina todas as va do quadro simplex.

Uma vez obtida uma base inicial para a fase 2, finaliza-se a fase de viabilidade (fase 1). A partir daí, inicia-se a busca por uma base ótima para o modelo original. Na próxima seção tratamos da resolução desta fase de otimalidade (fase 2) no SPLINT.

7. Módulo 4: Resolução da 2ª fase do Simplex

Nesta seção, apresentamos a tela inicial e descrevemos a funcionalidade das demais telas do módulo 4. Além disso, apresentamos a tela que contém o relatório final da resolução para problemas que admitem solução ótima. Este relatório informa a solução ótima obtida, os números de iterações nas fases 1 e 2, e, os números de erros nos módulos 2, 3 e 4. O mais interessante desta tela é uma escolha que o usuário deve tomar olhando para o quadro ótimo. As opções para esta escolha são: o modelo admite uma única solução ótima; e, o modelo admite uma infinidade de soluções ótimas. Estas são as duas possibilidades para um modelo de PL que admite solução ótima.

Consideremos o problema (P) da seção 3. Vejamos, respectivamente, a tela inicial e a tela 4 do módulo 4 nas figuras que se seguem.

(9)

Figura 11: Tela 4 do Módulo 4 do SPLINT para o problema (P).

Podemos observar na Figura 10 que este módulo é composto por mais cinco telas. Se o usuário optou por executar apenas a fase 2, então na tela 1 ele informa a solução básica viável inicial. Caso contrário, a base inicial será a obtida no módulo 3 (fase 1); na tela 2, ele identifica otimalidade ou escolhe uma nova variável básica; na tela 3, ele escolhe uma nova variável não básica ou identifica problema ilimitado; caso o usuário identifique na tela 2 que uma solução ótima foi atingida, então, um relatório final da resolução é apresentado na tela 4. Além do relatório, nesta tela ele deve fazer a escolha descrita na introdução desta seção; e, caso o usuário identifique problema ilimitado na tela 3, então, um relatório final da resolução é apresentado na tela 5.

Observemos, agora na Figura 11, que após o quadro ótimo aparecem as duas opções descritas no inicio desta seção. Através do quadro é possível identificar qual delas é a opção correta (veja, por exemplo, Bregalda, Oliveira e Bornstein (1988)). Quando o usuário realiza a escolha correta ele retorna para a tela principal do SPLINT.

Após o final da resolução do modelo inserido (modelo primal), o usuário tem a possibilidade de gerar o modelo dual e informar uma solução ótima para o mesmo. Para isso, ele deve ir para o módulo 5. Este módulo é apresentado na próxima seção.

8. Módulo 5: Dualidade

É sabido que a cada modelo de PL corresponde um outro modelo de PL denominado dual, tal que ambos os modelos possuem o mesmo valor ótimo para as suas funções objetivo. A formulação geral do problema dual pode ser vista em Bregalda, Oliveira e Bornstein (1988).

Consideremos o modelo de PL apresentado na seção 3. A tela única do módulo 5 é apresentada através do problema (P) na figura abaixo.

(10)

Figura 12: Tela do Módulo 5 do SPLINT para o problema (P).

O funcionamento do módulo 5 ocorre da seguinte forma: Na tela única deste módulo, são apresentados (veja a Figura 12) o último quadro ótimo gerado no módulo 4 e os modelos primal (inserido pelo usuário no módulo 1) e dual (o SPLINT gera o dual do modelo inserido). A partir de então, o usuário deve informar uma solução ótima para o modelo dual. Para isso, pode ser necessário um certo conhecimento de dualidade em PL (veja, por exemplo, Bregalda, Oliveira e Bornstein (1988)).

A seguir apresentamos nossas conclusões sobre este trabalho.

9. Conclusão

Este trabalho apresentou um software didático e flexível contendo uma implementação interativa do algoritmo simplex tabular fases 1 e 2. Com isso, os cursos de Programação Linear podem se beneficiar com o uso desta nova ferramenta.

O SPLINT cumpre o seu papel de colaborador para o processo ensino-aprendizagem, pois resoluções de problemas onde o usuário deve tomar as decisões de cada passo do algoritmo, contribuem para o aprendizado do método. A parte trabalhosa do método, qual seja, as operações de pivoteamento, são feitas pela máquina.

Agradecimento. Ao colega Sérgio Gonzalez, pela colaboração no que se refere à linguagem de

programação PHP, a qual foi utilizada juntamente com a linguagem de programação JavaScript e a linguagem de formatação de texto HTML para implementar o SPLINT. Ao Professor Marco Antonio Figueiredo Menezes pelas várias sugestões.

(11)

Referências Bibliográficas

[1] P. F. Bregalda, A. A. F. de Oliveira e C. T. Bornstein. Introdução à Programação Linear. 3ª edição, Campus, 1988.

[2] G. B. Dantzig. Maximization of a linear function of variables subject to linear inequalities.

Activity Analysis of Production and Allocation, ed. T. C. Koopmans, John Wiley, New

York, 339-347, 1951.

[3] N. Karmarkar. A new polynomial time algorithm for linear programming. Combinatorica, 4, 373-395, 1984.

[4] V. Klee e G. Minty. How good is the simplex algorithm? Inequalities III, O. Sisha, ed., Academic Press, New York, NY, 1972.

[5]

L. L. Pinto e M. A. F. Menezes. Algoritmos simplex tabular para o LabPL. Anais do XXVII

Referências

Documentos relacionados

Durante o período do estudo, entre fevereiro e novembro de 2019, foram analisados dados de 324 pacientes hemofílicos A, conforme gravidade e desenvolvimento de

• Ponto 38: Antonio Jose Gomes esquina com a Francisco de Assis Andrade • Ponto 39: Antonio jose Gomes em frente ao terreno baldio de esquina • Ponto 40: Jose Bonifacio próximo

Nota: Visto que o atraso de enfileiramento e o componente variável do atraso de rede já são incluídos nos cálculos do buffer de controle de variação de sinal, o atraso total é,

O candidato poderá obter informações e orientações sobre o Simulado Virtual, tais como Editais, processo de inscrição, horário de prova, gabaritos, ranking e resultados

A seleção portuguesa feminina de andebol de sub-20 perdeu hoje 21-20 com a Hungria, na terceira jornada do Grupo C do Mundial da categoria, a decorrer em Koprivnica, na

É primeiramente no plano clínico que a noção de inconscien- te começa a se impor, antes que as dificuldades conceituais envolvi- das na sua formulação comecem a ser

Entre as atividades, parte dos alunos é também conduzida a concertos entoados pela Orquestra Sinfônica de Santo André e OSESP (Orquestra Sinfônica do Estado de São

ensino superior como um todo e para o curso específico; desenho do projeto: a identidade da educação a distância; equipe profissional multidisciplinar;comunicação/interatividade