aplicação comercial de otimização de funções usando método de solução simplex, com foco em...

36
Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸ c˜ao Tecnol´ogica-CESET Aplicac ¸ ˜ ao comercial de otimizac ¸ ˜ ao de func ¸ ˜ oes usando m ´ etodo de soluc ¸ ˜ ao Simplex, com foco em sistemas de sa ´ ude nutricional e diet ´ etica Vanessa Oliveira Campos Limeira 2007

Upload: vanessa-campos

Post on 18-Dec-2014

907 views

Category:

Documents


0 download

DESCRIPTION

Eficiˆencia e confiabilidade de resultado s˜ao as duas caracter´ısticas procuradas com maior frequˆencia nos softwares atualmente. Desenvolvedores de software est˜ao cada vez 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´apida e precisa ao usu´ario, os desenvolvedores est˜ao `a procura de algoritmos que tragam esta caracter´ıstica. Os algoritmos matem´aticos que oferecem a modelagem de dados est˜ao sendo cada vez mais procurados para atingir este objetivo. Este trabalho aplica o algoritmo Simplex em uma situa¸c˜ao comum do cotidiano de uma software house , mostrando a usabilidade da modelagem matem´atica para solu¸c˜ao de problemas complexos.

TRANSCRIPT

Page 1: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

Universidade Estadual de Campinas - UNICAMP Centro Superior de Educacao

Tecnologica - CESET

Aplicacao comercial de otimizacaode funcoes usando metodo desolucao Simplex, com foco em

sistemas de saude nutricional edietetica

Vanessa Oliveira Campos

Limeira

2007

Page 2: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

i

Universidade Estadual de Campinas - UNICAMP Centro Superior de Educacao

Tecnologica - CESET

Aplicacao comercial de otimizacaode funcoes usando metodo desolucao Simplex, com foco em

sistemas de saude nutricional edietetica

Vanessa Oliveira Campos

Trabalho de Graduacao Interdisciplinar (TGI)

apresentado ao Centro Superior de Educacao Tecnologica

- CESET como requisito de conclusao do Curso de

Tecnologia em Informatica.

Orientador: Marli Gomes de Freitas Hernandes

Limeira

2007

Page 3: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

ii

Aos meus amigos Elaine, Fernando e Marcela, e a minha irma Lılian.

Page 4: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

iii

”Quis custodiet ipsos custodes?”

Juvenal

Page 5: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

iv

Sumario

Lista de figuras v

Resumo (Abstract) 1

1 Introducao 2

2 Metodologia e tecnologias envolvidas 3

3 Solucao do problema 8

4 Conclusao 26

Glossario 27

Referencias Bibliograficas 30

Page 6: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

v

Lista de Figuras

Figura 1: Dependencia entre os pacotes do Agenda Nutricional . . . . . . . . . . 12

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 relacao entre as informacoes, no modelo de dados proposto 15

Figura 6: Agenda Nutricional: Controle de multiplas janelas internas . . . . . . 17

Figura 7: Agenda Nutricional: Janela padrao de consulta de registros . . . . . . 18

Figura 8: JMPS: O problema do prototipo: quadro inicial do Simplex . . . . . . 19

Figura 9: JMPS: O problema do prototipo: primeira iteracao . . . . . . . . . . . 20

Figura 10: JMPS: O problema do prototipo: pivoteamento da linha . . . . . . . 20

Figura 11: JMPS: O problema do prototipo: ajuste das demais linhas da tabela 20

Figura 12: JMPS: O problema do prototipo: primeira iteracao finalizada . . . . 20

Figura 13: JMPS: O problema do prototipo: resultado otimo . . . . . . . . . . . 20

Figura 14: JMPS: Solucao do problema atraves do metodo Grafico . . . . . . . . 21

Figura 15: JMPS: Edicao de problema de otimizacao . . . . . . . . . . . . . . . 21

Figura 16: Estrutura interna do sistema JMPS . . . . . . . . . . . . . . . . . . . 22

Figura 17: Pacote calculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Page 7: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

1

Resumo (Abstract)

Eficiencia e confiabilidade de resultado sao as duas caracterısticas procuradas com

maior frequencia nos softwares atualmente. Desenvolvedores de software estao cada vez

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

rapida e precisa ao usuario, os desenvolvedores estao a procura de algoritmos que tragam

esta caracterıstica.

Os algoritmos matematicos que oferecem a modelagem de dados estao sendo cada vez

mais procurados para atingir este objetivo. Este trabalho aplica o algoritmo Simplex em

uma situacao comum do cotidiano de uma software house, mostrando a usabilidade da

modelagem matematica para solucao de problemas complexos.

Page 8: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

2

1 Introducao

Todos os dias vemos novas tecnologias surgirem, se aprimorarem. Com elas vem o ciclo

vicioso de aprimoramento de hardware e software. Novas teorias de todas as disciplinas da

area de exatas sao utilizadas na computacao, auxiliando neste aprimoramento contınuo.

O software faz parte de uma tendencia de evolucao constante. A Engenharia de

software esta constantemente se aperfeicoando, de forma a trazer cada vez mais tecnica

e metodos eficazes para melhorar o desempenho tanto do processo de desenvolvimento

quanto do software em si.

Desta forma, a matematica e a informatica se unem para trazer o que existe de melhor

em cada e traduzir tudo isto em um software de qualidade, que atenda nao somente as

necessidades do usuario, mas que utilize todo o potencial de hardware disponıvel atual-

mente. Fundacoes como a Computational Infrastructure for Operation Research , COIN-

OR, trabalham na criacao e disseminacao de solucoes computacionais para problemas

matematicos.

Este trabalho propoe demonstrar em uma aplicacao comercial, focada na area de saude,

mais especificamente em nutricao e dietetica, o uso de metodos e modelos matematicos

simples para solucionar problemas de calculos complexos; neste caso, otimizacao de prob-

lemas lineares.

A proposta e desenvolver um sistema que se utilize de um metodo de otimizacao

linear, o metodo Simplex, para calcular a quantidade de n produtos compondo uma

dieta nutricional, de acordo com a composicao nutricional de cada produto selecionado

para a dieta. O sistema utiliza dietas de referencia, que sao compostas por nutrientes em

quantidades especıficas, para calcular as quantidades de cada produto necessarios a suprir

a ingestao mınima ou maxima de nutrientes da dieta de referencia.

Este trabalho esta organizado em dois capıtulos: Metodologia e tecnologias envolvidas,

que descreve o modelo matematico escolhido (Simplex) e as tecnologias utilizadas no

desenvolvimento do sistema; Solucao do Problema, subdividindo em secoes que descrevem

o problema selecionado no projeto, a metodologia utilizada para desenvolver o sistema e

integrar os componentes selecionado. O trabalho ainda conta com Introducao, Conclusao,

Glossario e Referencias Bibliograficas.

Page 9: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

3

2 Metodologia e tecnologias envolvidas

2.1 O problema

A popularizacao do computador pessoal trouxe consigo uma necessidade de evolucao

do hardware e do software que atingiu largamente todos os nıveis da sociedade - desde

o ambiente domestico, com o largo uso do microcomputador para jogos e home office,

ate o ambiente do escritorio - independente do setor economico da empresa (industria,

comercio e governo). Com a constante adaptacao do software aos servicos disponıveis e

dos servicos aos softwares, criou-se um mercado virtualmente infinito para a producao de

software.

Atualmente, o mercado de software personalizado - software desenvolvido para um fim

especıfico, em contrapartida ao software de prateleira, feito com caracterısticas genericas

e distribuıdo em larga escala - tem apresentado um crescimento muito atrativo, que se

mostra com o grande numero de empresas desenvolvedoras de software que surgem a cada

ano. Com o mercado aberto a novos sistemas e a competicao causada pelo numero de

empresas especializadas, possuir um diferencial e importante.

Os softwares produzidos atualmente, de forma personalizada, possuem como requisitos

as regras do negocio do cliente, suas necessidades particulares. Sistemas de controle tem

dominado a demanda no mercado, pois sao servicos cruciais dentro das empresas, e estes

sistemas demandam, muitas vezes, calculos complexos envolvendo multiplas variaveis. A

demanda constante por performance e velocidade de resposta, aliada a pressao de cumprir

cronogramas apertados e o baixo conhecimento da equipe de desenvolvimento em solucoes

computacionais complexas, levam a utilizacao de calculos aproximados com altas taxas

de erro.

2.2 Programacao linear e metodo Simplex

A programacao linear apresenta uma solucao de baixo custo computacional e com

reducao da margem de erro para problemas de otimizacao com multiplas variaveis, como

e o caso de inumeros sistemas de controle - almoxarifado, financas, producao, etc.

Page 10: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

4

A programacao linear consiste em problemas de otimizacao que utilizam funcoes lin-

eares. Existem casos tıpicos de programacao linear, como o Problema de Transporte,

que foi utilizado inicialmente para determinar o menor custo de transporte entre diversas

fabricas de um produto e diversos centros consumidores [6]. Situacoes tıpicas de aplicacao

da programacao linear sao os casos onde se deseja, por exemplo, maximizar o lucro de

uma empresa, minimizar o custo de producao de um determinado produto, etc.

A programacao linear utiliza-se de um modelo matematico composto por uma funcao

objetiva e de restricoes tecnicas representadas por inequacoes. Por exemplo:

Lucro = 2x1 + 3x2 (2.1)

Restricoes

tecnicas

4x1 + 3x2 ≤ 10

6x1 − x2 ≥ 20

de nao negatividade

x1 ≥ 0

x2 ≥ 0

(2.2)

Neste modelo, encontramos os seguintes elementos:

• Variaveis de decisao: sao as variaveis que representam as decisoes a serem

tomadas. Por exemplo, em uma fabrica onde se deseja otimizar a producao para

maximizar o lucro, as variaveis de decisao representarao os produtos que ela produz.

No exemplo acima, as variaveis de decisao sao x1 e x2.

• Funcao objetivo: representa o objetivo do modelo. No nosso exemplo, maximizar

o lucro.

• Restricoes: sao representadas por inequacoes lineares e identificam as situacoes

que impoem limitacoes ao modelo. Existem dois tipos de restricoes: tecnicas, por

exemplo, quantidades mınimas que devem ser produzidas de um produto; e de nao

negatividade, que impedem que os valores encontrados para as variaveis de decisao

sejam negativos (nao e possıvel produzir -20 pecas).

Para solucionar os problemas de programacao linear existem diversos algoritmos defini-

dos, como Gauss-Jordan e Simplex. Estes algoritmos e suas variantes definem passos e

pontos de parada para o calculo de problemas de otimizacao. Neste trabalho, optamos

por utilizar o algoritmo Simplex para solucionar os problemas de otimizacao propostos.

Page 11: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

5

O Simplex e o algoritmo basico da programacao linear. Seu objetivo e transformar

uma matriz fornecida em outra padronizada, de acordo com a necessidade do problema.

A matriz fornecida e criada a partir das equacoes geradas de otimizacao e restricoes.

Utilizando o exemplo anterior, a matriz inicial ficaria:

4 3 10

6 −1 20

(2.3)

O Simplex soluciona o problema atraves de inumeras iteracoes, onde a cada iteracao

ocorre o pivotamento da matriz. Terminam-se as iteracoes quando a matriz atinge o

estado otimo, ou seja, quando atingem-se valores para as variaveis dentro de faixas pre-

estabelecidas. Por exemplo, num problema de maximizacao, quando todas as variaveis

encontraram-se com valores maiores ou iguais a zero, identifica uma matriz otima.

Para exemplificar o funcionamento do algoritmo Simplex, usaremos o problema[7]:

minx1 + 2x2

s.a.

x1 + x2 ≤ 2

x1 − x2 ≥ 1

x1 ≥ 0

x2 ≥ 0

(2.4)

Colocando-o na forma normal1:

minx1 + 2x2

s.a.

x1 + x2 + x3 = 2

x1 − x2 − x4 = 1

x1 ≥ 0

x2 ≥ 0

x3 ≥ 0

x4 ≥ 0

(2.5)

Multiplicando a equacao de restricao x1 - x2 - x4 = 1 por -1, obtem-se uma solucao

inicial, cuja matriz e identidade.

1A forma normal da equacao linear implica em transformar a inequacao em uma equacao, ou seja,

eliminar os sinais de desigualdade, acrescentando variaveis novas que complementem a solucao da equacao.

Tambem conhecida por forma canonica.

Page 12: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

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

Porem, esta solucao nao e admissıvel, pois b2 ≤ 0:

p =

0

−1

(2.6)

Introduzindo p como variavel x0 na nossa matriz, obtemos:

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 variavel x0 pela x4, pois esta e a que possui valor b negativo.

Obtem-se o quadro:

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 variavel que

deve ser escolhida para entrar na base, no lugar de x0, e aquela que tiver o coeficiente

mais positivo na linha da variavel x0. No nosso caso, esta variavel e a x1.

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 otimo e alcancado quando nao existem resultados negativos na linha do

z. Note os valores das variaveis: x1=0; x2=3; x3=0; x4=1.

Page 13: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

7

2.3 Arcabouco tecnologico

O conjunto tecnologico mais utilizado atualmente no desenvolvimento de software

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 necessario

para desenvolver e manter o software ser gratuito e estar disponıvel na internet para

aquisicao, incluindo toda a documentacao necessaria para seu entendimento.

Foi utilizado o conjunto de ferramentas:

• Linguagem de programacao: Java SDK 5.0

• Banco de dados: Compatıvel JDBC 2

• Infraestrutura de desenvolvimento:

– IDE: Eclipse 3.2

– Framework de banco de dados: Hibernate 3.0

– Geracao de relatorios: Jasper Reports 1.2.8

– Projeto de relatorios: iReport 1.2.8

– Controle de versao: CVS

O software produzido neste trabalho sera distribuıdo gratuitamente, sob licenca GPL,

atraves do servico de hospedagem de software SourceForge.net.

2Devido ao uso do Hibernate nos servicos de persistencia, utilizamos os bancos de dados PostgreSQL

8.2 e Microsoft SQL Server 2003 nos testes de desenvolvimento.

Page 14: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

8

3 Solucao do problema

3.1 O problema escolhido

O objetivo inicial deste trabalho e demonstrar a aplicacao de metodos matematicos

no cotidiano do desenvolvimento de software. A programacao linear, aplicada com o

metodo Simplex, e um dos mecanismos com maior potencial de aplicacao, e por isto, foi

o escolhido.

O problema selecionado refere-se a um problema de nutricao. Problemas de nutricao e

dietetica sao constantemente encontrados em livros de programacao linear nos exemplos e

exercıcios, geralmente de forma simplificada, usando duas ou ate no maximo tres variaveis.

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 e mais complexo, ja que envolve solucao com-

putacional implementada em um sistema, o que nos da uma margem de calculo maior,

ampliando o numero de variaveis que poderemos manipular.

A proposta e gerar uma dieta nutricional, baseada em componentes nutricionais basicos

e uma dieta de referencia (por exemplo, a dieta mınima de 2500 calorias, indicada em

qualquer produto consumıvel), utilizando a tabela nutricional de produtos consumıveis in-

dicada pelo nutricionista ou paciente usuario do sistema. O sistema implementa o metodo

Simplex e realiza os calculos a partir da dieta de referencia selecionada no momento da

construcao da dieta nutricional desejada.

Na proposta nao esta incluso tratamento de custo, peso, altura, idade ou quadro clınico

do paciente, ou seja, o sistema nao se propoe a utilizar-se de heurısticas clınicas para

selecionar a melhor dieta para um paciente. O objetivo e gerar uma dieta utilizando-se de

uma dieta de referencia, criada previamente, e de uma lista de produtos desejados para

consumo pelo paciente. Os produtos serao as variaveis do problema e as restricoes serao

geradas a partir da dieta de referencia. O fator de minimizacao ou maximizacao da dieta

sera fornecido, tambem, pela dieta de referencia - representado por um dos componentes

desta dieta. Por exemplo, numa dieta recomendada de 2500 calorias/dia, o elemento de

referencia e a caloria. Neste caso, nosso problema sera de maximizacao, ja que esta dieta

Page 15: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

9

regula uma ingestao mınima de 2500 calorias por dia. O sistema ira calcular a quantidade

mınima de cada produto que devera ser consumida pelo paciente, a fim de atingir as 2500

calorias mınimas desejadas.

3.2 Analise e solucao

Existem poucos componentes disponıveis prontos que implementem algoritmos de

otimizacao. Encontramos o componente CLP que implementa diversos algoritmos Sim-

plex linear e nao-linear, como o Simplex Primal, Dual Simplex, Simplex nao linear, entre

outros. O componente CLP foi desenvolvido utilizando a linguagem de programacao C++

e e distribuıdo gratuitamente pela Computational Infrastructure for Operations Research

(COIN-OR), uma fundacao sem fins lucrativos para ciencia e educacao, cuja missao e a de

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 aplicacoes comerciais ou nao.

Outro componente pesquisado foi o GLPK - GNU Linear Programming Kit [5], de-

senvolvido em C Ansi. O GLPK implementa os metodos Simplex (primal e dual), mas

foi descartado devido a tecnologia utilizada em seu desenvolvimento.

A escolha pelo arcabouco tecnologico guiou a escolha do componente a ser utilizado,

o que descartou o uso do CLP pela complexidade da integracao via chamada nativa de

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 integracao de multiplas linguagens, alem de dificultar a manutencao do software

pelo proprio fato de mesclar duas tecnologias diferentes, impactaria na performance final

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 otimizacao do desempenho de software.

O GLPK foi desconsiderado pela mesma razao e com o agravante de que nao foi desen-

volvido utilizando o paradigma da orientacao a objetos, o que aumentaria a dificuldade

de integracao com o Java.

Devido ao fato do objetivo nao ser a implementacao do metodo Simplex e, sim, a

demonstracao de seu uso, pesquisamos componentes desenvolvidos em Java, similares

Page 16: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

10

ao CLP. Nao foi possıvel localizar componentes, porem, localizamos um desenvolvedor

que realizou um projeto academico similar ao proposto neste trabalho, utilizando Java.

Michael Bochenek desenvolveu o applet Java Mathematical Programming Suite [1], porem,

pelo curto prazo estabelecido para o projeto, somente foi implementado o metodo Simplex

e o metodo Grafico para resolucao de problemas de programacao linear. Em contato com

Bochenek, os fontes do applet foram cedidos para serem adaptados a este projeto.

O applet JMPS utiliza o metodo Simplex para solucionar equacoes prontas ou qualquer

equacao informada pelo usuario. Iremos utilizar o applet fornecido por Bochenek para

demonstrar o uso do modelo Simplex proposto neste trabalho e ilustrar as iteracoes do

Simplex, alem de demonstrar a estrutura interna implementada, as adaptacoes necessarias

para ser utilizado neste projeto e o desempenho trazido ao calculo final proposto.

3.2.1 Criando o sistema Agenda Nutricional

O sistema Agenda Nutricional foi projetado para ilustrar o uso do metodo Simplex no

calculo da dieta nutricional. O objetivo do sistema Agenda Nutricional e o de fornecer fer-

ramentas que auxiliem na prescricao de uma dieta nutricional. Seus principais elementos

sao:

1. Cadastro de Produtos: permite manter o cadastro de todos os produtos (ali-

mentos) que estarao disponıveis para o paciente compor sua dieta.

2. Cadastro de Nutrientes: tabela de domınio, nao e possıvel alterar a lista de

nutrientes existentes atraves da aplicacao, porem o sistema fornece uma lista de

nutrientes padronizada [8].

3. Cadastro de Nutricionistas: tabela de domınio; o objetivo e possuir informacoes

do nutricionista necessarias a sua identificacao. A primeira fase do desenvolvimento

nao inclui o cadastro de nutricionistas; esta funcionalidade sera implementada em

fases posteriores.

4. Cadastro de Dietas de referencia: permite manter o cadastro das dietas que

serao utilizadas como referencia na prescricao ao paciente - uma dieta de referencia

e a dieta de 2500 calorias diarias para um adulto.

Page 17: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

11

5. Cadastro de Pacientes: o cadastro de pacientes permite manter informacoes

mınimas necessarias a identificacao do paciente e seu historico clınico.

6. Prescricao de dietas: permite ao nutricionista prescrever uma dieta a um pa-

ciente cadastrado; o sistema utiliza o metodo simplex para, implicitamente, calcular

as quantidades de cada produto selecionado pelo nutricionista, de acordo com a

quantidade mınima ou maxima de cada nutriente indicada na dieta de referencia,

otimizando de acordo com o produto de referencia da mesma.

O Agenda Nutricional utiliza um sistema de banco de dados para armazenar as in-

formacoes, porem nao e dependente de tecnologia de banco de dados, ou seja, o usuario

pode escolher um gerenciador de banco de dados da sua preferencia para utilizar o sistema

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 as configuracoes locais do usuario. Todas as configuracoes basicas do sistema po-

dem ser feitas atraves de arquivos texto, editaveis em qualquer editor de texto disponıvel

no computador do usuario.

Outra caracterıstica importante do sistema e a traducao para multiplos idiomas. O

sistema foi projetado para permitir a traducao de todos os termos para qualquer idioma.

Para isto, existe um arquivo de idiomas onde os termos sao categorizados. A versao

principal do sistema foi feita completamente em portugues brasileiro, porem, havendo a

necessidade de traducao para outro idioma, digamos, ingles, basta criar uma copia do

arquivo de idiomas original, traduzir os termos e configurar o sistema para o novo idioma;

ao reiniciar a aplicacao, o sistema identifica o idioma selecionado e utiliza o arquivo de

idiomas adequado.

A arquitetura do sistema e muito simples, porem utiliza-se de quatro camadas: ap-

resentacao, servicos, negocios e persistencia. As camadas estao distribuıdas de forma a

reduzir a interdependencia entre elas, assim:

Page 18: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

12

Figura 1: Dependencia entre os pacotes do Agenda Nutricional

A nıvel de implementacao, as chamadas entre as camadas ocorrem no sentido da

camada de apresentacao para a camada de persistencia, ou seja, as classes de apresentacao

fazem chamadas as classes de servicos, mas nao ocorre o inverso - servicos chamando

apresentacao. Tambem nao existe ligacao entre as camadas nao adjacentes, ou seja,

a camada de apresentacao desconhece a existencia da camada de negocios. Assim, as

camadas somente possuem comunicacao com as duas camadas adjacentes, o que facilita

a manutencao, pois e possıvel isolar um problema encontrado em uma camada.

Os erros ocorridos nas camadas mais internas sao encaminhados as camadas mais

externas atraves de excecoes e estas excecoes sao tratadas somente na camada de apre-

sentacao, onde o usuario toma conhecimento delas atraves de mensagens padronizadas.

As camadas de servicos e de negocios estao intimamente ligadas. Devido a baixa com-

plexidade da aplicacao, a camada de servicos foi simplificada, sendo apenas uma camada

de troca de mensagens, basicamente. Entretanto, a camada de servicos possui um forte

acoplamento com a camada de apresentacao. Por exemplo, escolheu-se apresentar os resul-

tados das consultas em forma de tabela na camada de apresentacao. Deste modo, decidiu-

se centralizar a criacao desta tabela na camada de servicos para que houvesse garantia de

que a tabela criada sempre fosse a mesma, com as mesmas colunas, comportamento, etc.

Assim, o servico implementado gera uma instancia do objeto javax.swing.JTable - tipica-

mente um elemento de apresentacao - com os dados resultantes da consulta solicitada na

camada de apresentacao.

Page 19: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

13

Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios

O acesso ao banco de dados e feito atraves do framework Hibernate, que faz a comu-

nicacao entre a aplicacao e o banco de dados. Alem de trazer a liberdade de tecnologia -

o Hibernate utiliza conexoes JDBC ao banco de dados, permitindo que o acesso seja feito

a qualquer gerenciador que possua driver JDBC disponıvel -, o Hibernate traz agilidade

na construcao da aplicacao pois ele cria todas as consultas e comandos de manipulacao de

dados utilizando uma adaptacao propria do SQL chamada HSQL. Ao desenvolvedor basta

criar os arquivos de mapeamento logico do banco de dados, indicando quais variaveis da

aplicacao estao ligadas a quais campos e tabelas do banco. Como o Hibernate somente

utiliza o arquivo de mapeamento, a aplicacao se torna independente de tecnologia de

banco de dados, sendo necessario somente indicar em um arquivo de configuracao proprio

do Hibernate qual o driver JDBC, o servidor onde o banco de dados esta instalado e o

usuario e senha de acesso.

Page 20: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

14

Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia

A estrutura de calculo do metodo Simplex foi embutida na camada de negocios, ja que

o calculo faz parte da logica interna e do conjunto de regras do sistema. Veremos esta

estrutura com mais detalhes na secao Adaptando o applet para o sistema Agenda

Nutricional e vice-versa.

Com a arquitetura definida, o componente de calculo do Simplex selecionado, iniciou-

se a pesquisa pela fonte de dados. A maior dificuldade foi encontrar uma fonte de dados

confiavel, pois para o funcionamento adequado do sistema, e necessario que a tabela

nutricional dos produtos esteja correta. O departamento de nutricao da Universidade

de Sao Paulo (USP) [4] disponibiliza consulta online a tabela nutricional dos alimentos

nacionais e de consumo nacional. Porem, nao ha possibilidade de fazer copia completa do

banco de dados. O objetivo era o de localizar uma base de dados confiavel que pudesse

ser importada para o Agenda Nutricional sem perda de informacao e sem impactar no

cronograma estabelecido para o projeto. Em prosseguimento a pesquisa, localizamos o

Banco de Composicao dos Alimentos do Departamento de Agricultura dos Estados Unidos

- USDA. O USDA disponibiliza o National Nutrient Database for Standard Reference ,

Page 21: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

15

que pode ser utilizado gratuitamente. Este banco esta disponıvel em formatos texto e do

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 padrao. Um produto e composto por diversos nutrientes;

a quantidade de cada nutriente e indicada a partir de uma quantidade de produto, numa

determinada unidade de medida.

Figura 4: Modelo de dados para os produtos e nutrientes

Por exemplo, uma unidade de abacaxi contem 476 kcal.

Figura 5: Exemplo de relacao entre as informacoes, no modelo de dados proposto

A partir do modelo proposto para o sistema Agenda Nutricional, foi desenvolvido um

metodo de migracao de dados das tabelas do Microsoft Access para o banco de dados do

sistema. O processo e o descrito:

Page 22: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

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

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

• Desenvolveu-se, em Java, uma ferramenta de migracao que le os arquivos textos

tabulados e gera os comandos SQL para insercao dos dados no banco de dados do

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 proximos passos, seguindo o cronograma estabelecido para o projeto, foram im-

plementar todas as funcionalidades do sistema que nao dependessem do calculo que seria

realizado pelo applet - que ainda necessitava adaptacoes. Para a apresentacao, optamos

por utilizar as ferramentas do Java Swing. Isto trouxe independencia de plataforma a

aplicacao e reduziu a necessidade de adaptacoes para os diversos sistemas operacionais

que o usuario pode utilizar.

A interface grafica foi desenvolvida de forma a utilizar os padroes de interface conheci-

dos em aplicacoes comerciais. O uso de multiplas janelas independentes foi desconsiderado

pois a maioria do publico esta acostumada a aplicacoes que gerenciam janelas internas.

Por isto, a camada de apresentacao foi desenhada de forma a utilizar janelas internas na

aplicacao - modelo MDI. Isto trouxe maior controle das janelas e ampliou o numero de

janelas que o usuario pode manter abertas em seu campo visual. A aparencia utiliza o vi-

sual padrao do sistema operacional utilizado pelo usuario, evitando o desconforto causado

pela mudanca brusca de padrao de telas.

Page 23: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

17

Figura 6: Agenda Nutricional: Controle de multiplas janelas internas

Foram utilizados padroes de projeto (Design patterns) que facilitaram a implementacao

de diversas caracterısticas da interface. Todas as janelas implementam o padrao Singleton,

nao permitindo multiplas instancias da mesma janela durante a execucao do sistema.

Desta forma, economiza-se memoria do computador, pois a maquina virtual do Java

consome muita memoria para construir a janela. Assim, utilizamos o padrao Composite

para armazenar as instancias das janelas e reduzir o tempo de abertura das mesmas.

Os conceitos de Orientacao a Objetos foram aplicados amplamente, inclusive no de-

senho da interface. Observando o pacote apresentacao, podemos notar o uso de abstracao,

heranca e encapsulamento, que sao os tres pilares da orientacao a objetos.

A classe abstrata apresentacao.adicionais.JanelaInterna implementa os padroes Sin-

gleton e Composite. Ela contem referencia a todas as janelas abertas do sistema. Esta

classe gerencia todas as janelas internas da aplicacao. Ela tambem e a classe mae de todas

as janelas de cadastro e consulta.

No pacote apresentacao.consultas, possuımos uma classe abstrata ConsultaForm que

Page 24: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

18

e filha de apresentacao.adicionais.JanelaInterna e mae de todas as classes Consulta. Esta

classe determina o leiaute padrao das janelas de consulta e todas as telas de consulta

herdam suas caracterısticas.

Figura 7: Agenda Nutricional: Janela padrao de consulta de registros

A ultima tarefa do projeto foi a adaptacao do applet JMPS para realizar o calculo do

metodo Simplex, conforme pode ser visto nas secoes seguintes.

3.2.2 O funcionamento do Applet

O sistema Java Mathematical Programming Suite - JMPS [1] e um sistema de com-

posicao muito simples. Bochenek nao utilizou arquiteturas complexas e nao utilizou-se

de recursos como pacotes e estruturas mais complexas para organizar o sistema. Isto

dificultou o entendimento do software no inıcio, pois o sistema nao apresentava nenhuma

documentacao ou estrutura de referencia que pudesse ser utilizada.

Como o JMPS e um applet e nao foi desenvolvido como um componente reaproveitavel,

as camadas de negocio e apresentacao estavam mescladas, ou seja, nao havia separacao

Page 25: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

19

formal entre as acoes de apresentacao e de negocio. Se observarmos a arquitetura pro-

posta do Agenda Nutricional, veremos que existe completa separacao entre negocio e

apresentacao, o que nos da liberdade para reutilizar a camada de negocios em outros pro-

jetos, sem necessidade de adaptacoes - por exemplo, se quisermos distribuir uma versao

web do Agenda Nutricional, basta reprojetar a camada de apresentacao e de servicos, pois

os dados serao tratados da mesma maneira, independente da forma como estes dados serao

apresentados. Isto nao ocorre no sistema JMPS, por isto houve necessidade de grande

adaptacao do codigo, inclusive para nao prejudicar a arquitetura do Agenda Nutricional.

O primeiro passo foi entender como o JMPS funciona. Para isto, utilizamos as equacoes

que ele traz de exemplo e inserimos tambem equacoes retiradas da bibliografia de re-

ferencia. Vamos apresentar neste trabalho a resolucao passo-a-passo de uma equacao

sugerida pelo sistema JMPS e, logo em seguida, a forma como ele monta uma nova

equacao, por exemplo, inserida pelo usuario - esta montagem sera utilizada internamente

pelo Agenda Nutricional para iniciar o calculo.

Um dos exemplos propostos pelo JMPS e o seguinte problema de otimizacao:

maxz = 3x1 + 5x2

s.a.

x1 ≤ 4

2x2 ≤ 12

3x1 + 2x2 ≤ 18

x1 ≥ 0

x2 ≥ 0

(3.1)

O primeiro quadro do Simplex e montado:

Figura 8: JMPS: O problema do prototipo: quadro inicial do Simplex

Escolhe-se a variavel que sera utilizada no pivotamento:

Page 26: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

20

Figura 9: JMPS: O problema do prototipo: primeira iteracao

Realiza-se o pivotamento e os valores da linha sao recalculados (dividindo-se o valor

pelo valor do pivot):

Figura 10: JMPS: O problema do prototipo: pivoteamento da linha

O restante da tabela e ajustado:

Figura 11: JMPS: O problema do prototipo: ajuste das demais linhas da tabela

Finaliza-se a iteracao:

Figura 12: JMPS: O problema do prototipo: primeira iteracao finalizada

Nova iteracao e feita, seguindo os mesmos passos da iteracao anterior. Neste problema,

sao somente necessarias duas iteracoes para chegar-se ao resultado otimo:

Figura 13: JMPS: O problema do prototipo: resultado otimo

Page 27: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

21

O sistema tambem oferece a resolucao atraves do metodo Grafico, para o mesmo

problema:

Figura 14: JMPS: Solucao do problema atraves do metodo Grafico

O JMPS possui uma funcionalidade de inclusao de problemas novos. Estes problemas

sao inseridos atraves de uma interface propria e podem ser utilizados na funcionalidade

de solucao pelos metodos Simplex e Grafico, conforme o exemplo anterior. A interface

para inserir o novo problema e muito simples:

Figura 15: JMPS: Edicao de problema de otimizacao

O sistema solicita o numero de variaveis do problema e o numero de restricoes. Con-

forme esta informacoes, sao solicitadas a funcao a ser otimizada, o metodo (minimizacao

ou maximizacao) e as restricoes. O problema, entao, esta pronto para ser solucionado

atraves do metodo Simplex ou Grafico.

Para efeito ilustrativo, reorganizamos as classes de implementacao do JMPS em pa-

cotes, de acordo com seus objetivos e similaridades:

Page 28: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

22

Figura 16: Estrutura interna do sistema JMPS

No pacote applet, concentramos as classes principais de apresentacao, que gerenciam

as telas do sistema JMPS e tratam da exibicao dos dados. O pacote methods contem

as classes principais dos metodos propostos pelo JMPS - o metodo Big M possui classe

mas nao foi completamente implementado e nao possui apresentacao no applet. Os pa-

cotes misc e segundo contem classes que sao compartilhadas pelos metodos do JMPS.

Numa comparacao com a arquitetura adotada pelo Agenda Nutricional, estas classes rep-

resentariam as camadas de negocios e servicos. A dificuldade em separar apresentacao

de negocios no JMPS ocorreu principalmente pelo fato de que mensagens ao usuario sao

tratadas nas classes do pacote misc e nao somente no pacote applet, como seria de se

esperar. Trataremos das classes importantes ao Simplex na proxima secao.

3.2.3 Adaptando o applet para o sistema Agenda Nutricional e

vice-versa

A primeira tarefa de adaptacao foi tratar o JMPS de forma a extrair o componente

de calculo de dentro do applet. Assim, analizamos a estrutura do JMPS, retiramos as

diretivas de apresentacao e incorporamos no Agenda Nutricional.

O JMPS utiliza diversas classes para construir um problema a ser calculado. Esta

estrutura e composta pelas classes:

Page 29: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

23

• Constraint - gerencia as restricoes

• ComplexConstraint - contem os dados de uma restricao

• ConstraintContainer - contem todas as restricoes de um problema

• SimpleConstraint - gerencia restricoes com uma unica variavel

• ZFunction - funcao a ser otimizada

• TableData - tabela que armazena os valores a serem manipulados na otimizacao

• SimplexMethod - implementa o metodo Simplex

• MathUtil - conjunto de operacoes matematicas necessarias ao metodo Simplex

• Number - gerencia os valores utilizados no calculo. Internamente, trata todos os

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

Page 30: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

24

A classe negocios.dieta.calculo.CalculoDietaOtimizada e chamada pela classe nego-

cios.dieta.DietaPrescrita no momento em que esta preparando os dados para enviar para

a camada de persistencia. A classes CalculoDietaPersonalizada recebe um objeto Di-

etaPrescrita que contem todos os produtos e a dieta de referencia indicada pelo usuario

do sistema. A classe CalculoDietaOtimizada cria instancias de:

• ZFunction: a funcao a ser otimizada e construıda utilizando-se somente os nutrientes

presentes na dieta de referencia; cada produto e uma variavel da funcao principal

e a quantidade do nutriente de referencia presente no produto e utilizado como

coeficiente da variavel equivalente na equacao.

• ConstraintContainer: o sistema gera uma restricao para cada nutriente da dieta de

referencia.

• TableData: e criada uma instancia vazia; e neste objeto que serao armazenados os

valores finais do calculo.

Para realizar o calculo, o JMPS utiliza os valores armazenados em TableData, as

restricoes e a funcao Z. O calculo sobre estes valores (atraves dos pivotamentos) determina

o criterio de parada e o termino do calculo, chegando ao resultado otimo.

Foi necessario realizar diversas adaptacoes no codigo do JMPS e no modelo de dados

do sistema Agenda Nutricional, para que os dois pudessem se comunicar adequadamente.

O controle de fluxo do calculo do Simplex estava nas classes de apresentacao, pois a cada

iteracao eram apresentadas mensagens ao usuario (conforme pode ser visto na secao an-

terior). No JMPS a classe SimplexMethod se ocupa somente dos calculos; toda a regra

do algoritmo esta fora da classe, neste caso, na classe de apresentacao. Para que nao hou-

vesse impacto no resultado, optou-se por nao realizar esta alteracao neste momento, pois

requer um estudo mais delicado do JMPS que nao era possıvel de encaixar no cronograma

do projeto. Assim, limitamo-nos a incluir um metodo privado na classe CalculoDietaO-

timizada que realiza as chamadas aos metodos corretos do Simplex, de acordo com a

logica do JMPS. Nao havia sido previsto variaveis de controle na dieta de referencia para

gerenciar o metodo de calculo (minimizacao e maximizacao) e indicar o produto de re-

ferencia. Tais controles foram adicionados para que pudesse ser realizado o acoplamento

dos dois sistemas.

Page 31: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

25

Observamos que nao houve impacto no tempo de resposta da prescricao apos a inclusao

dos mecanismos de calculos usando o Simplex. O tempo que o algoritmo utilizou para

realizar os calculos e imperceptıvel ao usuario, principalmente pelo fato de tal mecanismo

estar embutido na acao de persistencia dos dados no banco de dados, que e uma operacao

lenta, ja que realiza operacoes de leitura e gravacao de disco.

Page 32: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

26

4 Conclusao

A implementacao do Simplex utilizada nao impactou no desempenho geral do sistema e

trouxe reducao da margem de erro nos calculo, pois nao foram feitos calculos aproximados,

mas utilizou-se um algoritmo de otimizacao comprovadamente eficiente.

Apesar de ainda ser necessario uma serie de ajustes arquiteturais no cocmponente

JMPS, a utilizacao deste componente e muito simples. Notamos durante o uso e analise do

JMPS que existem ligacoes entre as classes principais que provavelmente sao desnecessarias.

Por exemplo, para o calculo do Simplex, nao seria necessario utilizar quatro objetos de

restricao diferentes, mas somente um seria o suficiente para o calculo adequado. Uti-

lizar padroes de projeto, como o Composite provavelmente ajudaria na performance e

simplificaria ainda mais o componente.

Pudemos obsevar que a implementacao de algoritmos matematicos requer estudos

aplicados do algoritmo e da linguagem de programacao a ser utilizada e adaptacoes sao

necessarias. Utilizar-se de abstracoes e imprescindıvel para identificar os objetos mais

provaveis na manipulacao dos dados produzidos e consumidos pelo metodo selecionado.

No caso do Simplex, selecionado para uso neste projeto, abstraiu-se a funcao Z (funcao a

ser otimizada) e as restricoes (equacoes que restringem o espectro dos dados).

Percebemos que, se nao for prevista na fase de projeto a utilizacao de algum metodo

especıfico, como foi o caso deste projeto, o impacto de incluir tal metodo no sistema

e muito alto, pois impacta no modelo de dados, nos casos de uso, no projeto em si

(componentes, pacotes e classes) e na interface ao usuario.

Entretanto, pudemos notar que e totalmente viavel a utilizacao de modelos matematicos

no cotidiano de desenvolvimento de software e estes modelos devem ser considerados nos

primeiros estagios da engenharia de software. E importante que o analista de requisitos

tenha conhecimento de tais modelos, podendo identificar potenciais utilizadores. Ao ar-

quiteto e projetista e ainda mais importante possuir tal conhecimento, pois pode incluir na

arquitetura e no projeto do sistema o uso de padroes de projeto e de metodos matematicos

que solucionem os problemas levantados pelo analista de requisitos, facilitando, assim, o

uso de tais mecanismos no desenvolvimento do sistema.

Page 33: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

27

Glossario

.NET Plataforma de desenvolvimento de software da Microsoft, concorrente do

Java. O .NET fornece diversas ferramentas para o desenvolvimento de

software, porem seu ponto fraco ainda e a portabilidade - assim como o

Java, o .NET trabalha em diversos contextos, mas nao possui compilador

para outros sistemas operacionais que nao o da Microsoft, apesar de estar

em fase de desenvolvimento dos mesmos.

API Application Programming Interface. Interface para o codigo-fonte de uma

aplicacao ou biblioteca; compoe a documentacao de desenvolvimento.

Applet Aplicacao executada dentro do contexto de outra aplicacao, geralmente

um navegador de internet.

Caloria Unidade de medida de energia.

Framework Conjunto de codigos, modelos, bilbiotecas, componentes, etc, reutilizaveis

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 sao do tipo

GNU.

GPL GNU Public Licence. Licenca de software mais utilizada atualmente em

projetos de software livre; em resumo, protege a liberdade do software,

garantindo que o software distribuıdo via GPL possui codigo aberto e

pode ser distribuıdo livremente.

Hibernate Servico de persistencia e consulta a bancos de dados relacionais ou de

objetos com alto desempenho. Pode ser utilizado com Java e com .NET.

Page 34: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

28

Home Office

Tendencia mundial de metodologia de trabalho, onde a pessoa opta por

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 relatorios para o Jasper.

Jasper Ferramenta de geracao de relatorios para Java.

Java Linguagem de programacao da Sun Microsystems, cujo compilador e dis-

tribuıdo gratuitamente. O Java tem como principal caracterıstica a porta-

bilidade - existem versoes do compilador para diversos sistemas opera-

cionais; alem disto, o Java permite trabalhar com ambientes texto, grafico,

web e portateis.

JDBC API para Java que define o modo como um cliente (aplicacao) acessa um

banco de dados.

MDI Multiple Document Interface. Metodo de organizacao de janelas que con-

siste em uma janela principal (gerenciador) e n janelas filhas, controladas

pela janela principal e dispostas de forma a permanecerem internas a janela

principal. Neste modelo, todas as janelas do sistema permanecem juntas.

SDK Software Development Kit. Conjunto de ferramentas de desenvolvimento

utilizadas para criar aplicacoes, frameworks, consoles, etc.

Sistemas de controle de versao

Software especıfico utilizado para gerenciar as alteracoes realizadas em um

software em desenvolvimento. Os sistemas de controle de versao fornecem

ferramentas para acompanhar as alteracoes realizadas, voltar uma versao

do codigo, etc. Muito utilizado em ambientes de multiplos desenvolve-

dores.

Page 35: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

29

Software de prateleira

Software produzido com caracterısticas genericas, com o objetivo de ser

distribuıdo em larga escala. Geralmente proprietario, ou seja, desenvolvido

por uma empresa e vendido sob licencas restritas de uso.

Software house

Empresa especializada em desenvolvimento de software. Fabrica de soft-

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, foruns, sistemas de controle de versao, etc.

Page 36: Aplicação comercial de otimização de funções usando método de solução Simplex, com foco em sistemas de saúde nutricional e dietética

30

Referencias Bibliograficas

[1] BOCHENEK, Michael. The Java Mathematical Programming Suite .

Disponıvel em: http://sourceforge.net/projects/javamathprog/

[2] COIN-OR. CLP Component . Disponıvel em: http://www.coin-

or.org/Clp/faq.html

[3] DEAN, Warren. A industrializacao durante a Republica Velha in Historia

Geral da Civilizacao Brasileira: III. O Brasil Republicano: 1. Estrutura de poder e

economia (1889-1930), 4a edicao . Sao Paulo: Difel (1985).

[4] Departamento de alimentos e nutricao experimental da Faculdade de Ciencias Far-

maceuticas - USP. Tabela de brasileira de composicao de alimentos . Projeto

Integrado de composicao de alimentos. Universidade de Sao Paulo. Disponıvel em:

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 decisoes. Sao

Paulo: Campus (2005).

[7] PATRICIO, Joao. Metodo Simplex in Investigacao operacional . Ano letivo

2006/2007. Disponıvel em: http://www.aim.estt.ipt.pt/ jmmp/InvestOperacional/

[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