SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸˜o
                                                                     ca


                          Tecnol´gica - CESET
                                o




      ¸˜                      ¸˜
Aplicacao comercial de otimizacao
         ¸˜           ´
  de funcoes usando metodo de
      ¸˜
  solucao Simplex, com foco em
               ´
 sistemas de saude nutricional e
                ´
            dietetica



                                                     Vanessa Oliveira Campos




                                 Limeira
                                  2007
i


 Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸˜o
                                                                     ca


                          Tecnol´gica - CESET
                                o




      ¸˜                      ¸˜
Aplicacao comercial de otimizacao
         ¸˜           ´
  de funcoes usando metodo de
      ¸˜
  solucao Simplex, com foco em
               ´
 sistemas de saude nutricional e
                ´
            dietetica


                                                     Vanessa Oliveira Campos

                                  Trabalho de Gradua¸˜o Interdisciplinar (TGI)
                                                    ca
                        apresentado ao Centro Superior de Educa¸˜o Tecnol´gica
                                                               ca        o
                              - CESET como requisito de conclus˜o do Curso de
                                                               a
                                                    Tecnologia em Inform´tica.
                                                                        a
                                 Orientador: Marli Gomes de Freitas Hernandes




                                 Limeira
                                  2007
ii




Aos meus amigos Elaine, Fernando e Marcela, e ` minha irm˜ L´
                                              a          a ılian.
iii




”Quis custodiet ipsos custodes?”
                        Juvenal
iv




Sum´rio
   a

Lista de figuras                          v

Resumo (Abstract)                        1

1 Introdu¸˜o
         ca                              2

2 Metodologia e tecnologias envolvidas   3

3 Solu¸˜o do problema
      ca                                 8

4 Conclus˜o
         a                               26

Gloss´rio
     a                                   27

Referˆncias Bibliogr´ficas
     e              a                    30
v




Lista de Figuras

 Figura 1: Dependˆncia entre os pacotes do Agenda Nutricional . . . . . . . . . . 12
                 e
 Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios . . . . . . . . . . 13
 Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia . . . . . . . . 14
 Figura 4: Modelo de dados para os produtos e nutrientes . . . . . . . . . . . . . 15
 Figura 5: Exemplo de rela¸˜o entre as informa¸˜es, no modelo de dados proposto 15
                          ca                  co
 Figura 6: Agenda Nutricional: Controle de m´ ltiplas janelas internas . . . . . . 17
                                            u
 Figura 7: Agenda Nutricional: Janela padr˜o de consulta de registros . . . . . . 18
                                          a
 Figura 8: JMPS: O problema do prot´tipo: quadro inicial do Simplex . . . . . . 19
                                   o
 Figura 9: JMPS: O problema do prot´tipo: primeira itera¸ao . . . . . . . . . . . 20
                                   o                    c˜
 Figura 10: JMPS: O problema do prot´tipo: pivoteamento da linha . . . . . . . 20
                                    o
 Figura 11: JMPS: O problema do prot´tipo: ajuste das demais linhas da tabela
                                    o                                                 20
 Figura 12: JMPS: O problema do prot´tipo: primeira itera¸˜o finalizada . . . . 20
                                    o                    ca
 Figura 13: JMPS: O problema do prot´tipo: resultado ´timo . . . . . . . . . . . 20
                                    o                o
 Figura 14: JMPS: Solu¸˜o do problema atrav´s do m´todo Gr´fico . . . . . . . . 21
                      ca                   e      e       a
 Figura 15: JMPS: Edi¸˜o de problema de otimiza¸˜o . . . . . . . . . . . . . . . 21
                     ca                        ca
 Figura 16: Estrutura interna do sistema JMPS . . . . . . . . . . . . . . . . . . . 22
 Figura 17: Pacote calculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1


Resumo (Abstract)

   Eficiˆncia e confiabilidade de resultado s˜o as duas caracter´
       e                                   a                  ısticas procuradas com
maior frequˆncia nos softwares atualmente. Desenvolvedores de software est˜o cada vez
           e                                                              a
mais preocupados em melhorar estes dois pontos nos produtos que oferecem. Para sistemas
que trabalham com volume grande de dados e com necessidade de apresentar resposta
r´pida e precisa ao usu´rio, os desenvolvedores est˜o ` procura de algoritmos que tragam
 a                     a                           a a
esta caracter´
             ıstica.
   Os algoritmos matem´ticos que oferecem a modelagem de dados est˜o sendo cada vez
                      a                                           a
mais procurados para atingir este objetivo. Este trabalho aplica o algoritmo Simplex em
uma situa¸˜o comum do cotidiano de uma software house, mostrando a usabilidade da
         ca
modelagem matem´tica para solu¸˜o de problemas complexos.
               a              ca
2


1 Introdu¸˜o
         ca

   Todos os dias vemos novas tecnologias surgirem, se aprimorarem. Com elas vˆm o ciclo
                                                                             e
vicioso de aprimoramento de hardware e software. Novas teorias de todas as disciplinas da
´rea de exatas s˜o utilizadas na computa¸˜o, auxiliando neste aprimoramento cont´
a               a                       ca                                      ınuo.
   O software faz parte de uma tendˆncia de evolu¸˜o constante. A Engenharia de
                                   e             ca
software est´ constantemente se aperfei¸oando, de forma a trazer cada vez mais t´cnica
            a                          c                                        e
e m´todos eficazes para melhorar o desempenho tanto do processo de desenvolvimento
   e
quanto do software em si.
   Desta forma, a matem´tica e a inform´tica se unem para trazer o que existe de melhor
                       a               a
em cada e traduzir tudo isto em um software de qualidade, que atenda n˜o somente as
                                                                      a
necessidades do usu´rio, mas que utilize todo o potencial de hardware dispon´ atual-
                   a                                                        ıvel
mente. Funda¸˜es como a Computational Infrastructure for Operation Research , COIN-
            co
OR, trabalham na cria¸˜o e dissemina¸˜o de solu¸˜es computacionais para problemas
                     ca             ca         co
matem´ticos.
     a
   Este trabalho prop˜e demonstrar em uma aplica¸˜o comercial, focada na ´rea de sa´ de,
                     o                          ca                       a         u
mais especificamente em nutri¸˜o e diet´tica, o uso de m´todos e modelos matem´ticos
                            ca        e                e                     a
simples para solucionar problemas de c´lculos complexos; neste caso, otimiza¸˜o de prob-
                                      a                                     ca
lemas lineares.
   A proposta ´ desenvolver um sistema que se utilize de um m´todo de otimiza¸˜o
              e                                              e               ca
linear, o m´todo Simplex, para calcular a quantidade de n produtos compondo uma
           e
dieta nutricional, de acordo com a composi¸˜o nutricional de cada produto selecionado
                                          ca
para a dieta. O sistema utiliza dietas de referˆncia, que s˜o compostas por nutrientes em
                                               e           a
quantidades espec´
                 ıficas, para calcular as quantidades de cada produto necess´rios a suprir
                                                                           a
a ingest˜o m´
        a   ınima ou m´xima de nutrientes da dieta de referˆncia.
                      a                                    e
   Este trabalho est´ organizado em dois cap´
                    a                       ıtulos: Metodologia e tecnologias envolvidas,
que descreve o modelo matem´tico escolhido (Simplex) e as tecnologias utilizadas no
                           a
desenvolvimento do sistema; Solu¸˜o do Problema, subdividindo em se¸˜es que descrevem
                                ca                                 co
o problema selecionado no projeto, a metodologia utilizada para desenvolver o sistema e
integrar os componentes selecionado. O trabalho ainda conta com Introdu¸˜o, Conclus˜o,
                                                                       ca          a
Gloss´rio e Referˆncias Bibliogr´ficas.
     a           e              a
3


2 Metodologia e tecnologias envolvidas


2.1 O problema

   A populariza¸˜o do computador pessoal trouxe consigo uma necessidade de evolu¸˜o
               ca                                                               ca
do hardware e do software que atingiu largamente todos os n´
                                                           ıveis da sociedade - desde
o ambiente dom´stico, com o largo uso do microcomputador para jogos e home office,
              e
at´ o ambiente do escrit´rio - independente do setor econˆmico da empresa (ind´ stria,
  e                     o                                o                    u
com´rcio e governo). Com a constante adapta¸˜o do software aos servi¸os dispon´
   e                                       ca                       c         ıveis e
dos servi¸os aos softwares, criou-se um mercado virtualmente infinito para a produ¸˜o de
         c                                                                       ca
software.
   Atualmente, o mercado de software personalizado - software desenvolvido para um fim
espec´
     ıfico, em contrapartida ao software de prateleira, feito com caracter´
                                                                         ısticas gen´ricas
                                                                                    e
e distribu´ em larga escala - tem apresentado um crescimento muito atrativo, que se
          ıdo
mostra com o grande n´ mero de empresas desenvolvedoras de software que surgem a cada
                     u
ano. Com o mercado aberto ` novos sistemas e a competi¸˜o causada pelo n´ mero de
                          a                           ca                u
empresas especializadas, possuir um diferencial ´ importante.
                                                e
   Os softwares produzidos atualmente, de forma personalizada, possuem como requisitos
as regras do neg´cio do cliente, suas necessidades particulares. Sistemas de controle tˆm
                o                                                                      e
dominado a demanda no mercado, pois s˜o servi¸os cruciais dentro das empresas, e estes
                                     a       c
sistemas demandam, muitas vezes, c´lculos complexos envolvendo m´ ltiplas vari´veis. A
                                  a                             u             a
demanda constante por performance e velocidade de resposta, aliada ` press˜o de cumprir
                                                                   a      a
cronogramas apertados e o baixo conhecimento da equipe de desenvolvimento em solu¸˜es
                                                                                 co
computacionais complexas, levam ` utiliza¸˜o de c´lculos aproximados com altas taxas
                                a        ca      a
de erro.


2.2 Programa¸˜o linear e m´todo Simplex
            ca            e

   A programa¸˜o linear apresenta uma solu¸˜o de baixo custo computacional e com
             ca                           ca
redu¸˜o da margem de erro para problemas de otimiza¸˜o com m´ ltiplas vari´veis, como
    ca                                             ca       u             a
´ o caso de in´ meros sistemas de controle - almoxarifado, finan¸as, produ¸˜o, etc.
e             u                                                c         ca
4


   A programa¸˜o linear consiste em problemas de otimiza¸ao que utilizam fun¸˜es lin-
             ca                                         c˜                  co
eares. Existem casos t´
                      ıpicos de programa¸˜o linear, como o Problema de Transporte,
                                        ca
que foi utilizado inicialmente para determinar o menor custo de transporte entre diversas
f´bricas de um produto e diversos centros consumidores [6]. Situa¸˜es t´
 a                                                               co ıpicas de aplica¸˜o
                                                                                    ca
da programa¸˜o linear s˜o os casos onde se deseja, por exemplo, maximizar o lucro de
           ca          a
uma empresa, minimizar o custo de produ¸˜o de um determinado produto, etc.
                                       ca
   A programa¸˜o linear utiliza-se de um modelo matem´tico composto por uma fun¸˜o
             ca                                      a                         ca
objetiva e de restri¸˜es t´cnicas representadas por inequa¸˜es. Por exemplo:
                    co    e                               co

                                      Lucro = 2x1 + 3x2                             (2.1)
                                                
                                  
                                  
                                  
                                                 
                                                     4x1 + 3x2 ≤ 10
                                  
                                  
                                        t´cnicas 
                                          e
                                                       6x1 − x2 ≥ 20
                                  
                                  
                                                
                     Restric˜es
                            o                                                      (2.2)
                                                                x1 ≥ 0
                                  
                                                           
                                                            
                                  
                                      de n˜o negatividade
                                          a
                                  
                                  
                                  
                                  
                                                                x2 ≥ 0
                                  
                                                           
                                                            

   Neste modelo, encontramos os seguintes elementos:

   • Vari´veis de decis˜o:
         a             a          s˜o as vari´veis que representam as decis˜es a serem
                                   a         a                             o
     tomadas. Por exemplo, em uma f´brica onde se deseja otimizar a produ¸˜o para
                                   a                                     ca
     maximizar o lucro, as vari´veis de decis˜o representar˜o os produtos que ela produz.
                               a             a             a
     No exemplo acima, as vari´veis de decis˜o s˜o x1 e x2 .
                              a             a a

   • Fun¸˜o objetivo: representa o objetivo do modelo. No nosso exemplo, maximizar
        ca
     o lucro.

   • Restri¸˜es:
           co       s˜o representadas por inequa¸˜es lineares e identificam as situa¸˜es
                     a                          co                                 co
     que imp˜em limita¸˜es ao modelo. Existem dois tipos de restri¸˜es: t´cnicas, por
            o         co                                          co     e
     exemplo, quantidades m´
                           ınimas que devem ser produzidas de um produto; e de n˜o
                                                                                a
     negatividade, que impedem que os valores encontrados para as vari´veis de decis˜o
                                                                      a             a
     sejam negativos (n˜o ´ poss´ produzir -20 pe¸as).
                       a e      ıvel             c

   Para solucionar os problemas de programa¸˜o linear existem diversos algoritmos defini-
                                           ca
dos, como Gauss-Jordan e Simplex. Estes algoritmos e suas variantes definem passos e
pontos de parada para o c´lculo de problemas de otimiza¸˜o. Neste trabalho, optamos
                         a                             ca
por utilizar o algoritmo Simplex para solucionar os problemas de otimiza¸˜o propostos.
                                                                        ca
5


       O Simplex ´ o algoritmo b´sico da programa¸˜o linear. Seu objetivo ´ transformar
                 e              a                ca                       e
uma matriz fornecida em outra padronizada, de acordo com a necessidade do problema.
A matriz fornecida ´ criada a partir das equa¸˜es geradas de otimiza¸˜o e restri¸˜es.
                   e                         co                     ca          co
Utilizando o exemplo anterior, a matriz inicial ficaria:
                                                             
                                              4     3      10 
                                                                                                (2.3)
                                                 6 −1 20

       O Simplex soluciona o problema atrav´s de in´ meras itera¸˜es, onde a cada itera¸˜o
                                           e       u            co                     ca
ocorre o pivotamento da matriz. Terminam-se as itera¸˜es quando a matriz atinge o
                                                    co
estado ´timo, ou seja, quando atingem-se valores para as vari´veis dentro de faixas pr´-
       o                                                     a                        e
estabelecidas. Por exemplo, num problema de maximiza¸˜o, quando todas as vari´veis
                                                    ca                       a
encontraram-se com valores maiores ou iguais a zero, identifica uma matriz ´tima.
                                                                          o
       Para exemplificar o funcionamento do algoritmo Simplex, usaremos o problema[7]:


                                         minx1 + 2x2
                                                   x1 + x2 ≤ 2
                                                   x1 − x2 ≥ 1                                    (2.4)
                                         s.a.
                                                   x1 ≥ 0
                                                   x2 ≥ 0
       Colocando-o na forma normal1 :


                                      minx1 + 2x2
                                             x1 + x2 + x3 = 2
                                             x1 − x2 − x4 = 1
                                             x1 ≥ 0                                               (2.5)
                                      s.a.
                                             x2 ≥ 0
                                             x3 ≥ 0
                                             x4 ≥ 0
       Multiplicando a equa¸˜o de restri¸˜o x1 - x2 - x4 = 1 por -1, obt´m-se uma solu¸˜o
                           ca           ca                              e             ca
inicial, cuja matriz ´ identidade.
                     e
   1
       A forma normal da equa¸ao linear implica em transformar a inequa¸ao em uma equa¸ao, ou seja,
                             c˜                                        c˜             c˜
eliminar os sinais de desigualdade, acrescentando vari´veis novas que complementem a solu¸ao da equa¸ao.
                                                      a                                  c˜         c˜
Tamb´m conhecida por forma canˆnica.
    e                         o
6


                                            x1        x2        x3        x4        -z
                                  x3        1         1         1         0         0         2
                                  x4        -1        1         0         1         0         -1
                                  -z        1         2         0         0         1         0

   Por´m, esta solu¸˜o n˜o ´ admiss´
      e            ca a e          ıvel, pois b2 ≤ 0:
                                                                         
                                                                     0 
                                                  p=                                                   (2.6)
                                                            
                                                                          
                                                                 −1
   Introduzindo p como vari´vel x0 na nossa matriz, obtemos:
                           a

                                       x1        x2        x3        x4        x0        -z
                             x3        1         1         1         0         0         0         2
                             x4        -1        1         0         1         -1        0         -1
                             -z        1         2         0         0         0         1         0

   Efetua-se a troca da vari´vel x0 pela x4 , pois esta ´ a que possui valor b negativo.
                            a                           e
Obt´m-se o quadro:
   e

                                       x1        x2        x3        x4        x0        -z
                             x3        1         1         1         0         0         0         2
                             x0        1         -1        0         -1        1         0         1
                             -z        1         2         0         0         0         1         0

   Neste quadro, observa-se que x0 = - x1 + x2 + x4 + 1 . Sendo assim, a vari´vel que
                                                                             a
deve ser escolhida para entrar na base, no lugar de x0 , ´ aquela que tiver o coeficiente
                                                         e
mais positivo na linha da vari´vel x0 . No nosso caso, esta vari´vel ´ a x1 .
                              a                                 a    e
   Com esta troca, chegamos ao resultado:

                                       x1        x2        x3        x4        x0        -z
                             x3        0         2         1         1         -1        0         1
                             x1        1         -1        0         -1        1         0         1
                             -z        0         3         0         1         -1        1         -1

   O resultado ´timo ´ alcan¸ado quando n˜o existem resultados negativos na linha do
               o     e      c            a
z. Note os valores das vari´veis: x1 =0; x2 =3; x3 =0; x4 =1.
                           a
7


2.3 Arcabou¸o tecnol´gico
           c        o

       O conjunto tecnol´gico mais utilizado atualmente no desenvolvimento de software
                        o
tem variado entre os baseados em Java e .NET. Adotamos o conjunto para Java neste
trabalho. A escolha pela tecnologia Java tem fundamento no fato de todo o kit necess´rio
                                                                                    a
para desenvolver e manter o software ser gratuito e estar dispon´
                                                                ıvel na internet para
aquisi¸˜o, incluindo toda a documenta¸˜o necess´ria para seu entendimento.
      ca                             ca        a
       Foi utilizado o conjunto de ferramentas:

   • Linguagem de programa¸˜o: Java SDK 5.0
                          ca

                                                   2
   • Banco de dados: Compat´ JDBC
                           ıvel

   • Infraestrutura de desenvolvimento:

            – IDE: Eclipse 3.2

            – Framework de banco de dados: Hibernate 3.0

            – Gera¸˜o de relat´rios: Jasper Reports 1.2.8
                  ca          o

            – Projeto de relat´rios: iReport 1.2.8
                              o

            – Controle de vers˜o: CVS
                              a

       O software produzido neste trabalho ser´ distribu´ gratuitamente, sob licen¸a GPL,
                                              a         ıdo                       c
atrav´s do servi¸o de hospedagem de software SourceForge.net.
     e          c




   2
       Devido ao uso do Hibernate nos servi¸os de persistˆncia, utilizamos os bancos de dados PostgreSQL
                                           c             e
8.2 e Microsoft SQL Server 2003 nos testes de desenvolvimento.
8


3 Solu¸˜o do problema
      ca


3.1 O problema escolhido

   O objetivo inicial deste trabalho ´ demonstrar a aplica¸ao de m´todos matem´ticos
                                     e                    c˜      e           a
no cotidiano do desenvolvimento de software. A programa¸ao linear, aplicada com o
                                                       c˜
m´todo Simplex, ´ um dos mecanismos com maior potencial de aplica¸˜o, e por isto, foi
 e              e                                                ca
o escolhido.
   O problema selecionado refere-se a um problema de nutri¸˜o. Problemas de nutri¸˜o e
                                                          ca                     ca
diet´tica s˜o constantemente encontrados em livros de programa¸˜o linear nos exemplos e
    e      a                                                  ca
exerc´
     ıcios, geralmente de forma simplificada, usando duas ou at´ no m´ximo trˆs vari´veis.
                                                              e     a       e      a
Em geral, estes problemas envolvem dois produtos nutricionais (vitaminas, prote´
                                                                               ınas,
minerais) e deseja minimizar o custo de uma dieta.
   O problema proposto neste trabalho ´ mais complexo, j´ que envolve solu¸˜o com-
                                      e                 a                 ca
putacional implementada em um sistema, o que nos d´ uma margem de c´lculo maior,
                                                  a                a
ampliando o n´ mero de vari´veis que poderemos manipular.
             u             a
   A proposta ´ gerar uma dieta nutricional, baseada em componentes nutricionais b´sicos
              e                                                                   a
e uma dieta de referˆncia (por exemplo, a dieta m´
                    e                            ınima de 2500 calorias, indicada em
qualquer produto consum´
                       ıvel), utilizando a tabela nutricional de produtos consum´
                                                                                ıveis in-
dicada pelo nutricionista ou paciente usu´rio do sistema. O sistema implementa o m´todo
                                         a                                        e
Simplex e realiza os c´lculos a partir da dieta de referˆncia selecionada no momento da
                      a                                 e
constru¸˜o da dieta nutricional desejada.
       ca
   Na proposta n˜o est´ incluso tratamento de custo, peso, altura, idade ou quadro cl´
                a     a                                                              ınico
do paciente, ou seja, o sistema n˜o se prop˜e a utilizar-se de heur´
                                 a         o                       ısticas cl´
                                                                             ınicas para
selecionar a melhor dieta para um paciente. O objetivo ´ gerar uma dieta utilizando-se de
                                                       e
uma dieta de referˆncia, criada previamente, e de uma lista de produtos desejados para
                  e
consumo pelo paciente. Os produtos ser˜o as vari´veis do problema e as restri¸˜es ser˜o
                                      a         a                            co      a
geradas a partir da dieta de referˆncia. O fator de minimiza¸˜o ou maximiza¸˜o da dieta
                                  e                         ca             ca
ser´ fornecido, tamb´m, pela dieta de referˆncia - representado por um dos componentes
   a                e                      e
desta dieta. Por exemplo, numa dieta recomendada de 2500 calorias/dia, o elemento de
referˆncia ´ a caloria. Neste caso, nosso problema ser´ de maximiza¸˜o, j´ que esta dieta
     e     e                                          a            ca a
9


regula uma ingest˜o m´
                 a   ınima de 2500 calorias por dia. O sistema ir´ calcular a quantidade
                                                                 a
m´
 ınima de cada produto que dever´ ser consumida pelo paciente, a fim de atingir as 2500
                                a
calorias m´
          ınimas desejadas.


3.2 An´lise e solu¸˜o
      a           ca

   Existem poucos componentes dispon´
                                    ıveis prontos que implementem algoritmos de
otimiza¸˜o. Encontramos o componente CLP que implementa diversos algoritmos Sim-
       ca
plex linear e n˜o-linear, como o Simplex Primal, Dual Simplex, Simplex n˜o linear, entre
               a                                                        a
outros. O componente CLP foi desenvolvido utilizando a linguagem de programa¸˜o C++
                                                                            ca
e ´ distribu´ gratuitamente pela Computational Infrastructure for Operations Research
  e         ıdo
(COIN-OR), uma funda¸˜o sem fins lucrativos para ciˆncia e educa¸˜o, cuja miss˜o ´ a de
                    ca                            e            ca            a e
criar e disseminar o conhecimento relacionado a todos os aspectos de pesquisa operacional
computacional [2]. O componente CLP foi implementado com o objetivo de ser utilizado
largamente em aplica¸˜es comerciais ou n˜o.
                    co                  a
   Outro componente pesquisado foi o GLPK - GNU Linear Programming Kit [5], de-
senvolvido em C Ansi. O GLPK implementa os m´todos Simplex (primal e dual), mas
                                            e
foi descartado devido ` tecnologia utilizada em seu desenvolvimento.
                      a
   A escolha pelo arcabou¸o tecnol´gico guiou a escolha do componente a ser utilizado,
                         c        o
o que descartou o uso do CLP pela complexidade da integra¸˜o via chamada nativa de
                                                         ca
bibliotecas C++ no Java, o que tornaria o custo do projeto mais alto (aumento signi-
ficativo do prazo para desenvolvimento) e reduziria a manutenibilidade do software final,
pois a integra¸˜o de m´ ltiplas linguagens, al´m de dificultar a manuten¸˜o do software
              ca      u                       e                        ca
pelo pr´prio fato de mesclar duas tecnologias diferentes, impactaria na performance final
       o
do sistema, pois existe queda de performance computacional quando se realiza chamadas
nativas, mesmo que ambos os lados do programa estejam muito bem desenvolvidos, e
tenham considerado todos os pontos poss´
                                       ıveis de otimiza¸˜o do desempenho de software.
                                                       ca
O GLPK foi desconsiderado pela mesma raz˜o e com o agravante de que n˜o foi desen-
                                        a                            a
volvido utilizando o paradigma da orienta¸˜o a objetos, o que aumentaria a dificuldade
                                         ca
de integra¸˜o com o Java.
          ca
   Devido ao fato do objetivo n˜o ser a implementa¸˜o do m´todo Simplex e, sim, a
                               a                  ca      e
demonstra¸˜o de seu uso, pesquisamos componentes desenvolvidos em Java, similares
         ca
10


ao CLP. N˜o foi poss´
         a          ıvel localizar componentes, por´m, localizamos um desenvolvedor
                                                   e
que realizou um projeto acadˆmico similar ao proposto neste trabalho, utilizando Java.
                            e
Michael Bochenek desenvolveu o applet Java Mathematical Programming Suite [1], por´m,
                                                                                  e
pelo curto prazo estabelecido para o projeto, somente foi implementado o m´todo Simplex
                                                                          e
e o m´todo Gr´fico para resolu¸˜o de problemas de programa¸˜o linear. Em contato com
     e       a               ca                          ca
Bochenek, os fontes do applet foram cedidos para serem adaptados a este projeto.
   O applet JMPS utiliza o m´todo Simplex para solucionar equa¸˜es prontas ou qualquer
                            e                                 co
equa¸˜o informada pelo usu´rio. Iremos utilizar o applet fornecido por Bochenek para
    ca                    a
demonstrar o uso do modelo Simplex proposto neste trabalho e ilustrar as itera¸˜es do
                                                                              co
Simplex, al´m de demonstrar a estrutura interna implementada, as adapta¸˜es necess´rias
           e                                                           co         a
para ser utilizado neste projeto e o desempenho trazido ao c´lculo final proposto.
                                                            a

3.2.1 Criando o sistema Agenda Nutricional
   O sistema Agenda Nutricional foi projetado para ilustrar o uso do m´todo Simplex no
                                                                      e
c´lculo da dieta nutricional. O objetivo do sistema Agenda Nutricional ´ o de fornecer fer-
 a                                                                     e
ramentas que auxiliem na prescri¸˜o de uma dieta nutricional. Seus principais elementos
                                ca
s˜o:
 a

  1. Cadastro de Produtos:           permite manter o cadastro de todos os produtos (ali-
       mentos) que estar˜o dispon´
                        a        ıveis para o paciente compor sua dieta.

  2. Cadastro de Nutrientes:          tabela de dom´
                                                   ınio, n˜o ´ poss´ alterar a lista de
                                                          a e      ıvel
       nutrientes existentes atrav´s da aplica¸˜o, por´m o sistema fornece uma lista de
                                  e           ca      e
       nutrientes padronizada [8].

  3. Cadastro de Nutricionistas: tabela de dom´
                                              ınio; o objetivo ´ possuir informa¸˜es
                                                               e                co
       do nutricionista necess´rias ` sua identifica¸˜o. A primeira fase do desenvolvimento
                              a     a              ca
       n˜o inclui o cadastro de nutricionistas; esta funcionalidade ser´ implementada em
        a                                                              a
       fases posteriores.

  4. Cadastro de Dietas de referˆncia: permite manter o cadastro das dietas que
                                e
       ser˜o utilizadas como referˆncia na prescri¸˜o ao paciente - uma dieta de referˆncia
          a                       e               ca                                  e
       ´ a dieta de 2500 calorias di´rias para um adulto.
       e                            a
11


  5. Cadastro de Pacientes:        o cadastro de pacientes permite manter informa¸˜es
                                                                                 co
     m´
      ınimas necess´rias ` identifica¸˜o do paciente e seu hist´rico cl´
                   a     a          ca                        o       ınico.

  6. Prescri¸˜o de dietas:
            ca                  permite ao nutricionista prescrever uma dieta a um pa-
     ciente cadastrado; o sistema utiliza o m´todo simplex para, implicitamente, calcular
                                             e
     as quantidades de cada produto selecionado pelo nutricionista, de acordo com a
     quantidade m´
                 ınima ou m´xima de cada nutriente indicada na dieta de referˆncia,
                           a                                                 e
     otimizando de acordo com o produto de referˆncia da mesma.
                                                e

   O Agenda Nutricional utiliza um sistema de banco de dados para armazenar as in-
forma¸˜es, por´m n˜o ´ dependente de tecnologia de banco de dados, ou seja, o usu´rio
     co       e   a e                                                            a
pode escolher um gerenciador de banco de dados da sua preferˆncia para utilizar o sistema
                                                            e
Agenda Nutricional. O sistema foi projetado de forma a ser totalmente independente de
plataforma e de gerenciador de banco de dados. Sua interface foi desenhada para que se
adeque `s configura¸˜es locais do usu´rio. Todas as configura¸˜es b´sicas do sistema po-
       a          co                a                      co    a
dem ser feitas atrav´s de arquivos texto, edit´veis em qualquer editor de texto dispon´
                    e                         a                                       ıvel
no computador do usu´rio.
                    a
   Outra caracter´
                 ıstica importante do sistema ´ a tradu¸˜o para m´ ltiplos idiomas. O
                                              e        ca        u
sistema foi projetado para permitir a tradu¸˜o de todos os termos para qualquer idioma.
                                           ca
Para isto, existe um arquivo de idiomas onde os termos s˜o categorizados. A vers˜o
                                                        a                       a
principal do sistema foi feita completamente em portuguˆs brasileiro, por´m, havendo a
                                                       e                 e
necessidade de tradu¸˜o para outro idioma, digamos, inglˆs, basta criar uma c´pia do
                    ca                                  e                    o
arquivo de idiomas original, traduzir os termos e configurar o sistema para o novo idioma;
ao reiniciar a aplica¸˜o, o sistema identifica o idioma selecionado e utiliza o arquivo de
                     ca
idiomas adequado.
   A arquitetura do sistema ´ muito simples, por´m utiliza-se de quatro camadas: ap-
                            e                   e
resenta¸˜o, servi¸os, neg´cios e persistˆncia. As camadas est˜o distribu´
       ca        c       o              e                    a          ıdas de forma a
reduzir a interdependˆncia entre elas, assim:
                     e
12




                        Figura 1: Dependˆncia entre os pacotes do Agenda Nutricional
                                        e




   A n´
      ıvel de implementa¸˜o, as chamadas entre as camadas ocorrem no sentido da
                        ca
camada de apresenta¸˜o para a camada de persistˆncia, ou seja, as classes de apresenta¸˜o
                   ca                          e                                      ca
fazem chamadas `s classes de servi¸os, mas n˜o ocorre o inverso - servi¸os chamando
               a                  c         a                          c
apresenta¸˜o. Tamb´m n˜o existe liga¸˜o entre as camadas n˜o adjacentes, ou seja,
         ca       e   a             ca                    a
a camada de apresenta¸˜o desconhece a existˆncia da camada de neg´cios. Assim, as
                     ca                    e                     o
camadas somente possuem comunica¸˜o com as duas camadas adjacentes, o que facilita
                                ca
a manuten¸˜o, pois ´ poss´ isolar um problema encontrado em uma camada.
         ca        e     ıvel
   Os erros ocorridos nas camadas mais internas s˜o encaminhados `s camadas mais
                                                 a               a
externas atrav´s de exce¸˜es e estas exce¸˜es s˜o tratadas somente na camada de apre-
              e         co               co    a
senta¸˜o, onde o usu´rio toma conhecimento delas atrav´s de mensagens padronizadas.
     ca             a                                 e
   As camadas de servi¸os e de neg´cios est˜o intimamente ligadas. Devido ` baixa com-
                      c           o        a                              a
plexidade da aplica¸˜o, a camada de servi¸os foi simplificada, sendo apenas uma camada
                   ca                    c
de troca de mensagens, basicamente. Entretanto, a camada de servi¸os possui um forte
                                                                 c
acoplamento com a camada de apresenta¸˜o. Por exemplo, escolheu-se apresentar os resul-
                                     ca
tados das consultas em forma de tabela na camada de apresenta¸˜o. Deste modo, decidiu-
                                                             ca
se centralizar a cria¸˜o desta tabela na camada de servi¸os para que houvesse garantia de
                     ca                                 c
que a tabela criada sempre fosse a mesma, com as mesmas colunas, comportamento, etc.
Assim, o servi¸o implementado gera uma instˆncia do objeto javax.swing.JTable - tipica-
              c                            a
mente um elemento de apresenta¸˜o - com os dados resultantes da consulta solicitada na
                              ca
camada de apresenta¸˜o.
                   ca
13




                        Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios




   O acesso ao banco de dados ´ feito atrav´s do framework Hibernate, que faz a comu-
                              e            e
nica¸˜o entre a aplica¸˜o e o banco de dados. Al´m de trazer a liberdade de tecnologia -
    ca                ca                        e
o Hibernate utiliza conex˜es JDBC ao banco de dados, permitindo que o acesso seja feito
                         o
a qualquer gerenciador que possua driver JDBC dispon´ -, o Hibernate traz agilidade
                                                    ıvel
na constru¸˜o da aplica¸˜o pois ele cria todas as consultas e comandos de manipula¸˜o de
          ca           ca                                                         ca
dados utilizando uma adapta¸˜o pr´pria do SQL chamada HSQL. Ao desenvolvedor basta
                           ca    o
criar os arquivos de mapeamento l´gico do banco de dados, indicando quais vari´veis da
                                 o                                            a
aplica¸˜o est˜o ligadas a quais campos e tabelas do banco. Como o Hibernate somente
      ca     a
utiliza o arquivo de mapeamento, a aplica¸˜o se torna independente de tecnologia de
                                         ca
banco de dados, sendo necess´rio somente indicar em um arquivo de configura¸˜o pr´prio
                            a                                             ca    o
do Hibernate qual o driver JDBC, o servidor onde o banco de dados est´ instalado e o
                                                                     a
usu´rio e senha de acesso.
   a
14




                       Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia



   A estrutura de c´lculo do m´todo Simplex foi embutida na camada de neg´cios, j´ que
                   a          e                                          o       a
o c´lculo faz parte da l´gica interna e do conjunto de regras do sistema. Veremos esta
   a                    o
estrutura com mais detalhes na se¸˜o Adaptando o applet para o sistema Agenda
                                 ca
Nutricional e vice-versa.
   Com a arquitetura definida, o componente de c´lculo do Simplex selecionado, iniciou-
                                               a
se a pesquisa pela fonte de dados. A maior dificuldade foi encontrar uma fonte de dados
confi´vel, pois para o funcionamento adequado do sistema, ´ necess´rio que a tabela
    a                                                    e       a
nutricional dos produtos esteja correta. O departamento de nutri¸˜o da Universidade
                                                                ca
de S˜o Paulo (USP) [4] disponibiliza consulta online ` tabela nutricional dos alimentos
    a                                                a
nacionais e de consumo nacional. Por´m, n˜o h´ possibilidade de fazer c´pia completa do
                                    e    a a                           o
banco de dados. O objetivo era o de localizar uma base de dados confi´vel que pudesse
                                                                    a
ser importada para o Agenda Nutricional sem perda de informa¸˜o e sem impactar no
                                                            ca
cronograma estabelecido para o projeto. Em prosseguimento ` pesquisa, localizamos o
                                                          a
Banco de Composi¸˜o dos Alimentos do Departamento de Agricultura dos Estados Unidos
                ca
- USDA. O USDA disponibiliza o National Nutrient Database for Standard Reference ,
15


que pode ser utilizado gratuitamente. Este banco est´ dispon´ em formatos texto e do
                                                    a       ıvel
Microsoft Access. O Agenda Nutricional utilizou o Standard Reference 19, de agosto de
2006 [8].
   Para modelar o banco de dados, foi utilizado o banco do USDA como base. Neste
modelo temos os elementos Nutriente, Produto e Unidade de Medida. Cada nutriente
possui uma unidade de medida padr˜o. Um produto ´ composto por diversos nutrientes;
                                 a              e
a quantidade de cada nutriente ´ indicada a partir de uma quantidade de produto, numa
                               e
determinada unidade de medida.




                             Figura 4: Modelo de dados para os produtos e nutrientes




   Por exemplo, uma unidade de abacaxi cont´m 476 kcal.
                                           e




                  Figura 5: Exemplo de rela¸ao entre as informa¸oes, no modelo de dados proposto
                                           c˜                  c˜




   A partir do modelo proposto para o sistema Agenda Nutricional, foi desenvolvido um
m´todo de migra¸˜o de dados das tabelas do Microsoft Access para o banco de dados do
 e             ca
sistema. O processo ´ o descrito:
                    e
16


   • Criaram-se as consultas desejadas no MS-Access, de acordo com os dados que deseja-
     se importar. Por exemplo, foi criada uma consulta que retorna uma lista dos pro-
     dutos dispon´
                 ıveis e sua composi¸˜o.
                                    ca

   • As consultas foram executadas e os resultados salvos em arquivos textos tabulados.

   • Desenvolveu-se, em Java, uma ferramenta de migra¸˜o que lˆ os arquivos textos
                                                     ca       e
     tabulados e gera os comandos SQL para inser¸˜o dos dados no banco de dados do
                                                ca
     sistema Agenda Nutricional, granvando em arquivos texto estes comandos.

   • Os arquivos SQL foram executados no gerenciador de banco de dados escolhido e
     os dados importados com sucesso.

   Os pr´ximos passos, seguindo o cronograma estabelecido para o projeto, foram im-
        o
plementar todas as funcionalidades do sistema que n˜o dependessem do c´lculo que seria
                                                   a                  a
realizado pelo applet - que ainda necessitava adapta¸˜es. Para a apresenta¸˜o, optamos
                                                    co                    ca
por utilizar as ferramentas do Java Swing. Isto trouxe independˆncia de plataforma `
                                                               e                   a
aplica¸˜o e reduziu a necessidade de adapta¸˜es para os diversos sistemas operacionais
      ca                                   co
que o usu´rio pode utilizar.
         a
   A interface gr´fica foi desenvolvida de forma a utilizar os padr˜es de interface conheci-
                 a                                                o
dos em aplica¸˜es comerciais. O uso de m´ ltiplas janelas independentes foi desconsiderado
             co                         u
pois a maioria do p´ blico est´ acostumada a aplica¸˜es que gerenciam janelas internas.
                   u          a                    co
Por isto, a camada de apresenta¸˜o foi desenhada de forma a utilizar janelas internas na
                               ca
aplica¸˜o - modelo MDI. Isto trouxe maior controle das janelas e ampliou o n´ mero de
      ca                                                                    u
janelas que o usu´rio pode manter abertas em seu campo visual. A aparˆncia utiliza o vi-
                 a                                                   e
sual padr˜o do sistema operacional utilizado pelo usu´rio, evitando o desconforto causado
         a                                           a
pela mudan¸a brusca de padr˜o de telas.
          c                a
17




                      Figura 6: Agenda Nutricional: Controle de m´ ltiplas janelas internas
                                                                 u




   Foram utilizados padr˜es de projeto (Design patterns) que facilitaram a implementa¸˜o
                        o                                                            ca
de diversas caracter´
                    ısticas da interface. Todas as janelas implementam o padr˜o Singleton,
                                                                             a
n˜o permitindo m´ ltiplas instˆncias da mesma janela durante a execu¸˜o do sistema.
 a              u             a                                     ca
Desta forma, economiza-se mem´ria do computador, pois a m´quina virtual do Java
                             o                           a
consome muita mem´ria para construir a janela. Assim, utilizamos o padr˜o Composite
                 o                                                     a
para armazenar as instˆncias das janelas e reduzir o tempo de abertura das mesmas.
                      a
   Os conceitos de Orienta¸˜o a Objetos foram aplicados amplamente, inclusive no de-
                          ca
senho da interface. Observando o pacote apresenta¸˜o, podemos notar o uso de abstra¸˜o,
                                                 ca                                ca
heran¸a e encapsulamento, que s˜o os trˆs pilares da orienta¸˜o a objetos.
     c                         a       e                    ca
   A classe abstrata apresentacao.adicionais.JanelaInterna implementa os padr˜es Sin-
                                                                             o
gleton e Composite. Ela cont´m referˆncia a todas as janelas abertas do sistema. Esta
                            e       e
classe gerencia todas as janelas internas da aplica¸˜o. Ela tamb´m ´ a classe m˜e de todas
                                                   ca           e e            a
as janelas de cadastro e consulta.
   No pacote apresentacao.consultas, possu´
                                          ımos uma classe abstrata ConsultaForm que
18


´ filha de apresentacao.adicionais.JanelaInterna e m˜e de todas as classes Consulta. Esta
e                                                  a
classe determina o leiaute padr˜o das janelas de consulta e todas as telas de consulta
                               a
herdam suas caracter´
                    ısticas.




                      Figura 7: Agenda Nutricional: Janela padr˜o de consulta de registros
                                                               a




   A ultima tarefa do projeto foi a adapta¸˜o do applet JMPS para realizar o c´lculo do
     ´                                    ca                                  a
m´todo Simplex, conforme pode ser visto nas se¸˜es seguintes.
 e                                            co


3.2.2 O funcionamento do Applet
   O sistema Java Mathematical Programming Suite - JMPS [1] ´ um sistema de com-
                                                            e
posi¸˜o muito simples. Bochenek n˜o utilizou arquiteturas complexas e n˜o utilizou-se
    ca                           a                                     a
de recursos como pacotes e estruturas mais complexas para organizar o sistema. Isto
dificultou o entendimento do software no in´
                                          ıcio, pois o sistema n˜o apresentava nenhuma
                                                                a
documenta¸˜o ou estrutura de referˆncia que pudesse ser utilizada.
         ca                       e
   Como o JMPS ´ um applet e n˜o foi desenvolvido como um componente reaproveit´vel,
               e              a                                                a
as camadas de neg´cio e apresenta¸˜o estavam mescladas, ou seja, n˜o havia separa¸˜o
                 o               ca                               a              ca
19


formal entre as a¸˜es de apresenta¸˜o e de neg´cio. Se observarmos a arquitetura pro-
                 co               ca          o
posta do Agenda Nutricional, veremos que existe completa separa¸˜o entre neg´cio e
                                                               ca           o
apresenta¸˜o, o que nos d´ liberdade para reutilizar a camada de neg´cios em outros pro-
         ca              a                                          o
jetos, sem necessidade de adapta¸˜es - por exemplo, se quisermos distribuir uma vers˜o
                                co                                                  a
web do Agenda Nutricional, basta reprojetar a camada de apresenta¸˜o e de servi¸os, pois
                                                                 ca            c
os dados ser˜o tratados da mesma maneira, independente da forma como estes dados ser˜o
            a                                                                       a
apresentados. Isto n˜o ocorre no sistema JMPS, por isto houve necessidade de grande
                    a
adapta¸˜o do c´digo, inclusive para n˜o prejudicar a arquitetura do Agenda Nutricional.
      ca      o                      a
   O primeiro passo foi entender como o JMPS funciona. Para isto, utilizamos as equa¸˜es
                                                                                    co
que ele traz de exemplo e inserimos tamb´m equa¸˜es retiradas da bibliografia de re-
                                        e      co
ferˆncia. Vamos apresentar neste trabalho a resolu¸˜o passo-a-passo de uma equa¸˜o
   e                                              ca                           ca
sugerida pelo sistema JMPS e, logo em seguida, a forma como ele monta uma nova
equa¸˜o, por exemplo, inserida pelo usu´rio - esta montagem ser´ utilizada internamente
    ca                                 a                       a
pelo Agenda Nutricional para iniciar o c´lculo.
                                        a
   Um dos exemplos propostos pelo JMPS ´ o seguinte problema de otimiza¸˜o:
                                       e                               ca


                                       maxz = 3x1 + 5x2
                                               x1 ≤ 4
                                               2x2 ≤ 12
                                                                                           (3.1)
                                       s.a. 3x1 + 2x2 ≤ 18
                                               x1 ≥ 0
                                               x2 ≥ 0
   O primeiro quadro do Simplex ´ montado:
                                e




                      Figura 8: JMPS: O problema do prot´tipo: quadro inicial do Simplex
                                                        o




   Escolhe-se a vari´vel que ser´ utilizada no pivotamento:
                    a           a
20




                             Figura 9: JMPS: O problema do prot´tipo: primeira itera¸˜o
                                                               o                    ca




   Realiza-se o pivotamento e os valores da linha s˜o recalculados (dividindo-se o valor
                                                   a
pelo valor do pivot):




                          Figura 10: JMPS: O problema do prot´tipo: pivoteamento da linha
                                                             o




   O restante da tabela ´ ajustado:
                        e




                   Figura 11: JMPS: O problema do prot´tipo: ajuste das demais linhas da tabela
                                                      o




   Finaliza-se a itera¸˜o:
                      ca




                        Figura 12: JMPS: O problema do prot´tipo: primeira itera¸ao finalizada
                                                           o                    c˜




   Nova itera¸˜o ´ feita, seguindo os mesmos passos da itera¸˜o anterior. Neste problema,
             ca e                                           ca
s˜o somente necess´rias duas itera¸˜es para chegar-se ao resultado ´timo:
 a                a               co                               o




                             Figura 13: JMPS: O problema do prot´tipo: resultado otimo
                                                                o                ´
21


   O sistema tamb´m oferece a resolu¸˜o atrav´s do m´todo Gr´fico, para o mesmo
                 e                  ca       e      e       a
problema:




                       Figura 14: JMPS: Solu¸ao do problema atrav´s do m´todo Gr´fico
                                            c˜                   e      e       a




   O JMPS possui uma funcionalidade de inclus˜o de problemas novos. Estes problemas
                                             a
s˜o inseridos atrav´s de uma interface pr´pria e podem ser utilizados na funcionalidade
 a                 e                     o
de solu¸˜o pelos m´todos Simplex e Gr´fico, conforme o exemplo anterior. A interface
       ca         e                  a
para inserir o novo problema ´ muito simples:
                             e




                             Figura 15: JMPS: Edi¸ao de problema de otimiza¸ao
                                                 c˜                        c˜




   O sistema solicita o n´ mero de vari´veis do problema e o n´mero de restri¸˜es. Con-
                         u             a                      u              co
forme esta informa¸˜es, s˜o solicitadas a fun¸˜o a ser otimizada, o m´todo (minimiza¸˜o
                  co     a                   ca                      e              ca
ou maximiza¸˜o) e as restri¸˜es. O problema, ent˜o, est´ pronto para ser solucionado
           ca              co                   a      a
atrav´s do m´todo Simplex ou Gr´fico.
     e      e                  a
   Para efeito ilustrativo, reorganizamos as classes de implementa¸˜o do JMPS em pa-
                                                                  ca
cotes, de acordo com seus objetivos e similaridades:
22




                             Figura 16: Estrutura interna do sistema JMPS




   No pacote applet, concentramos as classes principais de apresenta¸˜o, que gerenciam
                                                                    ca
as telas do sistema JMPS e tratam da exibi¸˜o dos dados. O pacote methods cont´m
                                          ca                                  e
as classes principais dos m´todos propostos pelo JMPS - o m´todo Big M possui classe
                           e                               e
mas n˜o foi completamente implementado e n˜o possui apresenta¸˜o no applet. Os pa-
     a                                    a                  ca
cotes misc e segundo cont´m classes que s˜o compartilhadas pelos m´todos do JMPS.
                         e               a                        e
Numa compara¸˜o com a arquitetura adotada pelo Agenda Nutricional, estas classes rep-
            ca
resentariam as camadas de neg´cios e servi¸os. A dificuldade em separar apresenta¸˜o
                             o            c                                     ca
de neg´cios no JMPS ocorreu principalmente pelo fato de que mensagens ao usu´rio s˜o
      o                                                                     a     a
tratadas nas classes do pacote misc e n˜o somente no pacote applet, como seria de se
                                       a
esperar. Trataremos das classes importantes ao Simplex na pr´xima se¸˜o.
                                                            o       ca


3.2.3 Adaptando o applet para o sistema Agenda Nutricional e
vice-versa
   A primeira tarefa de adapta¸˜o foi tratar o JMPS de forma a extrair o componente
                              ca
de c´lculo de dentro do applet. Assim, analizamos a estrutura do JMPS, retiramos as
    a
diretivas de apresenta¸˜o e incorporamos no Agenda Nutricional.
                      ca
   O JMPS utiliza diversas classes para construir um problema a ser calculado. Esta
estrutura ´ composta pelas classes:
          e
23


   • Constraint - gerencia as restri¸˜es
                                    co

   • ComplexConstraint - cont´m os dados de uma restri¸˜o
                             e                        ca

   • ConstraintContainer - cont´m todas as restri¸˜es de um problema
                               e                 co

   • SimpleConstraint - gerencia restri¸˜es com uma unica vari´vel
                                       co           ´         a

   • ZFunction - fun¸˜o a ser otimizada
                    ca

   • TableData - tabela que armazena os valores a serem manipulados na otimiza¸˜o
                                                                              ca

   • SimplexMethod - implementa o m´todo Simplex
                                   e

   • MathUtil - conjunto de opera¸˜es matem´ticas necess´rias ao m´todo Simplex
                                 co        a            a         e

   • Number - gerencia os valores utilizados no c´lculo. Internamente, trata todos os
                                                 a
     valores como ponto flutuante.

   Estas estrutura foram adaptadas e adicionadas ao Agenda Nutricional no pacote ne-
gocios.dieta.calculo, conforme abaixo:




                                    Figura 17: Pacote calculo
24


   A classe negocios.dieta.calculo.CalculoDietaOtimizada ´ chamada pela classe nego-
                                                         e
cios.dieta.DietaPrescrita no momento em que est´ preparando os dados para enviar para
                                               a
a camada de persistˆncia. A classes CalculoDietaPersonalizada recebe um objeto Di-
                   e
etaPrescrita que cont´m todos os produtos e a dieta de referˆncia indicada pelo usu´rio
                     e                                      e                      a
do sistema. A classe CalculoDietaOtimizada cria instˆncias de:
                                                    a

   • ZFunction: a fun¸˜o a ser otimizada ´ constru´ utilizando-se somente os nutrientes
                     ca                  e        ıda
     presentes na dieta de referˆncia; cada produto ´ uma vari´vel da fun¸˜o principal
                                e                   e         a          ca
     e a quantidade do nutriente de referˆncia presente no produto ´ utilizado como
                                         e                         e
     coeficiente da vari´vel equivalente na equa¸˜o.
                       a                       ca

   • ConstraintContainer: o sistema gera uma restri¸˜o para cada nutriente da dieta de
                                                   ca
     referˆncia.
          e

   • TableData: ´ criada uma instˆncia vazia; ´ neste objeto que ser˜o armazenados os
                e                a            e                     a
     valores finais do c´lculo.
                       a

   Para realizar o c´lculo, o JMPS utiliza os valores armazenados em TableData, as
                    a
restri¸˜es e a fun¸˜o Z. O c´lculo sobre estes valores (atrav´s dos pivotamentos) determina
      co          ca        a                                e
o crit´rio de parada e o t´rmino do c´lculo, chegando ao resultado ´timo.
      e                   e          a                             o
   Foi necess´rio realizar diversas adapta¸˜es no c´digo do JMPS e no modelo de dados
             a                            co       o
do sistema Agenda Nutricional, para que os dois pudessem se comunicar adequadamente.
O controle de fluxo do c´lculo do Simplex estava nas classes de apresenta¸˜o, pois a cada
                       a                                                ca
itera¸˜o eram apresentadas mensagens ao usu´rio (conforme pode ser visto na se¸˜o an-
     ca                                    a                                  ca
terior). No JMPS a classe SimplexMethod se ocupa somente dos c´lculos; toda a regra
                                                              a
do algoritmo est´ fora da classe, neste caso, na classe de apresenta¸˜o. Para que n˜o hou-
                a                                                   ca             a
vesse impacto no resultado, optou-se por n˜o realizar esta altera¸˜o neste momento, pois
                                          a                      ca
requer um estudo mais delicado do JMPS que n˜o era poss´ de encaixar no cronograma
                                            a          ıvel
do projeto. Assim, limitamo-nos a incluir um m´todo privado na classe CalculoDietaO-
                                              e
timizada que realiza as chamadas aos m´todos corretos do Simplex, de acordo com a
                                      e
l´gica do JMPS. N˜o havia sido previsto vari´veis de controle na dieta de referˆncia para
 o               a                          a                                  e
gerenciar o m´todo de c´lculo (minimiza¸˜o e maximiza¸˜o) e indicar o produto de re-
             e         a               ca            ca
ferˆncia. Tais controles foram adicionados para que pudesse ser realizado o acoplamento
   e
dos dois sistemas.
25


   Observamos que n˜o houve impacto no tempo de resposta da prescri¸˜o ap´s a inclus˜o
                   a                                               ca    o          a
dos mecanismos de c´lculos usando o Simplex. O tempo que o algoritmo utilizou para
                   a
realizar os c´lculos ´ impercept´ ao usu´rio, principalmente pelo fato de tal mecanismo
             a       e          ıvel    a
estar embutido na a¸˜o de persistˆncia dos dados no banco de dados, que ´ uma opera¸˜o
                   ca            e                                      e          ca
lenta, j´ que realiza opera¸˜es de leitura e grava¸˜o de disco.
        a                  co                     ca
26


4 Conclus˜o
         a

   A implementa¸˜o do Simplex utilizada n˜o impactou no desempenho geral do sistema e
               ca                        a
trouxe redu¸˜o da margem de erro nos c´lculo, pois n˜o foram feitos c´lculos aproximados,
           ca                         a             a                a
mas utilizou-se um algoritmo de otimiza¸˜o comprovadamente eficiente.
                                       ca
   Apesar de ainda ser necess´rio uma s´rie de ajustes arquiteturais no cocmponente
                             a         e
JMPS, a utiliza¸˜o deste componente ´ muito simples. Notamos durante o uso e an´lise do
               ca                   e                                          a
JMPS que existem liga¸˜es entre as classes principais que provavelmente s˜o desnecess´rias.
                     co                                                  a           a
Por exemplo, para o c´lculo do Simplex, n˜o seria necess´rio utilizar quatro objetos de
                     a                   a              a
restri¸˜o diferentes, mas somente um seria o suficiente para o c´lculo adequado. Uti-
      ca                                                       a
lizar padr˜es de projeto, como o Composite provavelmente ajudaria na performance e
          o
simplificaria ainda mais o componente.
   Pudemos obsevar que a implementa¸˜o de algoritmos matem´ticos requer estudos
                                   ca                     a
aplicados do algoritmo e da linguagem de programa¸˜o a ser utilizada e adapta¸˜es s˜o
                                                 ca                          co    a
necess´rias. Utilizar-se de abstra¸˜es ´ imprescind´
      a                           co e             ıvel para identificar os objetos mais
prov´veis na manipula¸˜o dos dados produzidos e consumidos pelo m´todo selecionado.
    a                ca                                          e
No caso do Simplex, selecionado para uso neste projeto, abstraiu-se a fun¸˜o Z (fun¸˜o a
                                                                         ca        ca
ser otimizada) e as restri¸˜es (equa¸˜es que restringem o espectro dos dados).
                          co        co
   Percebemos que, se n˜o for prevista na fase de projeto a utiliza¸˜o de algum m´todo
                       a                                           ca            e
espec´
     ıfico, como foi o caso deste projeto, o impacto de incluir tal m´todo no sistema
                                                                    e
´ muito alto, pois impacta no modelo de dados, nos casos de uso, no projeto em si
e
(componentes, pacotes e classes) e na interface ao usu´rio.
                                                      a
   Entretanto, pudemos notar que ´ totalmente vi´vel a utiliza¸˜o de modelos matem´ticos
                                 e              a             ca                  a
no cotidiano de desenvolvimento de software e estes modelos devem ser considerados nos
                                              ´
primeiros est´gios da engenharia de software. E importante que o analista de requisitos
             a
tenha conhecimento de tais modelos, podendo identificar potenciais utilizadores. Ao ar-
quiteto e projetista ´ ainda mais importante possuir tal conhecimento, pois pode incluir na
                     e
arquitetura e no projeto do sistema o uso de padr˜es de projeto e de m´todos matem´ticos
                                                 o                    e           a
que solucionem os problemas levantados pelo analista de requisitos, facilitando, assim, o
uso de tais mecanismos no desenvolvimento do sistema.
27




Gloss´rio
     a

.NET        Plataforma de desenvolvimento de software da Microsoft, concorrente do
            Java. O .NET fornece diversas ferramentas para o desenvolvimento de
            software, por´m seu ponto fraco ainda ´ a portabilidade - assim como o
                         e                        e
            Java, o .NET trabalha em diversos contextos, mas n˜o possui compilador
                                                              a
            para outros sistemas operacionais que n˜o o da Microsoft, apesar de estar
                                                   a
            em fase de desenvolvimento dos mesmos.

API         Application Programming Interface. Interface para o c´digo-fonte de uma
                                                                 o
            aplica¸˜o ou biblioteca; comp˜e a documenta¸˜o de desenvolvimento.
                  ca                     o             ca

Applet      Aplica¸˜o executada dentro do contexto de outra aplica¸˜o, geralmente
                  ca                                              ca
            um navegador de internet.

Caloria     Unidade de medida de energia.

Framework   Conjunto de c´digos, modelos, bilbiotecas, componentes, etc, reutiliz´veis
                         o                                                       a
            que ajudam no desenvolvimento de software.

GNU         O Projeto GNU tem por objetivos desenvolver um sistema operacional do
            tipo Unix inteiramente com software livre. Os sistemas Linux s˜o do tipo
                                                                          a
            GNU.

GPL         GNU Public Licence. Licen¸a de software mais utilizada atualmente em
                                     c
            projetos de software livre; em resumo, protege a liberdade do software,
            garantindo que o software distribu´ via GPL possui c´digo aberto e
                                              ıdo               o
            pode ser distribu´ livremente.
                             ıdo

Hibernate   Servi¸o de persistˆncia e consulta a bancos de dados relacionais ou de
                 c            e
            objetos com alto desempenho. Pode ser utilizado com Java e com .NET.
28


Home Office
            Tendˆncia mundial de metodologia de trabalho, onde a pessoa opta por
                e
            trabalhar em casa.

IDE         Integrated Development Environment - Ambiente integrado de desenvolvi-
            mento. Software utilizado para auxiliar e agilizar o desenvolvimento de
            software. Geralmente oferece ferramentas de auto-complemento, ajuda
            online e dicas.

iReport     Ferramenta visual para projetar relat´rios para o Jasper.
                                                 o

Jasper      Ferramenta de gera¸˜o de relat´rios para Java.
                              ca          o

Java        Linguagem de programa¸˜o da Sun Microsystems, cujo compilador ´ dis-
                                 ca                                       e
            tribu´ gratuitamente. O Java tem como principal caracter´
                 ıdo                                                ıstica a porta-
            bilidade - existem vers˜es do compilador para diversos sistemas opera-
                                   o
            cionais; al´m disto, o Java permite trabalhar com ambientes texto, gr´fico,
                       e                                                         a
            web e port´teis.
                      a

JDBC        API para Java que define o modo como um cliente (aplica¸˜o) acessa um
                                                                  ca
            banco de dados.

MDI         Multiple Document Interface. M´todo de organiza¸˜o de janelas que con-
                                          e                ca
            siste em uma janela principal (gerenciador) e n janelas filhas, controladas
            pela janela principal e dispostas de forma a permanecerem internas ` janela
                                                                               a
            principal. Neste modelo, todas as janelas do sistema permanecem juntas.

SDK         Software Development Kit. Conjunto de ferramentas de desenvolvimento
            utilizadas para criar aplica¸˜es, frameworks, consoles, etc.
                                        co
Sistemas de controle de vers˜o
                            a
            Software espec´
                          ıfico utilizado para gerenciar as altera¸oes realizadas em um
                                                                 c˜
            software em desenvolvimento. Os sistemas de controle de vers˜o fornecem
                                                                        a
            ferramentas para acompanhar as altera¸˜es realizadas, voltar uma vers˜o
                                                 co                              a
            do c´digo, etc. Muito utilizado em ambientes de m´ ltiplos desenvolve-
                o                                            u
            dores.
29


Software de prateleira
             Software produzido com caracter´
                                            ısticas gen´ricas, com o objetivo de ser
                                                       e
             distribu´ em larga escala. Geralmente propriet´rio, ou seja, desenvolvido
                     ıdo                                   a
             por uma empresa e vendido sob licen¸as restritas de uso.
                                                c
Software house
             Empresa especializada em desenvolvimento de software. F´brica de soft-
                                                                    a
             ware.
SoureForge.net
             O maior site de desenvolvimento de software livre no mundo, atualmente.
             Hospeda mais de 100.000 projetos, fornecendo diversas ferramentas de
             apoio ao desenvolvimento, como gerenciador de tarefas, gerenciador de
             bugs, f´runs, sistemas de controle de vers˜o, etc.
                    o                                  a
30




Referˆncias Bibliogr´ficas
     e              a

[1] BOCHENEK, Michael. The Java Mathematical Programming Suite .
   Dispon´ em: http://sourceforge.net/projects/javamathprog/
         ıvel

[2] COIN-OR.       CLP     Component         .    Dispon´
                                                        ıvel    em:          http://www.coin-
   or.org/Clp/faq.html

[3] DEAN, Warren. A industrializa¸˜o durante a Rep´blica Velha in Hist´ria
                                 ca               u                   o
   Geral da Civiliza¸˜o Brasileira: III. O Brasil Republicano: 1. Estrutura de poder e
                    ca
   economia (1889-1930), 4a edi¸˜o . S˜o Paulo: Difel (1985).
                               ca     a

[4] Departamento de alimentos e nutri¸˜o experimental da Faculdade de Ciˆncias Far-
                                     ca                                 e
   macˆuticas - USP. Tabela de brasileira de composi¸˜o de alimentos . Projeto
      e                                             ca
   Integrado de composi¸˜o de alimentos. Universidade de S˜o Paulo. Dispon´ em:
                       ca                                 a               ıvel
   http://www.fcf.usp.br/tabela/index.asp

[5] GNU   Linear    Programming      Kit.   GLPK       Component         .    Dispon´
                                                                                    ıvel    em:
   http://www.gnu.org/software/glpk

[6] LACHTERMACHER, Gerson, Pesquisa Operacional na tomada de decis˜es. S˜o
                                                                  o     a
   Paulo: Campus (2005).

[7] PATR´
        ICIO, Jo˜o. M´todo Simplex
                a    e                           in Investiga¸˜o operacional . Ano letivo
                                                             ca
   2006/2007. Dispon´ em: http://www.aim.estt.ipt.pt/ jmmp/InvestOperacional/
                    ıvel

[8] US Department of Agriculture. Composition                  od     Foods     Raw,       Pro-
   cessed,     Prepared.           USDA     National    Nutrient      Database     for     Stan-
   dard Reference,       Release   19. Baltimore:       August,     2006. Dispon´
                                                                                ıvel        em:
   http://www.nal.usda.gov/fnic/foodcomp/Data/HG72/hg72.html

Mais conteúdo relacionado

Semelhante a Otimização de dietas nutricionais com método Simplex

Exercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacionalExercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacionalMarcos Pessoa
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
TCC - Estudo de caso: Implantação do Modelo MPS.BR
TCC - Estudo de caso: Implantação do Modelo MPS.BRTCC - Estudo de caso: Implantação do Modelo MPS.BR
TCC - Estudo de caso: Implantação do Modelo MPS.BREdimar Ramos
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWInstituto Federal de Sergipe
 
Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...
Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...
Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...JADSON SANTOS
 
Analise estrutural para implantar a tpm
Analise estrutural para implantar a tpmAnalise estrutural para implantar a tpm
Analise estrutural para implantar a tpmjuliocavallari
 
Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006
Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006
Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006Alisson Gonçalves Ferreira
 
Tcc Gerencia Conf Itil
Tcc Gerencia Conf ItilTcc Gerencia Conf Itil
Tcc Gerencia Conf ItilMarcelo Salles
 
SisEdu – Sistema Educacional - Módulo Financeiro
SisEdu – Sistema Educacional - Módulo FinanceiroSisEdu – Sistema Educacional - Módulo Financeiro
SisEdu – Sistema Educacional - Módulo FinanceiroUNIEURO
 
AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...
AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...
AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...Lucas de Oliveira Nass
 
Plano de projeto de software para o sistema MEA - monitoraemto de eventos ad...
Plano de projeto de software para o sistema  MEA - monitoraemto de eventos ad...Plano de projeto de software para o sistema  MEA - monitoraemto de eventos ad...
Plano de projeto de software para o sistema MEA - monitoraemto de eventos ad...Lucas Aquino
 
Fabio virtualizacao (1)
Fabio   virtualizacao (1)Fabio   virtualizacao (1)
Fabio virtualizacao (1)gsabatke
 

Semelhante a Otimização de dietas nutricionais com método Simplex (20)

Carlos Henrique Pereira [monografia]
Carlos Henrique Pereira [monografia]Carlos Henrique Pereira [monografia]
Carlos Henrique Pereira [monografia]
 
Exercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacionalExercise Planning - Uma ferramenta de apoio ao meio educacional
Exercise Planning - Uma ferramenta de apoio ao meio educacional
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
2009 fumec souza_e_monteiro
2009 fumec souza_e_monteiro2009 fumec souza_e_monteiro
2009 fumec souza_e_monteiro
 
TCC - Estudo de caso: Implantação do Modelo MPS.BR
TCC - Estudo de caso: Implantação do Modelo MPS.BRTCC - Estudo de caso: Implantação do Modelo MPS.BR
TCC - Estudo de caso: Implantação do Modelo MPS.BR
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
 
Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...
Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...
Aplicac3a7c3a3o da-abordagem-gqm-para-a-definic3a7c3a3o-de-um-processo-de-eng...
 
Analise estrutural para implantar a tpm
Analise estrutural para implantar a tpmAnalise estrutural para implantar a tpm
Analise estrutural para implantar a tpm
 
Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006
Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006
Erp Metodologia Implantacao Alisson Ferreira Adm Uem 2006
 
Alessandra henriquesferreiravc
Alessandra henriquesferreiravcAlessandra henriquesferreiravc
Alessandra henriquesferreiravc
 
Tcc Gerencia Conf Itil
Tcc Gerencia Conf ItilTcc Gerencia Conf Itil
Tcc Gerencia Conf Itil
 
Qualidade sistemas legados
Qualidade sistemas legadosQualidade sistemas legados
Qualidade sistemas legados
 
TCC ANDRE ABEKAWA - Fatec (Primeira Versão)
TCC ANDRE ABEKAWA - Fatec (Primeira Versão)TCC ANDRE ABEKAWA - Fatec (Primeira Versão)
TCC ANDRE ABEKAWA - Fatec (Primeira Versão)
 
5279-18987-1-PB
5279-18987-1-PB5279-18987-1-PB
5279-18987-1-PB
 
SisEdu – Sistema Educacional - Módulo Financeiro
SisEdu – Sistema Educacional - Módulo FinanceiroSisEdu – Sistema Educacional - Módulo Financeiro
SisEdu – Sistema Educacional - Módulo Financeiro
 
AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...
AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...
AVALIAÇÃO DE RISCOS EM UMA EMPRESA DE GRANDE PORTE DO NORTE CATARINENSE UTILI...
 
Tcc - Work control
Tcc - Work controlTcc - Work control
Tcc - Work control
 
Plano de projeto de software para o sistema MEA - monitoraemto de eventos ad...
Plano de projeto de software para o sistema  MEA - monitoraemto de eventos ad...Plano de projeto de software para o sistema  MEA - monitoraemto de eventos ad...
Plano de projeto de software para o sistema MEA - monitoraemto de eventos ad...
 
Fabio virtualizacao (1)
Fabio   virtualizacao (1)Fabio   virtualizacao (1)
Fabio virtualizacao (1)
 
Curso emso
Curso emsoCurso emso
Curso emso
 

Otimização de dietas nutricionais com método Simplex

  • 1. Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸˜o ca Tecnol´gica - CESET o ¸˜ ¸˜ Aplicacao comercial de otimizacao ¸˜ ´ de funcoes usando metodo de ¸˜ solucao Simplex, com foco em ´ sistemas de saude nutricional e ´ dietetica Vanessa Oliveira Campos Limeira 2007
  • 2. i Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸˜o ca Tecnol´gica - CESET o ¸˜ ¸˜ Aplicacao comercial de otimizacao ¸˜ ´ de funcoes usando metodo de ¸˜ solucao Simplex, com foco em ´ sistemas de saude nutricional e ´ dietetica Vanessa Oliveira Campos Trabalho de Gradua¸˜o Interdisciplinar (TGI) ca apresentado ao Centro Superior de Educa¸˜o Tecnol´gica ca o - CESET como requisito de conclus˜o do Curso de a Tecnologia em Inform´tica. a Orientador: Marli Gomes de Freitas Hernandes Limeira 2007
  • 3. ii Aos meus amigos Elaine, Fernando e Marcela, e ` minha irm˜ L´ a a ılian.
  • 4. iii ”Quis custodiet ipsos custodes?” Juvenal
  • 5. iv Sum´rio a Lista de figuras v Resumo (Abstract) 1 1 Introdu¸˜o ca 2 2 Metodologia e tecnologias envolvidas 3 3 Solu¸˜o do problema ca 8 4 Conclus˜o a 26 Gloss´rio a 27 Referˆncias Bibliogr´ficas e a 30
  • 6. v Lista de Figuras Figura 1: Dependˆncia entre os pacotes do Agenda Nutricional . . . . . . . . . . 12 e Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios . . . . . . . . . . 13 Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia . . . . . . . . 14 Figura 4: Modelo de dados para os produtos e nutrientes . . . . . . . . . . . . . 15 Figura 5: Exemplo de rela¸˜o entre as informa¸˜es, no modelo de dados proposto 15 ca co Figura 6: Agenda Nutricional: Controle de m´ ltiplas janelas internas . . . . . . 17 u Figura 7: Agenda Nutricional: Janela padr˜o de consulta de registros . . . . . . 18 a Figura 8: JMPS: O problema do prot´tipo: quadro inicial do Simplex . . . . . . 19 o Figura 9: JMPS: O problema do prot´tipo: primeira itera¸ao . . . . . . . . . . . 20 o c˜ Figura 10: JMPS: O problema do prot´tipo: pivoteamento da linha . . . . . . . 20 o Figura 11: JMPS: O problema do prot´tipo: ajuste das demais linhas da tabela o 20 Figura 12: JMPS: O problema do prot´tipo: primeira itera¸˜o finalizada . . . . 20 o ca Figura 13: JMPS: O problema do prot´tipo: resultado ´timo . . . . . . . . . . . 20 o o Figura 14: JMPS: Solu¸˜o do problema atrav´s do m´todo Gr´fico . . . . . . . . 21 ca e e a Figura 15: JMPS: Edi¸˜o de problema de otimiza¸˜o . . . . . . . . . . . . . . . 21 ca ca Figura 16: Estrutura interna do sistema JMPS . . . . . . . . . . . . . . . . . . . 22 Figura 17: Pacote calculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  • 7. 1 Resumo (Abstract) Eficiˆncia e confiabilidade de resultado s˜o as duas caracter´ e a ısticas procuradas com maior frequˆncia nos softwares atualmente. Desenvolvedores de software est˜o cada vez e a mais preocupados em melhorar estes dois pontos nos produtos que oferecem. Para sistemas que trabalham com volume grande de dados e com necessidade de apresentar resposta r´pida e precisa ao usu´rio, os desenvolvedores est˜o ` procura de algoritmos que tragam a a a a esta caracter´ ıstica. Os algoritmos matem´ticos que oferecem a modelagem de dados est˜o sendo cada vez a a mais procurados para atingir este objetivo. Este trabalho aplica o algoritmo Simplex em uma situa¸˜o comum do cotidiano de uma software house, mostrando a usabilidade da ca modelagem matem´tica para solu¸˜o de problemas complexos. a ca
  • 8. 2 1 Introdu¸˜o ca Todos os dias vemos novas tecnologias surgirem, se aprimorarem. Com elas vˆm o ciclo e vicioso de aprimoramento de hardware e software. Novas teorias de todas as disciplinas da ´rea de exatas s˜o utilizadas na computa¸˜o, auxiliando neste aprimoramento cont´ a a ca ınuo. O software faz parte de uma tendˆncia de evolu¸˜o constante. A Engenharia de e ca software est´ constantemente se aperfei¸oando, de forma a trazer cada vez mais t´cnica a c e e m´todos eficazes para melhorar o desempenho tanto do processo de desenvolvimento e quanto do software em si. Desta forma, a matem´tica e a inform´tica se unem para trazer o que existe de melhor a a em cada e traduzir tudo isto em um software de qualidade, que atenda n˜o somente as a necessidades do usu´rio, mas que utilize todo o potencial de hardware dispon´ atual- a ıvel mente. Funda¸˜es como a Computational Infrastructure for Operation Research , COIN- co OR, trabalham na cria¸˜o e dissemina¸˜o de solu¸˜es computacionais para problemas ca ca co matem´ticos. a Este trabalho prop˜e demonstrar em uma aplica¸˜o comercial, focada na ´rea de sa´ de, o ca a u mais especificamente em nutri¸˜o e diet´tica, o uso de m´todos e modelos matem´ticos ca e e a simples para solucionar problemas de c´lculos complexos; neste caso, otimiza¸˜o de prob- a ca lemas lineares. A proposta ´ desenvolver um sistema que se utilize de um m´todo de otimiza¸˜o e e ca linear, o m´todo Simplex, para calcular a quantidade de n produtos compondo uma e dieta nutricional, de acordo com a composi¸˜o nutricional de cada produto selecionado ca para a dieta. O sistema utiliza dietas de referˆncia, que s˜o compostas por nutrientes em e a quantidades espec´ ıficas, para calcular as quantidades de cada produto necess´rios a suprir a a ingest˜o m´ a ınima ou m´xima de nutrientes da dieta de referˆncia. a e Este trabalho est´ organizado em dois cap´ a ıtulos: Metodologia e tecnologias envolvidas, que descreve o modelo matem´tico escolhido (Simplex) e as tecnologias utilizadas no a desenvolvimento do sistema; Solu¸˜o do Problema, subdividindo em se¸˜es que descrevem ca co o problema selecionado no projeto, a metodologia utilizada para desenvolver o sistema e integrar os componentes selecionado. O trabalho ainda conta com Introdu¸˜o, Conclus˜o, ca a Gloss´rio e Referˆncias Bibliogr´ficas. a e a
  • 9. 3 2 Metodologia e tecnologias envolvidas 2.1 O problema A populariza¸˜o do computador pessoal trouxe consigo uma necessidade de evolu¸˜o ca ca do hardware e do software que atingiu largamente todos os n´ ıveis da sociedade - desde o ambiente dom´stico, com o largo uso do microcomputador para jogos e home office, e at´ o ambiente do escrit´rio - independente do setor econˆmico da empresa (ind´ stria, e o o u com´rcio e governo). Com a constante adapta¸˜o do software aos servi¸os dispon´ e ca c ıveis e dos servi¸os aos softwares, criou-se um mercado virtualmente infinito para a produ¸˜o de c ca software. Atualmente, o mercado de software personalizado - software desenvolvido para um fim espec´ ıfico, em contrapartida ao software de prateleira, feito com caracter´ ısticas gen´ricas e e distribu´ em larga escala - tem apresentado um crescimento muito atrativo, que se ıdo mostra com o grande n´ mero de empresas desenvolvedoras de software que surgem a cada u ano. Com o mercado aberto ` novos sistemas e a competi¸˜o causada pelo n´ mero de a ca u empresas especializadas, possuir um diferencial ´ importante. e Os softwares produzidos atualmente, de forma personalizada, possuem como requisitos as regras do neg´cio do cliente, suas necessidades particulares. Sistemas de controle tˆm o e dominado a demanda no mercado, pois s˜o servi¸os cruciais dentro das empresas, e estes a c sistemas demandam, muitas vezes, c´lculos complexos envolvendo m´ ltiplas vari´veis. A a u a demanda constante por performance e velocidade de resposta, aliada ` press˜o de cumprir a a cronogramas apertados e o baixo conhecimento da equipe de desenvolvimento em solu¸˜es co computacionais complexas, levam ` utiliza¸˜o de c´lculos aproximados com altas taxas a ca a de erro. 2.2 Programa¸˜o linear e m´todo Simplex ca e A programa¸˜o linear apresenta uma solu¸˜o de baixo custo computacional e com ca ca redu¸˜o da margem de erro para problemas de otimiza¸˜o com m´ ltiplas vari´veis, como ca ca u a ´ o caso de in´ meros sistemas de controle - almoxarifado, finan¸as, produ¸˜o, etc. e u c ca
  • 10. 4 A programa¸˜o linear consiste em problemas de otimiza¸ao que utilizam fun¸˜es lin- ca c˜ co eares. Existem casos t´ ıpicos de programa¸˜o linear, como o Problema de Transporte, ca que foi utilizado inicialmente para determinar o menor custo de transporte entre diversas f´bricas de um produto e diversos centros consumidores [6]. Situa¸˜es t´ a co ıpicas de aplica¸˜o ca da programa¸˜o linear s˜o os casos onde se deseja, por exemplo, maximizar o lucro de ca a uma empresa, minimizar o custo de produ¸˜o de um determinado produto, etc. ca A programa¸˜o linear utiliza-se de um modelo matem´tico composto por uma fun¸˜o ca a ca objetiva e de restri¸˜es t´cnicas representadas por inequa¸˜es. Por exemplo: co e co Lucro = 2x1 + 3x2 (2.1)        4x1 + 3x2 ≤ 10    t´cnicas  e 6x1 − x2 ≥ 20     Restric˜es o  (2.2) x1 ≥ 0      de n˜o negatividade a     x2 ≥ 0     Neste modelo, encontramos os seguintes elementos: • Vari´veis de decis˜o: a a s˜o as vari´veis que representam as decis˜es a serem a a o tomadas. Por exemplo, em uma f´brica onde se deseja otimizar a produ¸˜o para a ca maximizar o lucro, as vari´veis de decis˜o representar˜o os produtos que ela produz. a a a No exemplo acima, as vari´veis de decis˜o s˜o x1 e x2 . a a a • Fun¸˜o objetivo: representa o objetivo do modelo. No nosso exemplo, maximizar ca o lucro. • Restri¸˜es: co s˜o representadas por inequa¸˜es lineares e identificam as situa¸˜es a co co que imp˜em limita¸˜es ao modelo. Existem dois tipos de restri¸˜es: t´cnicas, por o co co e exemplo, quantidades m´ ınimas que devem ser produzidas de um produto; e de n˜o a negatividade, que impedem que os valores encontrados para as vari´veis de decis˜o a a sejam negativos (n˜o ´ poss´ produzir -20 pe¸as). a e ıvel c Para solucionar os problemas de programa¸˜o linear existem diversos algoritmos defini- ca dos, como Gauss-Jordan e Simplex. Estes algoritmos e suas variantes definem passos e pontos de parada para o c´lculo de problemas de otimiza¸˜o. Neste trabalho, optamos a ca por utilizar o algoritmo Simplex para solucionar os problemas de otimiza¸˜o propostos. ca
  • 11. 5 O Simplex ´ o algoritmo b´sico da programa¸˜o linear. Seu objetivo ´ transformar e a ca e uma matriz fornecida em outra padronizada, de acordo com a necessidade do problema. A matriz fornecida ´ criada a partir das equa¸˜es geradas de otimiza¸˜o e restri¸˜es. e co ca co Utilizando o exemplo anterior, a matriz inicial ficaria:    4 3 10    (2.3) 6 −1 20 O Simplex soluciona o problema atrav´s de in´ meras itera¸˜es, onde a cada itera¸˜o e u co ca ocorre o pivotamento da matriz. Terminam-se as itera¸˜es quando a matriz atinge o co estado ´timo, ou seja, quando atingem-se valores para as vari´veis dentro de faixas pr´- o a e estabelecidas. Por exemplo, num problema de maximiza¸˜o, quando todas as vari´veis ca a encontraram-se com valores maiores ou iguais a zero, identifica uma matriz ´tima. o Para exemplificar o funcionamento do algoritmo Simplex, usaremos o problema[7]: minx1 + 2x2 x1 + x2 ≤ 2 x1 − x2 ≥ 1 (2.4) s.a. x1 ≥ 0 x2 ≥ 0 Colocando-o na forma normal1 : minx1 + 2x2 x1 + x2 + x3 = 2 x1 − x2 − x4 = 1 x1 ≥ 0 (2.5) s.a. x2 ≥ 0 x3 ≥ 0 x4 ≥ 0 Multiplicando a equa¸˜o de restri¸˜o x1 - x2 - x4 = 1 por -1, obt´m-se uma solu¸˜o ca ca e ca inicial, cuja matriz ´ identidade. e 1 A forma normal da equa¸ao linear implica em transformar a inequa¸ao em uma equa¸ao, ou seja, c˜ c˜ c˜ eliminar os sinais de desigualdade, acrescentando vari´veis novas que complementem a solu¸ao da equa¸ao. a c˜ c˜ Tamb´m conhecida por forma canˆnica. e o
  • 12. 6 x1 x2 x3 x4 -z x3 1 1 1 0 0 2 x4 -1 1 0 1 0 -1 -z 1 2 0 0 1 0 Por´m, esta solu¸˜o n˜o ´ admiss´ e ca a e ıvel, pois b2 ≤ 0:   0  p= (2.6)   −1 Introduzindo p como vari´vel x0 na nossa matriz, obtemos: a x1 x2 x3 x4 x0 -z x3 1 1 1 0 0 0 2 x4 -1 1 0 1 -1 0 -1 -z 1 2 0 0 0 1 0 Efetua-se a troca da vari´vel x0 pela x4 , pois esta ´ a que possui valor b negativo. a e Obt´m-se o quadro: e x1 x2 x3 x4 x0 -z x3 1 1 1 0 0 0 2 x0 1 -1 0 -1 1 0 1 -z 1 2 0 0 0 1 0 Neste quadro, observa-se que x0 = - x1 + x2 + x4 + 1 . Sendo assim, a vari´vel que a deve ser escolhida para entrar na base, no lugar de x0 , ´ aquela que tiver o coeficiente e mais positivo na linha da vari´vel x0 . No nosso caso, esta vari´vel ´ a x1 . a a e Com esta troca, chegamos ao resultado: x1 x2 x3 x4 x0 -z x3 0 2 1 1 -1 0 1 x1 1 -1 0 -1 1 0 1 -z 0 3 0 1 -1 1 -1 O resultado ´timo ´ alcan¸ado quando n˜o existem resultados negativos na linha do o e c a z. Note os valores das vari´veis: x1 =0; x2 =3; x3 =0; x4 =1. a
  • 13. 7 2.3 Arcabou¸o tecnol´gico c o O conjunto tecnol´gico mais utilizado atualmente no desenvolvimento de software o tem variado entre os baseados em Java e .NET. Adotamos o conjunto para Java neste trabalho. A escolha pela tecnologia Java tem fundamento no fato de todo o kit necess´rio a para desenvolver e manter o software ser gratuito e estar dispon´ ıvel na internet para aquisi¸˜o, incluindo toda a documenta¸˜o necess´ria para seu entendimento. ca ca a Foi utilizado o conjunto de ferramentas: • Linguagem de programa¸˜o: Java SDK 5.0 ca 2 • Banco de dados: Compat´ JDBC ıvel • Infraestrutura de desenvolvimento: – IDE: Eclipse 3.2 – Framework de banco de dados: Hibernate 3.0 – Gera¸˜o de relat´rios: Jasper Reports 1.2.8 ca o – Projeto de relat´rios: iReport 1.2.8 o – Controle de vers˜o: CVS a O software produzido neste trabalho ser´ distribu´ gratuitamente, sob licen¸a GPL, a ıdo c atrav´s do servi¸o de hospedagem de software SourceForge.net. e c 2 Devido ao uso do Hibernate nos servi¸os de persistˆncia, utilizamos os bancos de dados PostgreSQL c e 8.2 e Microsoft SQL Server 2003 nos testes de desenvolvimento.
  • 14. 8 3 Solu¸˜o do problema ca 3.1 O problema escolhido O objetivo inicial deste trabalho ´ demonstrar a aplica¸ao de m´todos matem´ticos e c˜ e a no cotidiano do desenvolvimento de software. A programa¸ao linear, aplicada com o c˜ m´todo Simplex, ´ um dos mecanismos com maior potencial de aplica¸˜o, e por isto, foi e e ca o escolhido. O problema selecionado refere-se a um problema de nutri¸˜o. Problemas de nutri¸˜o e ca ca diet´tica s˜o constantemente encontrados em livros de programa¸˜o linear nos exemplos e e a ca exerc´ ıcios, geralmente de forma simplificada, usando duas ou at´ no m´ximo trˆs vari´veis. e a e a Em geral, estes problemas envolvem dois produtos nutricionais (vitaminas, prote´ ınas, minerais) e deseja minimizar o custo de uma dieta. O problema proposto neste trabalho ´ mais complexo, j´ que envolve solu¸˜o com- e a ca putacional implementada em um sistema, o que nos d´ uma margem de c´lculo maior, a a ampliando o n´ mero de vari´veis que poderemos manipular. u a A proposta ´ gerar uma dieta nutricional, baseada em componentes nutricionais b´sicos e a e uma dieta de referˆncia (por exemplo, a dieta m´ e ınima de 2500 calorias, indicada em qualquer produto consum´ ıvel), utilizando a tabela nutricional de produtos consum´ ıveis in- dicada pelo nutricionista ou paciente usu´rio do sistema. O sistema implementa o m´todo a e Simplex e realiza os c´lculos a partir da dieta de referˆncia selecionada no momento da a e constru¸˜o da dieta nutricional desejada. ca Na proposta n˜o est´ incluso tratamento de custo, peso, altura, idade ou quadro cl´ a a ınico do paciente, ou seja, o sistema n˜o se prop˜e a utilizar-se de heur´ a o ısticas cl´ ınicas para selecionar a melhor dieta para um paciente. O objetivo ´ gerar uma dieta utilizando-se de e uma dieta de referˆncia, criada previamente, e de uma lista de produtos desejados para e consumo pelo paciente. Os produtos ser˜o as vari´veis do problema e as restri¸˜es ser˜o a a co a geradas a partir da dieta de referˆncia. O fator de minimiza¸˜o ou maximiza¸˜o da dieta e ca ca ser´ fornecido, tamb´m, pela dieta de referˆncia - representado por um dos componentes a e e desta dieta. Por exemplo, numa dieta recomendada de 2500 calorias/dia, o elemento de referˆncia ´ a caloria. Neste caso, nosso problema ser´ de maximiza¸˜o, j´ que esta dieta e e a ca a
  • 15. 9 regula uma ingest˜o m´ a ınima de 2500 calorias por dia. O sistema ir´ calcular a quantidade a m´ ınima de cada produto que dever´ ser consumida pelo paciente, a fim de atingir as 2500 a calorias m´ ınimas desejadas. 3.2 An´lise e solu¸˜o a ca Existem poucos componentes dispon´ ıveis prontos que implementem algoritmos de otimiza¸˜o. Encontramos o componente CLP que implementa diversos algoritmos Sim- ca plex linear e n˜o-linear, como o Simplex Primal, Dual Simplex, Simplex n˜o linear, entre a a outros. O componente CLP foi desenvolvido utilizando a linguagem de programa¸˜o C++ ca e ´ distribu´ gratuitamente pela Computational Infrastructure for Operations Research e ıdo (COIN-OR), uma funda¸˜o sem fins lucrativos para ciˆncia e educa¸˜o, cuja miss˜o ´ a de ca e ca a e criar e disseminar o conhecimento relacionado a todos os aspectos de pesquisa operacional computacional [2]. O componente CLP foi implementado com o objetivo de ser utilizado largamente em aplica¸˜es comerciais ou n˜o. co a Outro componente pesquisado foi o GLPK - GNU Linear Programming Kit [5], de- senvolvido em C Ansi. O GLPK implementa os m´todos Simplex (primal e dual), mas e foi descartado devido ` tecnologia utilizada em seu desenvolvimento. a A escolha pelo arcabou¸o tecnol´gico guiou a escolha do componente a ser utilizado, c o o que descartou o uso do CLP pela complexidade da integra¸˜o via chamada nativa de ca bibliotecas C++ no Java, o que tornaria o custo do projeto mais alto (aumento signi- ficativo do prazo para desenvolvimento) e reduziria a manutenibilidade do software final, pois a integra¸˜o de m´ ltiplas linguagens, al´m de dificultar a manuten¸˜o do software ca u e ca pelo pr´prio fato de mesclar duas tecnologias diferentes, impactaria na performance final o do sistema, pois existe queda de performance computacional quando se realiza chamadas nativas, mesmo que ambos os lados do programa estejam muito bem desenvolvidos, e tenham considerado todos os pontos poss´ ıveis de otimiza¸˜o do desempenho de software. ca O GLPK foi desconsiderado pela mesma raz˜o e com o agravante de que n˜o foi desen- a a volvido utilizando o paradigma da orienta¸˜o a objetos, o que aumentaria a dificuldade ca de integra¸˜o com o Java. ca Devido ao fato do objetivo n˜o ser a implementa¸˜o do m´todo Simplex e, sim, a a ca e demonstra¸˜o de seu uso, pesquisamos componentes desenvolvidos em Java, similares ca
  • 16. 10 ao CLP. N˜o foi poss´ a ıvel localizar componentes, por´m, localizamos um desenvolvedor e que realizou um projeto acadˆmico similar ao proposto neste trabalho, utilizando Java. e Michael Bochenek desenvolveu o applet Java Mathematical Programming Suite [1], por´m, e pelo curto prazo estabelecido para o projeto, somente foi implementado o m´todo Simplex e e o m´todo Gr´fico para resolu¸˜o de problemas de programa¸˜o linear. Em contato com e a ca ca Bochenek, os fontes do applet foram cedidos para serem adaptados a este projeto. O applet JMPS utiliza o m´todo Simplex para solucionar equa¸˜es prontas ou qualquer e co equa¸˜o informada pelo usu´rio. Iremos utilizar o applet fornecido por Bochenek para ca a demonstrar o uso do modelo Simplex proposto neste trabalho e ilustrar as itera¸˜es do co Simplex, al´m de demonstrar a estrutura interna implementada, as adapta¸˜es necess´rias e co a para ser utilizado neste projeto e o desempenho trazido ao c´lculo final proposto. a 3.2.1 Criando o sistema Agenda Nutricional O sistema Agenda Nutricional foi projetado para ilustrar o uso do m´todo Simplex no e c´lculo da dieta nutricional. O objetivo do sistema Agenda Nutricional ´ o de fornecer fer- a e ramentas que auxiliem na prescri¸˜o de uma dieta nutricional. Seus principais elementos ca s˜o: a 1. Cadastro de Produtos: permite manter o cadastro de todos os produtos (ali- mentos) que estar˜o dispon´ a ıveis para o paciente compor sua dieta. 2. Cadastro de Nutrientes: tabela de dom´ ınio, n˜o ´ poss´ alterar a lista de a e ıvel nutrientes existentes atrav´s da aplica¸˜o, por´m o sistema fornece uma lista de e ca e nutrientes padronizada [8]. 3. Cadastro de Nutricionistas: tabela de dom´ ınio; o objetivo ´ possuir informa¸˜es e co do nutricionista necess´rias ` sua identifica¸˜o. A primeira fase do desenvolvimento a a ca n˜o inclui o cadastro de nutricionistas; esta funcionalidade ser´ implementada em a a fases posteriores. 4. Cadastro de Dietas de referˆncia: permite manter o cadastro das dietas que e ser˜o utilizadas como referˆncia na prescri¸˜o ao paciente - uma dieta de referˆncia a e ca e ´ a dieta de 2500 calorias di´rias para um adulto. e a
  • 17. 11 5. Cadastro de Pacientes: o cadastro de pacientes permite manter informa¸˜es co m´ ınimas necess´rias ` identifica¸˜o do paciente e seu hist´rico cl´ a a ca o ınico. 6. Prescri¸˜o de dietas: ca permite ao nutricionista prescrever uma dieta a um pa- ciente cadastrado; o sistema utiliza o m´todo simplex para, implicitamente, calcular e as quantidades de cada produto selecionado pelo nutricionista, de acordo com a quantidade m´ ınima ou m´xima de cada nutriente indicada na dieta de referˆncia, a e otimizando de acordo com o produto de referˆncia da mesma. e O Agenda Nutricional utiliza um sistema de banco de dados para armazenar as in- forma¸˜es, por´m n˜o ´ dependente de tecnologia de banco de dados, ou seja, o usu´rio co e a e a pode escolher um gerenciador de banco de dados da sua preferˆncia para utilizar o sistema e Agenda Nutricional. O sistema foi projetado de forma a ser totalmente independente de plataforma e de gerenciador de banco de dados. Sua interface foi desenhada para que se adeque `s configura¸˜es locais do usu´rio. Todas as configura¸˜es b´sicas do sistema po- a co a co a dem ser feitas atrav´s de arquivos texto, edit´veis em qualquer editor de texto dispon´ e a ıvel no computador do usu´rio. a Outra caracter´ ıstica importante do sistema ´ a tradu¸˜o para m´ ltiplos idiomas. O e ca u sistema foi projetado para permitir a tradu¸˜o de todos os termos para qualquer idioma. ca Para isto, existe um arquivo de idiomas onde os termos s˜o categorizados. A vers˜o a a principal do sistema foi feita completamente em portuguˆs brasileiro, por´m, havendo a e e necessidade de tradu¸˜o para outro idioma, digamos, inglˆs, basta criar uma c´pia do ca e o arquivo de idiomas original, traduzir os termos e configurar o sistema para o novo idioma; ao reiniciar a aplica¸˜o, o sistema identifica o idioma selecionado e utiliza o arquivo de ca idiomas adequado. A arquitetura do sistema ´ muito simples, por´m utiliza-se de quatro camadas: ap- e e resenta¸˜o, servi¸os, neg´cios e persistˆncia. As camadas est˜o distribu´ ca c o e a ıdas de forma a reduzir a interdependˆncia entre elas, assim: e
  • 18. 12 Figura 1: Dependˆncia entre os pacotes do Agenda Nutricional e A n´ ıvel de implementa¸˜o, as chamadas entre as camadas ocorrem no sentido da ca camada de apresenta¸˜o para a camada de persistˆncia, ou seja, as classes de apresenta¸˜o ca e ca fazem chamadas `s classes de servi¸os, mas n˜o ocorre o inverso - servi¸os chamando a c a c apresenta¸˜o. Tamb´m n˜o existe liga¸˜o entre as camadas n˜o adjacentes, ou seja, ca e a ca a a camada de apresenta¸˜o desconhece a existˆncia da camada de neg´cios. Assim, as ca e o camadas somente possuem comunica¸˜o com as duas camadas adjacentes, o que facilita ca a manuten¸˜o, pois ´ poss´ isolar um problema encontrado em uma camada. ca e ıvel Os erros ocorridos nas camadas mais internas s˜o encaminhados `s camadas mais a a externas atrav´s de exce¸˜es e estas exce¸˜es s˜o tratadas somente na camada de apre- e co co a senta¸˜o, onde o usu´rio toma conhecimento delas atrav´s de mensagens padronizadas. ca a e As camadas de servi¸os e de neg´cios est˜o intimamente ligadas. Devido ` baixa com- c o a a plexidade da aplica¸˜o, a camada de servi¸os foi simplificada, sendo apenas uma camada ca c de troca de mensagens, basicamente. Entretanto, a camada de servi¸os possui um forte c acoplamento com a camada de apresenta¸˜o. Por exemplo, escolheu-se apresentar os resul- ca tados das consultas em forma de tabela na camada de apresenta¸˜o. Deste modo, decidiu- ca se centralizar a cria¸˜o desta tabela na camada de servi¸os para que houvesse garantia de ca c que a tabela criada sempre fosse a mesma, com as mesmas colunas, comportamento, etc. Assim, o servi¸o implementado gera uma instˆncia do objeto javax.swing.JTable - tipica- c a mente um elemento de apresenta¸˜o - com os dados resultantes da consulta solicitada na ca camada de apresenta¸˜o. ca
  • 19. 13 Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios O acesso ao banco de dados ´ feito atrav´s do framework Hibernate, que faz a comu- e e nica¸˜o entre a aplica¸˜o e o banco de dados. Al´m de trazer a liberdade de tecnologia - ca ca e o Hibernate utiliza conex˜es JDBC ao banco de dados, permitindo que o acesso seja feito o a qualquer gerenciador que possua driver JDBC dispon´ -, o Hibernate traz agilidade ıvel na constru¸˜o da aplica¸˜o pois ele cria todas as consultas e comandos de manipula¸˜o de ca ca ca dados utilizando uma adapta¸˜o pr´pria do SQL chamada HSQL. Ao desenvolvedor basta ca o criar os arquivos de mapeamento l´gico do banco de dados, indicando quais vari´veis da o a aplica¸˜o est˜o ligadas a quais campos e tabelas do banco. Como o Hibernate somente ca a utiliza o arquivo de mapeamento, a aplica¸˜o se torna independente de tecnologia de ca banco de dados, sendo necess´rio somente indicar em um arquivo de configura¸˜o pr´prio a ca o do Hibernate qual o driver JDBC, o servidor onde o banco de dados est´ instalado e o a usu´rio e senha de acesso. a
  • 20. 14 Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia A estrutura de c´lculo do m´todo Simplex foi embutida na camada de neg´cios, j´ que a e o a o c´lculo faz parte da l´gica interna e do conjunto de regras do sistema. Veremos esta a o estrutura com mais detalhes na se¸˜o Adaptando o applet para o sistema Agenda ca Nutricional e vice-versa. Com a arquitetura definida, o componente de c´lculo do Simplex selecionado, iniciou- a se a pesquisa pela fonte de dados. A maior dificuldade foi encontrar uma fonte de dados confi´vel, pois para o funcionamento adequado do sistema, ´ necess´rio que a tabela a e a nutricional dos produtos esteja correta. O departamento de nutri¸˜o da Universidade ca de S˜o Paulo (USP) [4] disponibiliza consulta online ` tabela nutricional dos alimentos a a nacionais e de consumo nacional. Por´m, n˜o h´ possibilidade de fazer c´pia completa do e a a o banco de dados. O objetivo era o de localizar uma base de dados confi´vel que pudesse a ser importada para o Agenda Nutricional sem perda de informa¸˜o e sem impactar no ca cronograma estabelecido para o projeto. Em prosseguimento ` pesquisa, localizamos o a Banco de Composi¸˜o dos Alimentos do Departamento de Agricultura dos Estados Unidos ca - USDA. O USDA disponibiliza o National Nutrient Database for Standard Reference ,
  • 21. 15 que pode ser utilizado gratuitamente. Este banco est´ dispon´ em formatos texto e do a ıvel Microsoft Access. O Agenda Nutricional utilizou o Standard Reference 19, de agosto de 2006 [8]. Para modelar o banco de dados, foi utilizado o banco do USDA como base. Neste modelo temos os elementos Nutriente, Produto e Unidade de Medida. Cada nutriente possui uma unidade de medida padr˜o. Um produto ´ composto por diversos nutrientes; a e a quantidade de cada nutriente ´ indicada a partir de uma quantidade de produto, numa e determinada unidade de medida. Figura 4: Modelo de dados para os produtos e nutrientes Por exemplo, uma unidade de abacaxi cont´m 476 kcal. e Figura 5: Exemplo de rela¸ao entre as informa¸oes, no modelo de dados proposto c˜ c˜ A partir do modelo proposto para o sistema Agenda Nutricional, foi desenvolvido um m´todo de migra¸˜o de dados das tabelas do Microsoft Access para o banco de dados do e ca sistema. O processo ´ o descrito: e
  • 22. 16 • Criaram-se as consultas desejadas no MS-Access, de acordo com os dados que deseja- se importar. Por exemplo, foi criada uma consulta que retorna uma lista dos pro- dutos dispon´ ıveis e sua composi¸˜o. ca • As consultas foram executadas e os resultados salvos em arquivos textos tabulados. • Desenvolveu-se, em Java, uma ferramenta de migra¸˜o que lˆ os arquivos textos ca e tabulados e gera os comandos SQL para inser¸˜o dos dados no banco de dados do ca sistema Agenda Nutricional, granvando em arquivos texto estes comandos. • Os arquivos SQL foram executados no gerenciador de banco de dados escolhido e os dados importados com sucesso. Os pr´ximos passos, seguindo o cronograma estabelecido para o projeto, foram im- o plementar todas as funcionalidades do sistema que n˜o dependessem do c´lculo que seria a a realizado pelo applet - que ainda necessitava adapta¸˜es. Para a apresenta¸˜o, optamos co ca por utilizar as ferramentas do Java Swing. Isto trouxe independˆncia de plataforma ` e a aplica¸˜o e reduziu a necessidade de adapta¸˜es para os diversos sistemas operacionais ca co que o usu´rio pode utilizar. a A interface gr´fica foi desenvolvida de forma a utilizar os padr˜es de interface conheci- a o dos em aplica¸˜es comerciais. O uso de m´ ltiplas janelas independentes foi desconsiderado co u pois a maioria do p´ blico est´ acostumada a aplica¸˜es que gerenciam janelas internas. u a co Por isto, a camada de apresenta¸˜o foi desenhada de forma a utilizar janelas internas na ca aplica¸˜o - modelo MDI. Isto trouxe maior controle das janelas e ampliou o n´ mero de ca u janelas que o usu´rio pode manter abertas em seu campo visual. A aparˆncia utiliza o vi- a e sual padr˜o do sistema operacional utilizado pelo usu´rio, evitando o desconforto causado a a pela mudan¸a brusca de padr˜o de telas. c a
  • 23. 17 Figura 6: Agenda Nutricional: Controle de m´ ltiplas janelas internas u Foram utilizados padr˜es de projeto (Design patterns) que facilitaram a implementa¸˜o o ca de diversas caracter´ ısticas da interface. Todas as janelas implementam o padr˜o Singleton, a n˜o permitindo m´ ltiplas instˆncias da mesma janela durante a execu¸˜o do sistema. a u a ca Desta forma, economiza-se mem´ria do computador, pois a m´quina virtual do Java o a consome muita mem´ria para construir a janela. Assim, utilizamos o padr˜o Composite o a para armazenar as instˆncias das janelas e reduzir o tempo de abertura das mesmas. a Os conceitos de Orienta¸˜o a Objetos foram aplicados amplamente, inclusive no de- ca senho da interface. Observando o pacote apresenta¸˜o, podemos notar o uso de abstra¸˜o, ca ca heran¸a e encapsulamento, que s˜o os trˆs pilares da orienta¸˜o a objetos. c a e ca A classe abstrata apresentacao.adicionais.JanelaInterna implementa os padr˜es Sin- o gleton e Composite. Ela cont´m referˆncia a todas as janelas abertas do sistema. Esta e e classe gerencia todas as janelas internas da aplica¸˜o. Ela tamb´m ´ a classe m˜e de todas ca e e a as janelas de cadastro e consulta. No pacote apresentacao.consultas, possu´ ımos uma classe abstrata ConsultaForm que
  • 24. 18 ´ filha de apresentacao.adicionais.JanelaInterna e m˜e de todas as classes Consulta. Esta e a classe determina o leiaute padr˜o das janelas de consulta e todas as telas de consulta a herdam suas caracter´ ısticas. Figura 7: Agenda Nutricional: Janela padr˜o de consulta de registros a A ultima tarefa do projeto foi a adapta¸˜o do applet JMPS para realizar o c´lculo do ´ ca a m´todo Simplex, conforme pode ser visto nas se¸˜es seguintes. e co 3.2.2 O funcionamento do Applet O sistema Java Mathematical Programming Suite - JMPS [1] ´ um sistema de com- e posi¸˜o muito simples. Bochenek n˜o utilizou arquiteturas complexas e n˜o utilizou-se ca a a de recursos como pacotes e estruturas mais complexas para organizar o sistema. Isto dificultou o entendimento do software no in´ ıcio, pois o sistema n˜o apresentava nenhuma a documenta¸˜o ou estrutura de referˆncia que pudesse ser utilizada. ca e Como o JMPS ´ um applet e n˜o foi desenvolvido como um componente reaproveit´vel, e a a as camadas de neg´cio e apresenta¸˜o estavam mescladas, ou seja, n˜o havia separa¸˜o o ca a ca
  • 25. 19 formal entre as a¸˜es de apresenta¸˜o e de neg´cio. Se observarmos a arquitetura pro- co ca o posta do Agenda Nutricional, veremos que existe completa separa¸˜o entre neg´cio e ca o apresenta¸˜o, o que nos d´ liberdade para reutilizar a camada de neg´cios em outros pro- ca a o jetos, sem necessidade de adapta¸˜es - por exemplo, se quisermos distribuir uma vers˜o co a web do Agenda Nutricional, basta reprojetar a camada de apresenta¸˜o e de servi¸os, pois ca c os dados ser˜o tratados da mesma maneira, independente da forma como estes dados ser˜o a a apresentados. Isto n˜o ocorre no sistema JMPS, por isto houve necessidade de grande a adapta¸˜o do c´digo, inclusive para n˜o prejudicar a arquitetura do Agenda Nutricional. ca o a O primeiro passo foi entender como o JMPS funciona. Para isto, utilizamos as equa¸˜es co que ele traz de exemplo e inserimos tamb´m equa¸˜es retiradas da bibliografia de re- e co ferˆncia. Vamos apresentar neste trabalho a resolu¸˜o passo-a-passo de uma equa¸˜o e ca ca sugerida pelo sistema JMPS e, logo em seguida, a forma como ele monta uma nova equa¸˜o, por exemplo, inserida pelo usu´rio - esta montagem ser´ utilizada internamente ca a a pelo Agenda Nutricional para iniciar o c´lculo. a Um dos exemplos propostos pelo JMPS ´ o seguinte problema de otimiza¸˜o: e ca maxz = 3x1 + 5x2 x1 ≤ 4 2x2 ≤ 12 (3.1) s.a. 3x1 + 2x2 ≤ 18 x1 ≥ 0 x2 ≥ 0 O primeiro quadro do Simplex ´ montado: e Figura 8: JMPS: O problema do prot´tipo: quadro inicial do Simplex o Escolhe-se a vari´vel que ser´ utilizada no pivotamento: a a
  • 26. 20 Figura 9: JMPS: O problema do prot´tipo: primeira itera¸˜o o ca Realiza-se o pivotamento e os valores da linha s˜o recalculados (dividindo-se o valor a pelo valor do pivot): Figura 10: JMPS: O problema do prot´tipo: pivoteamento da linha o O restante da tabela ´ ajustado: e Figura 11: JMPS: O problema do prot´tipo: ajuste das demais linhas da tabela o Finaliza-se a itera¸˜o: ca Figura 12: JMPS: O problema do prot´tipo: primeira itera¸ao finalizada o c˜ Nova itera¸˜o ´ feita, seguindo os mesmos passos da itera¸˜o anterior. Neste problema, ca e ca s˜o somente necess´rias duas itera¸˜es para chegar-se ao resultado ´timo: a a co o Figura 13: JMPS: O problema do prot´tipo: resultado otimo o ´
  • 27. 21 O sistema tamb´m oferece a resolu¸˜o atrav´s do m´todo Gr´fico, para o mesmo e ca e e a problema: Figura 14: JMPS: Solu¸ao do problema atrav´s do m´todo Gr´fico c˜ e e a O JMPS possui uma funcionalidade de inclus˜o de problemas novos. Estes problemas a s˜o inseridos atrav´s de uma interface pr´pria e podem ser utilizados na funcionalidade a e o de solu¸˜o pelos m´todos Simplex e Gr´fico, conforme o exemplo anterior. A interface ca e a para inserir o novo problema ´ muito simples: e Figura 15: JMPS: Edi¸ao de problema de otimiza¸ao c˜ c˜ O sistema solicita o n´ mero de vari´veis do problema e o n´mero de restri¸˜es. Con- u a u co forme esta informa¸˜es, s˜o solicitadas a fun¸˜o a ser otimizada, o m´todo (minimiza¸˜o co a ca e ca ou maximiza¸˜o) e as restri¸˜es. O problema, ent˜o, est´ pronto para ser solucionado ca co a a atrav´s do m´todo Simplex ou Gr´fico. e e a Para efeito ilustrativo, reorganizamos as classes de implementa¸˜o do JMPS em pa- ca cotes, de acordo com seus objetivos e similaridades:
  • 28. 22 Figura 16: Estrutura interna do sistema JMPS No pacote applet, concentramos as classes principais de apresenta¸˜o, que gerenciam ca as telas do sistema JMPS e tratam da exibi¸˜o dos dados. O pacote methods cont´m ca e as classes principais dos m´todos propostos pelo JMPS - o m´todo Big M possui classe e e mas n˜o foi completamente implementado e n˜o possui apresenta¸˜o no applet. Os pa- a a ca cotes misc e segundo cont´m classes que s˜o compartilhadas pelos m´todos do JMPS. e a e Numa compara¸˜o com a arquitetura adotada pelo Agenda Nutricional, estas classes rep- ca resentariam as camadas de neg´cios e servi¸os. A dificuldade em separar apresenta¸˜o o c ca de neg´cios no JMPS ocorreu principalmente pelo fato de que mensagens ao usu´rio s˜o o a a tratadas nas classes do pacote misc e n˜o somente no pacote applet, como seria de se a esperar. Trataremos das classes importantes ao Simplex na pr´xima se¸˜o. o ca 3.2.3 Adaptando o applet para o sistema Agenda Nutricional e vice-versa A primeira tarefa de adapta¸˜o foi tratar o JMPS de forma a extrair o componente ca de c´lculo de dentro do applet. Assim, analizamos a estrutura do JMPS, retiramos as a diretivas de apresenta¸˜o e incorporamos no Agenda Nutricional. ca O JMPS utiliza diversas classes para construir um problema a ser calculado. Esta estrutura ´ composta pelas classes: e
  • 29. 23 • Constraint - gerencia as restri¸˜es co • ComplexConstraint - cont´m os dados de uma restri¸˜o e ca • ConstraintContainer - cont´m todas as restri¸˜es de um problema e co • SimpleConstraint - gerencia restri¸˜es com uma unica vari´vel co ´ a • ZFunction - fun¸˜o a ser otimizada ca • TableData - tabela que armazena os valores a serem manipulados na otimiza¸˜o ca • SimplexMethod - implementa o m´todo Simplex e • MathUtil - conjunto de opera¸˜es matem´ticas necess´rias ao m´todo Simplex co a a e • Number - gerencia os valores utilizados no c´lculo. Internamente, trata todos os a valores como ponto flutuante. Estas estrutura foram adaptadas e adicionadas ao Agenda Nutricional no pacote ne- gocios.dieta.calculo, conforme abaixo: Figura 17: Pacote calculo
  • 30. 24 A classe negocios.dieta.calculo.CalculoDietaOtimizada ´ chamada pela classe nego- e cios.dieta.DietaPrescrita no momento em que est´ preparando os dados para enviar para a a camada de persistˆncia. A classes CalculoDietaPersonalizada recebe um objeto Di- e etaPrescrita que cont´m todos os produtos e a dieta de referˆncia indicada pelo usu´rio e e a do sistema. A classe CalculoDietaOtimizada cria instˆncias de: a • ZFunction: a fun¸˜o a ser otimizada ´ constru´ utilizando-se somente os nutrientes ca e ıda presentes na dieta de referˆncia; cada produto ´ uma vari´vel da fun¸˜o principal e e a ca e a quantidade do nutriente de referˆncia presente no produto ´ utilizado como e e coeficiente da vari´vel equivalente na equa¸˜o. a ca • ConstraintContainer: o sistema gera uma restri¸˜o para cada nutriente da dieta de ca referˆncia. e • TableData: ´ criada uma instˆncia vazia; ´ neste objeto que ser˜o armazenados os e a e a valores finais do c´lculo. a Para realizar o c´lculo, o JMPS utiliza os valores armazenados em TableData, as a restri¸˜es e a fun¸˜o Z. O c´lculo sobre estes valores (atrav´s dos pivotamentos) determina co ca a e o crit´rio de parada e o t´rmino do c´lculo, chegando ao resultado ´timo. e e a o Foi necess´rio realizar diversas adapta¸˜es no c´digo do JMPS e no modelo de dados a co o do sistema Agenda Nutricional, para que os dois pudessem se comunicar adequadamente. O controle de fluxo do c´lculo do Simplex estava nas classes de apresenta¸˜o, pois a cada a ca itera¸˜o eram apresentadas mensagens ao usu´rio (conforme pode ser visto na se¸˜o an- ca a ca terior). No JMPS a classe SimplexMethod se ocupa somente dos c´lculos; toda a regra a do algoritmo est´ fora da classe, neste caso, na classe de apresenta¸˜o. Para que n˜o hou- a ca a vesse impacto no resultado, optou-se por n˜o realizar esta altera¸˜o neste momento, pois a ca requer um estudo mais delicado do JMPS que n˜o era poss´ de encaixar no cronograma a ıvel do projeto. Assim, limitamo-nos a incluir um m´todo privado na classe CalculoDietaO- e timizada que realiza as chamadas aos m´todos corretos do Simplex, de acordo com a e l´gica do JMPS. N˜o havia sido previsto vari´veis de controle na dieta de referˆncia para o a a e gerenciar o m´todo de c´lculo (minimiza¸˜o e maximiza¸˜o) e indicar o produto de re- e a ca ca ferˆncia. Tais controles foram adicionados para que pudesse ser realizado o acoplamento e dos dois sistemas.
  • 31. 25 Observamos que n˜o houve impacto no tempo de resposta da prescri¸˜o ap´s a inclus˜o a ca o a dos mecanismos de c´lculos usando o Simplex. O tempo que o algoritmo utilizou para a realizar os c´lculos ´ impercept´ ao usu´rio, principalmente pelo fato de tal mecanismo a e ıvel a estar embutido na a¸˜o de persistˆncia dos dados no banco de dados, que ´ uma opera¸˜o ca e e ca lenta, j´ que realiza opera¸˜es de leitura e grava¸˜o de disco. a co ca
  • 32. 26 4 Conclus˜o a A implementa¸˜o do Simplex utilizada n˜o impactou no desempenho geral do sistema e ca a trouxe redu¸˜o da margem de erro nos c´lculo, pois n˜o foram feitos c´lculos aproximados, ca a a a mas utilizou-se um algoritmo de otimiza¸˜o comprovadamente eficiente. ca Apesar de ainda ser necess´rio uma s´rie de ajustes arquiteturais no cocmponente a e JMPS, a utiliza¸˜o deste componente ´ muito simples. Notamos durante o uso e an´lise do ca e a JMPS que existem liga¸˜es entre as classes principais que provavelmente s˜o desnecess´rias. co a a Por exemplo, para o c´lculo do Simplex, n˜o seria necess´rio utilizar quatro objetos de a a a restri¸˜o diferentes, mas somente um seria o suficiente para o c´lculo adequado. Uti- ca a lizar padr˜es de projeto, como o Composite provavelmente ajudaria na performance e o simplificaria ainda mais o componente. Pudemos obsevar que a implementa¸˜o de algoritmos matem´ticos requer estudos ca a aplicados do algoritmo e da linguagem de programa¸˜o a ser utilizada e adapta¸˜es s˜o ca co a necess´rias. Utilizar-se de abstra¸˜es ´ imprescind´ a co e ıvel para identificar os objetos mais prov´veis na manipula¸˜o dos dados produzidos e consumidos pelo m´todo selecionado. a ca e No caso do Simplex, selecionado para uso neste projeto, abstraiu-se a fun¸˜o Z (fun¸˜o a ca ca ser otimizada) e as restri¸˜es (equa¸˜es que restringem o espectro dos dados). co co Percebemos que, se n˜o for prevista na fase de projeto a utiliza¸˜o de algum m´todo a ca e espec´ ıfico, como foi o caso deste projeto, o impacto de incluir tal m´todo no sistema e ´ muito alto, pois impacta no modelo de dados, nos casos de uso, no projeto em si e (componentes, pacotes e classes) e na interface ao usu´rio. a Entretanto, pudemos notar que ´ totalmente vi´vel a utiliza¸˜o de modelos matem´ticos e a ca a no cotidiano de desenvolvimento de software e estes modelos devem ser considerados nos ´ primeiros est´gios da engenharia de software. E importante que o analista de requisitos a tenha conhecimento de tais modelos, podendo identificar potenciais utilizadores. Ao ar- quiteto e projetista ´ ainda mais importante possuir tal conhecimento, pois pode incluir na e arquitetura e no projeto do sistema o uso de padr˜es de projeto e de m´todos matem´ticos o e a que solucionem os problemas levantados pelo analista de requisitos, facilitando, assim, o uso de tais mecanismos no desenvolvimento do sistema.
  • 33. 27 Gloss´rio a .NET Plataforma de desenvolvimento de software da Microsoft, concorrente do Java. O .NET fornece diversas ferramentas para o desenvolvimento de software, por´m seu ponto fraco ainda ´ a portabilidade - assim como o e e Java, o .NET trabalha em diversos contextos, mas n˜o possui compilador a para outros sistemas operacionais que n˜o o da Microsoft, apesar de estar a em fase de desenvolvimento dos mesmos. API Application Programming Interface. Interface para o c´digo-fonte de uma o aplica¸˜o ou biblioteca; comp˜e a documenta¸˜o de desenvolvimento. ca o ca Applet Aplica¸˜o executada dentro do contexto de outra aplica¸˜o, geralmente ca ca um navegador de internet. Caloria Unidade de medida de energia. Framework Conjunto de c´digos, modelos, bilbiotecas, componentes, etc, reutiliz´veis o a que ajudam no desenvolvimento de software. GNU O Projeto GNU tem por objetivos desenvolver um sistema operacional do tipo Unix inteiramente com software livre. Os sistemas Linux s˜o do tipo a GNU. GPL GNU Public Licence. Licen¸a de software mais utilizada atualmente em c projetos de software livre; em resumo, protege a liberdade do software, garantindo que o software distribu´ via GPL possui c´digo aberto e ıdo o pode ser distribu´ livremente. ıdo Hibernate Servi¸o de persistˆncia e consulta a bancos de dados relacionais ou de c e objetos com alto desempenho. Pode ser utilizado com Java e com .NET.
  • 34. 28 Home Office Tendˆncia mundial de metodologia de trabalho, onde a pessoa opta por e trabalhar em casa. IDE Integrated Development Environment - Ambiente integrado de desenvolvi- mento. Software utilizado para auxiliar e agilizar o desenvolvimento de software. Geralmente oferece ferramentas de auto-complemento, ajuda online e dicas. iReport Ferramenta visual para projetar relat´rios para o Jasper. o Jasper Ferramenta de gera¸˜o de relat´rios para Java. ca o Java Linguagem de programa¸˜o da Sun Microsystems, cujo compilador ´ dis- ca e tribu´ gratuitamente. O Java tem como principal caracter´ ıdo ıstica a porta- bilidade - existem vers˜es do compilador para diversos sistemas opera- o cionais; al´m disto, o Java permite trabalhar com ambientes texto, gr´fico, e a web e port´teis. a JDBC API para Java que define o modo como um cliente (aplica¸˜o) acessa um ca banco de dados. MDI Multiple Document Interface. M´todo de organiza¸˜o de janelas que con- e ca siste em uma janela principal (gerenciador) e n janelas filhas, controladas pela janela principal e dispostas de forma a permanecerem internas ` janela a principal. Neste modelo, todas as janelas do sistema permanecem juntas. SDK Software Development Kit. Conjunto de ferramentas de desenvolvimento utilizadas para criar aplica¸˜es, frameworks, consoles, etc. co Sistemas de controle de vers˜o a Software espec´ ıfico utilizado para gerenciar as altera¸oes realizadas em um c˜ software em desenvolvimento. Os sistemas de controle de vers˜o fornecem a ferramentas para acompanhar as altera¸˜es realizadas, voltar uma vers˜o co a do c´digo, etc. Muito utilizado em ambientes de m´ ltiplos desenvolve- o u dores.
  • 35. 29 Software de prateleira Software produzido com caracter´ ısticas gen´ricas, com o objetivo de ser e distribu´ em larga escala. Geralmente propriet´rio, ou seja, desenvolvido ıdo a por uma empresa e vendido sob licen¸as restritas de uso. c Software house Empresa especializada em desenvolvimento de software. F´brica de soft- a ware. SoureForge.net O maior site de desenvolvimento de software livre no mundo, atualmente. Hospeda mais de 100.000 projetos, fornecendo diversas ferramentas de apoio ao desenvolvimento, como gerenciador de tarefas, gerenciador de bugs, f´runs, sistemas de controle de vers˜o, etc. o a
  • 36. 30 Referˆncias Bibliogr´ficas e a [1] BOCHENEK, Michael. The Java Mathematical Programming Suite . Dispon´ em: http://sourceforge.net/projects/javamathprog/ ıvel [2] COIN-OR. CLP Component . Dispon´ ıvel em: http://www.coin- or.org/Clp/faq.html [3] DEAN, Warren. A industrializa¸˜o durante a Rep´blica Velha in Hist´ria ca u o Geral da Civiliza¸˜o Brasileira: III. O Brasil Republicano: 1. Estrutura de poder e ca economia (1889-1930), 4a edi¸˜o . S˜o Paulo: Difel (1985). ca a [4] Departamento de alimentos e nutri¸˜o experimental da Faculdade de Ciˆncias Far- ca e macˆuticas - USP. Tabela de brasileira de composi¸˜o de alimentos . Projeto e ca Integrado de composi¸˜o de alimentos. Universidade de S˜o Paulo. Dispon´ em: ca a ıvel http://www.fcf.usp.br/tabela/index.asp [5] GNU Linear Programming Kit. GLPK Component . Dispon´ ıvel em: http://www.gnu.org/software/glpk [6] LACHTERMACHER, Gerson, Pesquisa Operacional na tomada de decis˜es. S˜o o a Paulo: Campus (2005). [7] PATR´ ICIO, Jo˜o. M´todo Simplex a e in Investiga¸˜o operacional . Ano letivo ca 2006/2007. Dispon´ em: http://www.aim.estt.ipt.pt/ jmmp/InvestOperacional/ ıvel [8] US Department of Agriculture. Composition od Foods Raw, Pro- cessed, Prepared. USDA National Nutrient Database for Stan- dard Reference, Release 19. Baltimore: August, 2006. Dispon´ ıvel em: http://www.nal.usda.gov/fnic/foodcomp/Data/HG72/hg72.html