313 Otimização de Rotas através de um Acesso Remoto

Propaganda
UM SISTEMA DE ACESSO REMOTO A BANCO DE DADOS
EMPREGANDO DISPOSITIVOS MÓVEIS
Bruno Savoini ¹ ², Ivan Roberto Santana Casella ², UFABC
¹ Aluno de IC voluntário
² Centro de Engenharia, Modelagem e Ciências Sociais Aplicadas
Resumo: Este artigo aborda a criação de um aplicativo
para dispositivos móveis, com a função de acessar
remotamente um Banco de Dados para obter rotas entre
estações do sistema de transporte da região
metropolitana de São Paulo. O aplicativo em questão é
desenvolvido na plataforma Java 2 Micro Edition, e se
comunica remotamente por meio da tecnologia Wap
com o Banco de Dados localizado em um servidor
desenvolvido na plataforma Java 2 Enterprise Edition. A
base de dados é obtida a partir do processamento que
visa determinar rotas ótimas utilizando o algoritmo de
Dijkstra.
Palavras Chave: Banco de Dados,
HttpConnection, Java, J2ME, J2SE.
Dijkstra,
3. Metodologia e Materiais
Este capítulo aborda as configurações, algoritmos e
modelagens utilizadas.
3.1. Perfil J2ME
A criação de um aplicativo J2ME se inicia pela
escolha da configuração do dispositivo e seu respectivo
perfil, que é a camada que define o conjunto mínimo de
interfaces de programa da aplicação. Em função do
dispositivo móvel selecionado (i.e. celular) e das
características do aplicativo, foi escolhida a
configuração CLDC-1.1 e o perfil MIDP-2.0 [1].
3.2. Estrutura Cliente - Servidor
1. Introdução
Com a evolução tecnológica dos dispositivos móveis
e o aumento da sua utilização, seus aplicativos passaram
a ganhar atenção entre usuários e desenvolvedores.
Estes aplicativos possuem grandes diferenças com
relação às aplicações Desktop, principalmente em
termos de conectividade e configuração de hardware.
As limitações destas aplicações variam desde o
tamanho da tela do dispositivo, configurações de
memória, processamento, e até mesmo duração da
bateria. Além destas limitações há problemas em
relação à conectividade com internet, e outros fatores
que fazem com que aplicativos para dispositivos móveis
tenham que ser muito bem planejados.
Devido a isto ainda não é grande a gama de
linguagens para estes dispositivos. Entre as linguagens
disponíveis está a J2ME (Java 2 Micro Edition),
desenvolvida pela Sun Microsystems, que é uma
adaptação da linguagem Java para que se possa lidar
com as questões relatadas anteriormente [1]. Os
aplicativos J2ME possuem a capacidade de se
conectarem remotamente por meio da especificação
WAP. Esta especificação possibilita a interação do
cliente com um servidor por meio de Bluetooth, GSM,
CDMA ou 3G [12].
O aplicativo elaborado tem a função de traçar rotas
entre as estações de metrô, trem e linhas de trólebus do
sistema de transporte metropolitano de São Paulo. A
estrutura empregada é do tipo cliente-servidor [1]. O
aplicativo base (Desktop) é o servidor, onde é
armazenado o BD, e o aplicativo móvel (celular) é o
cliente, onde o processamento é menos intenso
(Figura1).
2. Objetivo
Neste contexto, este trabalho apresenta um novo
aplicativo móvel desenvolvido em J2ME para a
obtenção da rota ótima entre duas estações quaisquer do
sistema de transporte metropolitano de São Paulo. O
objeto de estudo se concentra nas formas de conexão
remota entre o aplicativo e o banco de dados (BD), nas
características de armazenamento da base de dados no
servidor e na apresentação gráfica dos resultados.
Figura 1- Diagrama da aplicação Cliente Servidor [10]
O aplicativo base tem a função de calcular as rotas
entre as estações de origem e destino. As rotas de custo
mínimo (levando em consideração os pesos
estabelecidos em cada percurso) são obtidas pelo
algoritmo de Dijkstra [2]. Com a implementação do
mesmo, o servidor passa a atender às requisições de
modo a enviar o caminho ótimo para o cliente.
3.3. Modelagem do Grafo
Na modelagem utilizada, cada estação do mapa do
sistema de transporte [4] é um vértice de um grafo com
uma identificação (ID) e cada linha é uma aresta com
um peso.
Em um trecho do mapa, como a Figura 2, a
abstração nos levaria a um grafo como o mostrado na
Figura 3.
Tabela 1 – Atribuição dos Pesos
Peso
Representação
0
Não há ligação direta entre as estações
1
Ligação direta entre as respectivas
estações
2
Ligação direta para tróleibus
Esta padronização tem o objetivo de verificar se
existe ligação direta (aresta) entre duas estações
quaisquer ou não. Caso não exista, o valor atribuído é 0,
caso contrário, 1. O valor 2 passou a ser atribuído
apenas para uma passagem de um ponto qualquer para a
linha de trólebus, isto pelo fato de ser um meio de
transporte mais lento que os demais.
3.4. Algoritmo de Dijkstra
Figura 2 – Trecho do Mapa de Transportes
Metropolitano
O algoritmo de Dijkstra, desenvolvido por Edsger
W. Dijkstra em 1959, tem a função de receber um grafo,
e retornar caminhos ótimos [13], deste modo, a matriz
de adjacência apresentada anteriormente serve como
parâmetro para o algoritmo, executando a seguinte
rotina:
A partir do grafo G com custo p nas arestas, o
algoritmo de Dijkstra recebe um vértice de origem s, e
calcula o caminho de custo mínimo entre os vértices
V(G) a partir de s. Isto funciona do seguinte modo:
São criados os seguintes vetores:
1. Vetor d[v]: Distância estimada de s a v: d[v]
← ∞ e d[s] ← 0;
2. Fila de predecessores π[v] do vértice v:
iniciada com valor null;
3. Vetor S contendo os vértices com o caminho
mínimo calculado, S ← Ø;
4. Fila de prioridade Q, que contém vértices
não calculados ordenados por distância, Q
← V(G);
Execução:
5. Enquanto Q não está vazio
6.
u ← extrai vértice de Q com
menor distância,
coloca em S e faz:
7.
Para cada z adjacente a u, se
z está em Q:
8.
Executa o método:
Relaxamento( );
9. Fim do Enquanto;
10. Fim;
Figura 3 - Grafo respectivo ao Trecho do Mapa
Desta maneira, a matriz de adjacência utilizada pelo
algoritmo de Dijkstra é preenchida com os pesos
correspondentes das arestas, atribuídos como
apresentado na Tabela 1:
Método Relaxamento( ):
11. Se d[u] + p(u,z) < d[z] então
12.
d[z] ← d[u] + p(u,z)
13.
π[z] ← u;
14.
Q ← u;
15. fim Se;
3.5. Implementação do Servidor
Após a execução do algoritmo, é retornada uma lista
com as IDs das estações, deste modo para poder
apresentá-las na tela de fato, é necessário associá-las às
respectivas coordenadas de tela.
Para isto, foi elaborado um programa em Java para
Desktop, com a função de armazenar as coordenadas
das estações, a partir da interação do usuário via teclado
na interface gráfica. A partir do mapeamento, foi
utilizado o sistema de gerenciamento de banco de dados
MySQL [3], para elaborar um BD com possibilidade de
armazenar e atualizar os ID, nomes, linhas e
coordenadas das estações.
Este BD foi hospedado junto ao servidor, este que
foi desenvolvido em J2SE (Java 2 Enterprise Edition), e
com seu funcionamento atrelado à requisição e resposta.
Dentro dele, as classes estão dividas nas seguintes
funções:
•
Lógica: possui classes com a função de calcular
as rotas, ordenar e tratar os dados.
•
Acesso a Dados: são classes com a função de
acessar o BD por meio de um Driver[7],
utilizando JDBC[8].
•
Interface: é a primeira camada do servidor, a
Servlet[9] onde recebe a requisição do cliente, e
após o processamento pelas camadas
intermediárias, retorna a informação para
resposta.
4. Resultados
O servidor foi elaborado de modo a atender às
requisições de duas maneiras. Nele, estão acopladas
duas funções para atender à mesma requisição de
obtenção de rota. Em uma fase dinâmica a rota é obtida
após o processamento do algoritmo de Dijkstra, e em
uma fase estática o retorno é feito após uma consulta a
uma Base de Dados contendo todos caminhos ótimos
possíveis.
Já a aplicação móvel foi desenvolvida utilizando
uma interface de entrada de dados utilizando o
componente ChoiceGroup[7] para obter as estações de
origem e destino como visualizado na Figura 4.
Dados os IDs inicial e final, o aplicativo estabelece
uma conexão com o servidor por meio da API
HttpConnection [1]. Isto gera uma requisição ao BD,
passando como parâmetro as IDs, como resposta, o
servidor faz uma consulta, obtendo as coordenadas de
tela referentes a rota ótima. Ao receber todos os dados
do servidor, é apresentado o mapa na tela, através da
API Canvas [5], ilustrada na Figura 5.
Figura 5 - Apresentação da Rota Obtida
O mapa é apresentado em forma de imagem, e o
caminho é desenhado por meio de uma instância da
classe Graphics [11] pelo método drawLine( ).
Pelo fato da capacidade de processamento dos
dispositivos móveis ser um fator limitante e de alguns
celulares não permitirem armazenar e mover o mapa
inteiro na tela, foi necessário elaborar um modo mais
eficiente de visualização baseado na divisão do mapa
em imagens menores e na apresentação na tela apenas
da imagem correspondente à coordenada selecionada
para navegação. A Figura 6 exemplifica a divisão de
imagens e a apresentação na tela, que neste caso
carregaria apenas as imagens k, l, n e o.
Figura 6 – Distribuição das Imagens
Figura 4 - Visualização da Entrada de Dados
5. Conclusões
Neste trabalho foi apresentado um aplicativo móvel
com recursos gráficos para a determinação da rota de
custo mínimo entre duas estações quaisquer do sistema
de transporte de São Paulo. Foi utilizada uma estrutura
cliente-servidor com acesso remoto a um BD contendo
os parâmetros do sistema de transportes necessários
para o cálculo da melhor rota.
O algoritmo utilizado para avaliar as melhores rotas
possui desempenho O(n².log(n)), pelo fato de utilizar
uma matriz de adjacências com n vértices, m arestas, e
um heap com complexidade O(log n). Já um algoritmo
envolvendo uma heurística bem determinada pode gerar
um desempenho mais eficiente. Contudo, pelo fato do
sistema de transportes ser relativamente pequeno, e
envolver uma matriz quadrada na ordem da centena, um
algoritmo ligeiramente mais eficiente não será tão
significativo, ainda mais pelo fato do gargalo se
localizar na conexão Wap com o cliente.
Além disto, a execução do algoritmo para
determinar a menor rota só deve ocorrer quando houver
alterações na arquitetura ou nos pesos do sistema de
transportes, logo ocorrerão muito mais consultas ao BD
do que a execução do algoritmo, o que valida o sistema
proposto.
Adicionalmente, foi identificado que se pode
melhorar a funcionalidade do aplicativo através de um
mecanismo de atualização dos pesos do grafo de uma
maneira mais representativa, tornando a consulta cada
vez mais adaptada à realidade do sistema de transporte
metropolitano de São Paulo.
5. Referências Bibliográficas
[1] T. M. Johnson, Java para Dispositivos Móveis,
Novatec, 1a Ed., 2007.
[2] M. T. Goodrich, R. Tamassia, Projeto de
Algoritmos, Bookman, 1a Ed., 2004.
[3] P. Dubois, MySQL, Sams, 4a Ed., 2008.
[4] Mapa do Transporte Metropolitano, Acessado em
15/07/2009,
Disponível
em:
http://www.cptm.sp.gov.br/E_IMAGES/geral/Mapa_Me
tropolitano_jan09.gif.
[5] API J2ME Canvas, Acessado em 15/07/2009,
Disponível
em:
http://java.sun.com/javame/reference/apis/jsr118/javax/
microedition/lcdui/Canvas.html.
[6] API J2ME ChoiceGroup, Acessado em 15/07/2009,
Disponível
em:
http://java.sun.com/javame/reference/apis/jsr118/javax/
microedition/lcdui/ChoiceGroup
[7] MySQL Driver, Acessado em 10/06/2009,
Disponível em: http://dev.mysql.com/downloads/
[8] Java SE Database, Acessado em 10/06/2009,
Disponível
em:
http://java.sun.com/javase/technologies/database/index.j
sp
[9] API J2EE Servlet, Acessado em 15/07/2009,
Disponível
em:
http://java.sun.com/products/servlet/overview.html
[10] Arquivo de Ícones, Acessado em 10/06/2009,
Disponível em: http://www.iconarchive.com/
[11] API J2ME Graphics, Acessado em 15/07/2009,
Disponível
em:
http://java.sun.com/javame/reference/apis/jsr118/javax/
microedition/lcdui/Graphics.html
[12] Santos, M. O. A., Banco via Celular, estudo das
tendências e dispositivos de segurança atuais, 2006.
[13] Barros E. A. R., Pamboukian S. V. D., et. al.,
Algoritmo
de
Dijkstra:
Apoio
Didático
e
Multidisciplinar na Implementação, Simulação e
Utilização Computacional, International Conference on
Engineering and Computer Education, 2007.
Download