4 a 7 de novembro de 2003, Natal-RN A pesquisa Operacional e os Recursos Renováveis ADAPTAÇÃO DO PROLIN (SISTEMA PARA PROGRAMAÇÃO LINEAR) PARA USO VIA WEB Alexandre Sant’Anna dos Santos Universidade Federal Viçosa - UFV Departamento de Informática – DPI CEP: 36570-000 Viçosa - MG [email protected] Resumo: A Universidade Federal de Viçosa oferece três disciplinas de Pesquisa Operacional na graduação e várias na pós-graduação, com destaque para a disciplina Programação Linear e suas aplicações. Com isso, torna-se imprescindível o uso de ferramentas computacionais nesta área, sendo muito desejável o acesso a tais ferramentas por meio da rede interna. Para um melhor aproveitamento do estudante nessas disciplinas, é desejável que tais ferramentas sejam bem documentadas e de fácil acesso. Neste contexto, encaixa-se o PROLIN (Sistema para PROgramação LINear), desenvolvido para a resolução de problemas genéricos de Programação Linear. Implementado em 1987 por uma equipe da Universidade Federal de Viçosa, utiliza o Simplex Revisado como algoritmo-base. Com vistas em um melhor aproveitamento do código desenvolvido em FORTRAN e da eficiência demonstrada pelo PROLIN criou-se, com o presente trabalho, uma interface para o seu uso via Internet, utilizando-se a linguagem de programação PHP. Com o mínimo possível de alterações em seu código original, o PROLIN tornou-se acessível via Internet, configurado para problemas de Programação Linear com até 50 restrições e 100 variáveis nesta versão acadêmica. Juntamente com esta adaptação, um site completo foi desenvolvido com o intuito de facilitar o uso do PROLIN, como reforço ao processo de ensino-aprendizagem no contexto acadêmico. Palavras -chave: Programação Linear via INTERNET - Ensino de Programação Linear - PROLIN. Abstract: The Federal University of Viçosa offers three graduate and several post-graduate courses based on Operations Research, with emphasis on Linear Programming topics and their applications. Therefore the use of computational tools is indispensable, being even more desirable the access of such tools over a network. For the student to take greater advantage of these courses, we need tools that are well documented and easy to use. In this context, there is the PROLIN (LINear PROgramming) tool, developed for the resolution of generic linear programming problems. It was coded in 1987 in this university, using the revised simplex method as its base algorithm. Taking advantage of the software already developed in FORTRAN, with its correctness and efficiency, in this work we created an interface for its use over the Internet. For this we used the PHP programming language. Making only minor changes in PROLIN’s original code, it is accessible on the web, configured to solve linear programming problems with up to 50 constraints and 100 variables in this version. Together with this adaptation, a complete site was developed with the intention of facilitating the use of such tool, offering a better learning curve inside the academic context. Keywords: Linear Programming on the web - Linear Programming teaching - PROLIN. 1. Introdução Em meados da década de 90, houve um crescimento amplo de ferramentas disponibilizadas na Internet para uso via navegador web. A interação entre cliente-servidor é mediada pelo mais básico dos componentes web: navegadores que interpretam HyperText Markup Language (HTML), servidores para requisições e envios de respostas HyperText Transfer Protocol (HTTP) e o uso de solucionadores para os problemas requisitados pelo usuário. Estes solucionadores são o que se denominam linguagens dinâmicas para a web que têm sido amplamente usadas, principalmente para o e-commerce. A vantagem oferecida por estas linguagens é que elas podem acessar recursos avançados do computador servidor e disponibilizar o conteúdo para o cliente de maneira rápida e dinâmica. Isto possibilitou grande facilidade para o usuário, uma vez que através de um browser simples, ele tem acesso a uma variada gama de serviços na Internet. Atualmente, é possível fazer, através da web, reservas de hotéis, compras dos mais variados artigos, dentre outras possibilidades. Muitas foram as ferramentas de Pesquisa Operacional desenvolvidas para a web. Algumas delas estão na forma de applet JAVA (o navegador faz o download do aplicativo do servidor e executa o programa no cliente, através de um plugin), outras estão na forma direta para download (para serem instaladas no cliente para uso individual) e existem aquelas que estão no padrão de formulário HTML (o cliente, através de um browser, envia uma requisição com seu problema através de dados diretos, em arquivo ou por e-mail e recebe uma resposta do aplicativo na mesma hora). 2. Programação Linear Trata-se de uma técnica tradicional de Pesquisa Operacional e que tem sido empregada em muitos campos da atividade humana. Um Problema de Programação Linear (PPL) envolve a otimização de uma função linear denominada função objetivo, condicionada ao atendimento de restrições também caracterizadas pela linearidade das funções envolvidas. Apesar das pressuposições inerentes à linearidade das funções presentes num modelo de Programação Linear, inúmeros problemas reais têm sido modelados com sucesso e resolvidos por meio desta ferramenta. GOLDBARG e LUNA (2000) oferecem uma ampla exposição sobre a origem, o processo de modelagem, os fundamentos teóricos e as aplicações da Programação Linear [1]. 3. PROLIN O Sistema para Programação Linear - PROLIN, desenvolvido para a resolução de problemas genéricos de Programação Linear, utiliza o Simplex Revisado como algoritmo-base, adaptando-o para lidar com variáveis ou com restrições limitadas. Em sua versão para micros, está limitado a um máximo de 100 (cem) restrições e 500 (quinhentas) variáveis, não se incluindo, entre essas, as variáveis de folga e as artificiais [2]. O PROLIN (Sistema para PROgramação LINear) é uma ferramenta desenvolvida na UFV em 1987. O PROLIN foi implementado na linguagem de programação FORTRAN 77 para o ambiente DOS/16bits (portanto, rápido e eficiente). O funcionamento do programa é bem simples. Depois de executado, o programa pede o nome do arquivo de entrada (contendo os dados do problema) e o nome do arquivo de saída (onde serão gravados os relatórios a respeito da solução do problema de Programação Linear ou mensagens de erros encontrados durante a execução do programa). A tela inicial do programa pode ser visualizada na figura abaixo: figura 1 – Tela para entrada dos arquivos do PROLIN Após esta etapa, o programa pede o drive do disco onde o usuário deseja gravar o arquivo temporário gerado pelo programa. Esta etapa pode ser visualizada na figura abaixo: 2552 figura 2 – Tela para fornecimento do drive para o arquivo de trabalho Para finalizar, o programa exibe uma tela se a busca da solução ótima teve sucesso ou não e o resultado em arquivo. 4. Adaptação do PROLIN Como se percebe, esta forma de utilização não é amigável, tornando-se necessária a adaptação do PROLIN para uso via web, a fim de que o seu uso fosse estimulado no meio acadêmico, motivo principal de seu desenvolvimento. Como uma ferramenta sem interface gráfica, o PROLIN caiu em desuso pelos estudantes da UFV e, também, pelos professores das disciplinas de Pesquisa Operacional. Para estimular o uso do programa como ferramenta acadêmica tornou-se necessário agregar-lhe valor, tornando-a atrativa, tanto na facilidade de uso quanto na sua interface gráfica e na facilidade de acesso a esta ferramenta. 4.1 Definição do compilador A versão original do PROLIN foi desenvolvida e compilada para a plataforma Windows, utilizando o ambiente de programação Microsoft Fortran PowerStation. A fim de disponibilizá-lo para uso via navegador web, foi necessária que se fizesse, primeiro, a adaptação do código fonte do programa para que ele fosse compilado no sistema operacional do servidor que iria hospedá-lo. Os servidores visados para hospedar o PROLIN (servidores do Departamento de Informática da UFV) têm, como sistema operacional o LINUX, necessitando, então que o código fonte do programa PROLIN fosse adaptado para compilação nesta plataforma. Antes de tudo, foi preciso também definir o compilador a ser utilizado para que o mínimo de alterações fosse necessário no código-fonte do programa diminuindo, assim, os riscos de introdução de erros de programação e de incompatibilidade entre os dialetos da linguagem FORTRAN 77 utilizados entre os compiladores. O compila dor definido foi o g77 da GNU[3]. Além do uso gratuito, o compilador da GNU possibilita a compilação para diversas plataformas (portabilidade entre Sistemas Operacionais), aceitando um dialeto do FORTRAN 77 bem próximo ao definido pelo ANSI FORTRAN 77. A escolha deste compilador facilitou a adaptação do código fonte do PROLIN, uma vez que poucas rotinas foram alteradas. 4.2 Alterações no código fonte do PROLIN original. Como programa monousuário, o PROLIN teve que sofrer algumas alterações para que fosse utilizado via web, sendo adaptada a sua interação com o usuário. A este é dada a opção de digitar o modelo do Problema de Programação Linear (PPL) no próprio site ou de fornecer o nome do arquivo contendo o modelo. Caso o usuário opte por entrar diretamente com o problema no site, uma rotina à parte foi implementada para a criação automática de arquivos e a nomeação dos mesmos, tomando como base o número de sessão do usuário, a fim de evitar conflito com nomes de arquivos no servidor. Mesmo porque no ambiente web, deve-se considerar a possibilidade de existirem diversos usuários 2553 utilizando o sistema simultaneamente; logo, um mecanismo foi implementado para evitar conflitos. Como exemplo, pode-se citar dois estudantes submetendo problemas diferentes ao mesmo tempo para o PROLIN. O resultado poderia ser uma solução inconsistente para ambos os modelos submetidos pois, considerando o processamento concorrente no servidor, o programa poderia sobrepor os arquivos temporários gerados de um problema com os do outro, gerando inconsistência ou, até mesmo, erro de processamento no servidor. Logo, o PROLIN foi parametrizado para receber o nome de três arquivos. Primeiro, o arquivo contendo o modelo; segundo, o arquivo temporário a ser utilizado pelo programa para geração das matrizes temporárias utilizadas no processamento; e, por último, o arquivo para armazenar o resultado do processamento. Uma outra alteração efetuada foi na dimensão dos problemas aceitos pelo PROLIN. A fim de se evitar sobrecarga no servidor, o PROLIN foi limitado para problemas com até 50 restrições e 100 variáveis, o que é satisfatório para o uso acadêmico da ferramenta. 4.3 Definição de um novo formato de modelagem de dados O formato de entrada de dados exigido pelo PROLIN, em sua versão original, é extremamente rígido no que se refere, principalmente, ao posicionamento de variáveis, restrições e coeficientes no arquivo. Por exemplo, o usuário é obrigado a definir um titulo e depois o objetivo do problema (maximizar ou minimizar determinada função objetivo). Logo após, ocorre a definição das restrições, onde o nome da restrição fica na primeira posição (até a oitava coluna da linha), o sinal (menor, maior ou livre) da coluna 10 à 18 e o valor limite, caso haja, (da coluna 20 à 28). Este tipo de entrada de dados é totalmente complicado para quem está começando a aprender Programação Linear, visto que o usuário não consegue visualizar a equação que modelou antes de digitar o problema. Outra dificuldade está no fato do usuário ter que se preocupar com o posicionamento dos itens no arquivo, o que é muito desconfortável. Com o objetivo de diminuir o tempo de aprendizado do formato de modelagem de dados pelo estudante, um novo formato de entrada de dados foi definido para o PROLIN. Este formato é muito semelhante ao usado na literatura de Pesquisa Operacional para PPL e, também, ao formato adotado por programas já existentes no mercado. Isso reduz a quase zero o tempo necessário para que o usuário aprenda o formato de modelagem de dados, o que estimula o uso da ferramenta. Logo abaixo, seguese uma descrição do novo formato de modelagem: [Objetivo] <qualificador> [<obj>] : <coef1><var1> [<+|-> <coef2><var2> ... <+|-> <coefN><varN>] [<sinal> <valor>] [<obj> <sinal> <valor> ] Sujeito [<rest1> :] <coef1><var1> [<+|-> <coef2><var2> ... <+|-> <coefN><varN>] <sinal> <valor> ... [<restN> :] <coef1><var1> [<+|-> <coef2><var2> ... <+|-> <coefN><varN>] <sinal> <valor> [(<rest1> | < var1>) <sinal> <valor> ] ... [(<restN> | < varN>) <sinal> <valor>] Combinar [<restC1> :] <coef1><rest1> [<+|-> <coef2><rest2> ... <+|-> <coefN><restN>] <sinal> <valor> ... [<restCN> :] <coef1><restN> [<+|-> <coef2><rest2> ... <+|-> <coefN><restN>] <sinal> <valor> [(<restC1>) <sinal> <valor> ] ... [(<restCN>) <sinal> <valor>] [fim] 2554 Exemplo: max 2x + y s.a. x + y <= 10 3x + 5y <= 30 fim Como observado na descrição do formato de modelagem, o problema fica dividido em 3 seções. A primeira para definição da função objetivo, a segunda para definição das restrições e a terceira seção para definição das restrições combinadas. O usuário não é obrigado a dar nomes às restrições e a definição dos limites das variáveis e restrições também é opcional. Caso o usuário não informe todos os parâmetros, o sistema usa uma atribuição automática. 4.4 Implementação do conversor O pobre tratamento de formatação de texto pela linguagem FORTRAN 77 fez com que fosse implementado um conversor de formatos, em uma outra linguagem de programação,. Isso significa que, antes do modelo ser submetido ao programa, uma rotina implementada em PHP é acionada para convertê-lo no formato de modelagem do PROLIN original. Durante a conversão, problemas de entrada de dados são verificados para evitar a geração de um arquivo de dados inconsistente. 4.5 Funcionamento do PROLIN Para se adequar o PROLIN à Web, utilizou-se a linguagem de programação para a Internet PHP[4]. Foram implementadas rotinas de manipulação e criação de arquivos, de conversão do formato de dados e de formatação dos resultados. Ao submeter o modelo do PPL pela web, a rotina de manipulação e criação de arquivos é acionada. Após esta etapa, o formato do problema é convertido pela rotina de conversão e, então, o PROLIN é acionado pelo aplicativo. Quando a execução do PROLIN é finalizada, a rotina de formatação dos resultados é acionada para formatar o resultado da solução do problema, sendo resposta enviada ao usuário (figura 3). Cabe ressaltar que qualquer erro ocorrido em qualquer uma das etapas, o usuário é devidamente avisado e instruído através de uma resposta devidamente formatada para este fim. Servido r Problema Usuário Resultado Formatado Apache(Http) Aplicativo PHP Manipulação dos Arquivos Conversor de Formatos PROLIN Formatação do Resultado Figura 3 – Funcionamento do PROLIN na web O resultado retornado é bem completo, possibilitando ao usuário uma rica interpretação e permite que se faça inferências sobre o modelo submetido. O resultado é dividido em seis seções, cada uma com suas características. Abaixo segue uma descrição das características de cada seção do resultado retornado. 4.5.1 Identificação do problema: TÍTULO: nesse campo, tem-se o conteúdo associado à palavra-chave TÍTULO. 2555 OBJETIVO DO PPL: tem-se o objetivo do problema e o nome da função a ser otimizada. * ÓTIMA - quando o PPL tiver solução determinada * INVIÁVEL - quando a solução do PPL for indefinida. Nesse caso, o ESTADO será precedido de mensagem identificando a origem da inviabilidade, sendo a execução interrompida. NÚMERO DE ITERAÇÕES: número total de vezes que se utilizou o SIMPLEX para se atingir a solução ótima. VALOR DA SOLUÇÃO: valor da função objetivo na solução ótima. 4.5.2 Características das variáveis: NÚMERO: coluna de numeração interna seqüencial das variáveis definidas para o problema; NOME: coluna contendo os nomes usados na definição das variáveis; ESTADO: coluna contendo o estado das variáveis na solução ótima. LIMITE INFERIOR: coluna contendo os valores definidos ou assumidos para os limites inferiores das variáveis. NÍVEL ÓTIMO: coluna contendo os valores assumidos pelas variáveis na solução ótima. LIMITE SUPERIOR: coluna contendo os valores definidos ou assumidos para os limites superiores das variáveis. CUSTO ASSOCIADO: coluna contendo os coeficientes das variáveis na função objetivo. CUSTO REDUZIDO: coluna contendo a taxa de variação no valor ótimo da função objetivo (VALOR DA SOLUÇÃO) ocasionada pela variação de uma unidade na variável correspondente. 4.5.3 Características das restrições. NÚMERO: coluna contendo a numeração associada à ordem de entrada das restrições. NOME: coluna contendo os nomes usados na definição das restrições. ESTADO: coluna contendo o ESTADO das restrições na solução ótima, relacionando o NÍVEL ÓTIMO com os valores dos limites inferior e superior. LIMITE INFERIOR: coluna contendo os limites inferiores definidos ou assumidos para os valores associados às restrições. NÍVEL ÓTIMO: coluna contendo os valores associados às restrições na solução ótima. NÍVEL SUPERIOR: coluna contendo os limites superiores definidos ou assumidos para os valores associados às restrições. FOLGA ASSOCIADA: coluna contendo a diferença existente entre o LIMITE (superior ou inferior) e o NÍVEL ÓTIMO associados à restrição. PREÇO - SOMBRA: coluna contendo a taxa de variação no valor da função objetivo ocasionada por uma variação unitária na quantidade associada à restrição (disponibilidade do recurso). 4.5.4 Análise de sensibilidade para os custos (Vetor c). As colunas NÚMERO, NOME, ESTADO e CUSTO ASSOCIADO seguem as definições dadas nos itens anteriores. INTERVALO DE VALIDADE PARA OS CUSTOS: * NÍVEL MÍNIMO - nesta coluna, tem-se como informação, o nível mínimo que o coeficiente de custo associado a uma variável pode assumir, sem que os ESTADOS da solução e das variáveis se modifiquem, ou seja, de forma que variáveis básicas continuem básicas e variáveis não básicas continuem não básicas. Qualquer variação nos custos que exceda este limite poderá provocar uma mudança nos conjuntos de nas variáveis básicas e de não-básicas. * NÍVEL MÁXIMO - de forma inteiramente análoga, tem-se o limite máximo que o coeficiente de custo associado a uma variável pode assumir. 2556 4.5.5 Análise de sensibilidade para as variáveis. As colunas NÚMERO, NOME, ESTADO e NÍVEL ÓTIMO seguem as definições dadas nos itens anteriores. VARIAÇÃO NO VALOR DA SOLUÇÃO POR UNIDADE DE * DECRÉSCIMO - essa coluna nos fornece a variação no VALOR DA SOLUÇÃO devido a um decréscimo unitário no NÍVEL ÓTIMO da variável em questão. * ACRÉSCIMO - da mesma forma que a coluna anterior, esta fornece a variação por unidade de acréscimo. INTERVALO DE VALIDADE * NÍVEL MÍNIMO -Valor mínimo que a variável pode assumir de forma que a variação no VALOR DA SOLUÇÃO dada pela coluna DECRÉSCIMO seja válida. * NÍVEL MÁXIMO -Valor máximo que a variável pode assumir de forma que a variação no VALOR DA SOLUÇÃO dada pela coluna ACRÉSCIMO seja válida. 4.5.6 Análise de sensibilidade para as restrições. As colunas NÚMERO, NOME, ESTADO e NÍVEL ÓTIMO seguem as definições dadas nos itens anteriores. VARIAÇÕES NO VALOR DA SOLUÇÃO POR UNIDADE DE * DECRÉSCIMO - esta coluna nos fornece a variação no VALOR DA SOLUÇÃO devido a um decréscimo unitário no NÍVEL ÓTIMO da restrição em questão, ou seja, a taxa de variação da função objetivo ocasionada por uma variação para menos no NÍVEL ÓTIMO associado à restrição. * ACRÉSCIMO - da mesma forma que a coluna anterior, esta fornece a variação por unidade de acréscimo. INTERVALO DE VALIDADE * NÍVEL MÍNIMO -Valor mínimo que a restrição (variável linha) pode assumir de forma que a variação no VALOR DA SOLUÇÃO, dada pela coluna DECRÉSCIMO, seja válida. * NÍVEL MÁXIMO -Valor máximo que a restrição (variável linha) pode assumir de forma que a variação no VALOR DA SOLUÇÃO, dada pela coluna ACRÉSCIMO, seja válida. 4.6 Construção do site O site do PROLIN (figura 4) foi desenvolvido para dar suporte e orientar o usuário para o uso do programa. Contém seções de exemplos, onde o usuário pode acompanhar exemplos práticos desde a definição do problema até a sua modelagem, possibilitando uma rápida visualização de como utilizar o programa. Além do mais, contém uma seção onde se pode ter acesso aos manuais, caso uma consulta mais detalhada seja desejada. 2557 figura 4 – Tela inicial do site do PROLIN 5. Resultados O PROLIN está disponível em um site com manuais, exemplos e informações técnicas sobre o mesmo. O site está hospedado em um servidor da Empresa Júnior de Informática (No Bugs), localizada no Departamento de Informática da UFV, podendo ser acessado no endereço www.prolin.ufv.br. Para verificar a eficiência do uso do PROLIN via web, foram selecionados 4 problemas diversificados com dimensões razoáveis (até 20 restrições e 80 variáveis). O observado é que o tempo de resolução destes problemas foi bem reduzido, da ordem dos centésimos de segundo, o que demonstra a eficiência do sistema. A determinação do tempo de resolução foi baseada na própria resposta do PROLIN, que já calcula o tempo de resolução dos problemas, assim como o tempo para as análises de sensibilidade. Outros testes também foram realizados com problemas com erros no formato, para que se identificasse alguma falha do código do aplicativo em PHP, de conversão dos dados do problema. Foram submetidos ao PROLIN vários problemas com os mais diversos tipos de erros de formato. Com isto, foi possível a correção de algumas distorções não percebidas antes, o que melhorou o sistema em termos de identificação de erros. 6. Conclusões As ferramentas de Pesquisa Operacional, geralmente, consomem muitos recursos do computador e são de alta complexidade, o que requer uma linguagem eficiente e rápida. Quando se decidiu pela adaptação do PROLIN (implementado na linguagem FORTRAN 77) para uso via web, preferiu-se manter o programa nesta linguagem, devido à rapidez e à eficiência da mesma para processamento numérico. O público alvo para utilizar o PROLIN, nesta versão web, são estudantes de graduação e pósgraduação que precisam utilizar uma ferramenta simples e acessível para resolver problemas genéricos de Programação Linear. O PROLIN está disponível, hoje, para trabalhar com até 50 restrições e 100 variáveis, um número razoável para o referido público. 7. Referê ncias Bibliográficas [1] GOLDBARG, M.C. e LUNA, H. P. L., Otimização Combinatória e Programação Linear. Rio de Janeiro: Editora Campus Ltda, 2000. 2558 [2] RIBEIRO, .A. A .S.; SANTOS, H .N.; OLIVEIRA, A. M.; CUNHA, M.S., Sistema para Programação Linear - PROLIN - IV Encontro Regional de Matemática Aplicada e Computacional. SBMAC. Anais, Belo Horizonte, MG, 1987. [3] GNU Fortran, http://gcc.gnu.org/onlinedocs/gcc-3.1/g77. Acesso em11/11/2001. [4] The PHP group, http://www.php.net. Acesso em 20/05/2002. 2559