Um Estudo de Caso com o Uso do A* para o Problema do
Caminho Mais Curto em Transporte Público
Patricia A. Jaques1 , Rodrigo Bastos1 , Marcia Pasin2 , Leonardo Chiwiakowski1 ,
Tiago Sommer1 , Tiago Konrad1
1
PIPCA - Universidade do Vale do Rio dos Sinos (UNISINOS)
Av. Unisinos, 950 Bairro Cristo Rei
CEP 93.022-000 São Leopoldo, Brasil
2
PPGI - Universidade Federal de Santa Maria (UFSM)
Av. Roraima, 1000 Cidade Universitária CEP 97.105-900 Santa Maria, Brasil
{pjaques,leonardo}@unisinos.br, [email protected]
Abstract. A main service provided by an ATIS (Advanced Traveler Information
System) is the real-time computing of shortest path between a given source,
destination pair. Traditional graph routing algorithms (such as breadth-first search, Dijkstra, etc.) are inefficient in this case because: (i) there is no guarantee
about achieving the best solution, (ii) there is no guarantee of good performance
results to complex scenarios with a huge number of nodes (particularly when including walking paths and connections). In this sense, this paper proposes the
use of the A* to solve the problem of computing the shortest path in a public
transport network. The proposed solution allows connections. An evaluation
experiment was conducted using the city of Porto Alegre as a scenario.
Resumo. Um requisito essencial em um ATIS (Sistema de Informação ao Usuário ou Advanced Traveler Information System) é fornecer ao viajante informações eficientes sobre deslocamentos em tempo-real. Algoritmos de roteamento
em grafos (tais como Busca em Largura, etc.), se mostram ineficientes para esse
problema pois (i) não há garantia da obtenção da solução ótima (melhor solução) e (ii) não há garantia de bom desempenho para problemas mais complexos
que envolvam um grande número de nós (principalmente, se o problema de trajetória do ATIS incluir trechos a pé além de transbordo). Neste sentido, este
artigo propõe o uso do algoritmo A* para resolver problema do caminho mais
curto em uma rede transporte público, que permite transbordo. Para comprovar sua eficiência, a algoritmo foi testado com dados reais da cidade de Porto
Alegre - RS.
1. Introdução
O transporte é um motor do desenvolvimento econômico e do lazer em todo o mundo
na sociedade contemporânea [PIARC 2000a]. Os cidadãos dependem diariamente dos
meios de transporte para acessar o local de trabalho, comprar suprimentos, visitar atrações
turísticas e centros de lazer (como cinemas, shoppings, entre outros). Geralmente, essa
necessidade de mobilidade é garantida por um uso crescente de veículos particulares,
sobrecarregando cada vez mais as já congestionadas vias urbanas.
Os veículos privados foram geralmente considerados meios de transporte preferenciais pelos cidadãos, apesar dos custos maiores de manutenção, devido à liberdade de
movimento que estes veículos ofereciam. Essa vantagem porém não é mais tão fortemente
evidenciada nos grandes centros urbanos.
No intuito de desafogar os congestionamentos nas principais vias terrestres, várias medidas têm sido tomadas pelas municipalidades no sentido de restringir o acesso
aos meios privados de locomoção e promover o uso de meios de transporte coletivos. Por
exemplo, nas vias urbanas em Porto Alegre, uma das faixas (corredor) é destinada exclusivamente aos veículos de transporte público (ônibus, lotações e taxi). Na capital São
Paulo foi criada uma política de restrição de uso de carros particulares, controlada pelo
código RENAVAM de identificação do veículo (placa).
Porém, como essas medidas não vem associadas a um transporte público eficiente
e um abrangente aparato de informação, em vez de fomentar o uso de meios de locomoção coletivos, elas desencadeiam estratégias criativas entre os usuários para dribla-las.
Por exemplo, é conhecido que as famílias paulistas, quando possuem suficientes recursos
financeiros, têm mais de um veículo particular com placas com finais diferentes.
Por outro lado, estudos apontam que um dos principais fatores que desmotivam
os usuários a empregar o transporte coletivo é a falta de informação [FTA 2006]. Dessa
forma, muito mais do que estratégias de controle, as grandes cidades necessitam de um
sistema inteligente de informação que permita a organização efetiva das viagens de seus
usuários. Esses sistemas podem auxiliar os usuários no planejamento de sua viagem,
fornecendo informações em tempo real sobre possíveis itinerários e duração da viagem,
assim como estimativa do tempo de espera e possíveis conexões. Esses sistemas são
conhecidos como Sistemas de Informação ao Usuário (Advanced Traveler Information
Systems ou ATIS).
O fornecimento em tempo-real de rotas de ônibus pode parecer, à primeira vista,
um problema simples. De fato, atualmente, no Brasil, já existem algumas aplicações
disponibilizadas por empresas permissionárias ou órgão gestores, tais como o POAtransportes (http://www.poatransporte.com.br/ - uma iniciativa da EPTC e prefeitura de
Porto Alegre) que permitem ao usuário visualizar, em uma interface gráfica ou textualmente, as rotas das linhas de ônibus oferecidas em uma cidade. Porém, essas aplicações
tratam apenas as situações em que existe uma única linha de ônibus que passe pelos endereços de origem e destino. Essas aplicações não consideram os casos em que o usuário necessite realizar transbordo (trocas de linhas) para chegar ao destino desejado. Encontrar a
melhor rota de transporte público entre uma origem e destino é um problema de encontrar
o caminho mais curto em grafo (do inglês shortest path finding) [Cherkassky et al. 1996].
Esse é um problema mais complexo que exige a utilização de algoritmos de roteamento
para a sua solução.
Um requisito essencial em um ATIS é fornecer ao viajante informações eficientes
em tempo-real. Assim, os conhecidos algoritmos de roteamento em grafos (tais como
Busca em Largura, Dijkstra, entre outros), se mostram ineficientes para esse problema
pois: (i) não há a garantia que retornarão a solução ótima (melhor solução), (ii) não
possuem um bom desempenho para problemas mais complexos que envolvam um grande
número de nós (principalmente, se o problema de trajetória do ATIS incluir trechos a pé
além de transbordo). Como esse tipo de problema é geralmente tratado por pesquisadores
da área de Pesquisa Operacional, eles tem empregado algoritmos de busca tabu e outros
da área [Seo et al. 2006].
Por outro lado, o algoritmo heurístico A* da Inteligência Artificial é adequado
para esse tipo de problema por ser completo (sempre encontra uma solução se existir) e
ótimo (sempre encontra a melhor solução se a heurística for admissível) e por possuir um
bom desempenho [Russell and Norvig 1995]. No entanto, não se tem conhecimento de
trabalhos que o usam para o problema de encontrar a menor rota em transporte público.
Dentro desse contexto, este artigo busca descrever uma modelagem realizada com
o algoritmo A* para o problema do cálculo de trajetórias em tempo real de linhas de
ônibus. Esta modelagem foi materializada em um sistema chamado Antares. A solução
adotada foi testada com uma base real de dados de paradas e linhas de ônibus da cidade
de Porto Alegre. Foram gerados 532 problemas aleatoriamente (cada problema, ou caso,
é uma parada de origem e destino) testados igualmente com o A*, o Dijkstra e o Busca
em Largura (BL). Os resultados mostram que o A* apresentou rotas de custo menor que
o algoritmo de Busca em Largura, porém os custos das rotas foram análogos no Dijkstra
e no A*.
O presente artigo encontra-se organizado como segue. A seção 2 descreve sistemas de transporte inteligentes e, mais precisamente, ATIS. A seção 3 descreve detalhes
do sistema Antares e a seção 4 a modelagem do A* para o problema do caminho mais
curto em transporte público. A seção 5 descreve os experimentos realizados. Finalmente,
a seção 6 apresenta as considerações finais do artigo.
2. Sistemas Inteligentes de Transporte
A sociedade moderna depende dos meios de transporte para suas atividades diárias. Os
veículos particulares são o meio preferencial de locomoção por oferecerem maior liberdade aos seus usuários. No entanto, o aumento crescente da frota de veículos particulares
tem tornado caótica a já difícil mobilidade nos centro urbanos. Medidas são necessárias
para melhorar a circulação urbana. Contudo, os grandes centros urbanos não possuem
espaço para expansão das vias terrestres [PIARC 2000a] e as medidas restritivas adotadas
por algumas municipalidades têm se mostrado insuficientes.
Por outro lado, o avanço tecnológico dos equipamentos eletrônicos de comunicação e informação tem proporcionado avanços nos sistemas de informação para o transporte público, conhecidos como Sistemas Inteligentes de Transporte (Intelligent Transport Systems ou ITS). Mais especificamente, os ITSs são sistemas computacionais que
aplicam as tecnologias de informação, comunicação e regulação para auxiliar no gerenciamento e operação dos sistemas de transporte, e fomentar um melhor aproveitamento das
vias públicas, um aumento da mobilidade, redução dos custos sociais através da redução
dos tempos de espera e tempos perdidos, assim como uma diminuição dos impactos ambientais [PIARC 2000b]. Por essa razão, os ITSs mostram ser uma importante ferramenta
para auxiliar na solução dos problemas atuais de mobilidade urbana.
Os STI compreendem uma variedade de aplicações, classificadas de acordo com
suas funcionalidades, entre as quais os ATIS [PIARC 2000b][FTA 2000]. Os ATIS são
sistemas que visam uma melhoria na segurança, eficiência e efetividade do transporte
público. O principal objetivo é prover aos gestores do transporte coletivo as informações
necessárias para apoiar as operações, assim como aumentar as conveniências aos usuários
e, consequentemente, fomentar o emprego do transporte coletivo.
Os ATIS representam um grande diferencial no que diz respeito à qualidade do
serviço oferecido. Geralmente, estes sistemas calculam, em tempo real, itinerários solicitados pelos usuários e fornecem informações relacionadas à localização dos veículos e
duração da viagem. Entre os principais benefícios destacam-se: (i) reduzir o tempo de
espera, (ii) estimar e reduzir os tempos de transbordo; e (iii) permitir ao usuário o planejamento de sua viajem (Watkins et al., 2010). As informações podem ser disponibilizadas
pela Internet, através de diversos aparatos tecnológicos tais como tablets, computadores,
celulares, assim como por painéis eletrônicos localizados em paradas e estações. Geralmente, as informações relacionadas a horários são obtidas através de tabelas fixas de
horários fornecidas pelas empresas permissionárias ou por dispositivos para localização
automática de veículos, tais como antenas ou sistema de posicionamento global (GPS),
sendo este último o dispositivo que fornece maior acurácia para localização dos veículos
[FTA 2000].
Uma das informações essenciais necessárias ao usuário de transporte público é o
melhor caminho (ou rota) entre um local de origem e o destino que se quer chegar. Esse
problema é conhecido na literatura como o problema do caminho mais curto (do inglês
shortest path algorithm). Fornecendo ferramentas que permitam ao usuário escolher o
melhor caminho, os ATIS estarão, além de promovendo a satisfação do usuário e a maior
utilização do meios públicos de transporte público, também reduzindo o impacto ambiental por fornecer a rota mais curta e, portanto, de menor custo econômico e ambiental.
Geralmente, algoritmos da área de pesquisa operacional são empregados para resolver esse problema [Wu and Hartley 2004, Van Vliet 1978]. Por outro lado, o algoritmo A* é adequado e mais eficiente por ser completo (sempre acha uma solução se
existir) e ótimo (sempre acha a melhor solução se a heurística for admissível) e possuir
um bom desempenho. [Sedgewick and Vitter 1986] mostrou que o A* encontra o caminho mais curto em grafos que usam a distância euclideana como heurística com um
esforço computacional de O(n), comparado com o O(nlogn) requerido pelo Dijkstra.
[Golden and Ball 1978] mostrou empiricamente que o A* expande menos do que 10%
dos nós que seriam expandidos pelo Dijkstra. No entanto, como o algoritmo A* foi proposto por pesquisadores da Inteligência Artificial, ele não é comumente conhecido e utilizado na área de ATIS [Fu et al. 2006]. Na verdade, existem alguns trabalhos que utilizam
o A* para o problema de roteamento de carros particulares (in-vehicle Route Guidance
System) [Fu et al. 2006]. No entanto, não se tem conhecimento de trabalhos que o usam
para o problema de encontrar a menor rota em transporte público.
Alguns trabalhos tem usado algoritmos de busca clássicos (muitas vezes com
adaptações) para resolver o problema de encontrar o caminho mais curto em uma de
rede. [Van Vliet 1978] compara Dijkstra e outros dois algoritmos (Moore e D’Esopo) e
chegam a conclusão que o melhor algoritmo a ser utilizado depende do número de nós da
rede. No entanto, os algoritmos não são analisados com dados de uma rede real de transporte público. [Goczyla and Cielatkowski 1995] descreve a modelagem de dados para o
problema de achar o trem com horário de partida mais próximo, baseado em tabelas de
horário, e usando o algoritmo Dijkstra. [Wu and Hartley 2004] descreve o uso de algorit-
mos K-Shortest Paths para o problema de encontrar o caminho mais curto em uma rede
de locomoção bi-modal (os usuários podem se locomover a pé ou por ônibus entre dois
qualquer nós). No entanto, a performance do algoritmo foi pior do que o Dijkstra, independentemente do tamanho de nós no grafo (em média 3 segundos para grafos com 10
nós, comparado com os 0, 08 segundos do Dijkstra).
A solução proposta neste artigo se diferencia por apresentar uma solução usando o
algoritmo A*, que é um algoritmo da Inteligência Artificial com caráter ótimo e completo.
Um outro diferencial é comparar o desempenho da solução proposta com o desempenho
do algoritmo de Busca em Largura para dados reais da rede de transporte público da
cidade de Porto Alegre, Brasil.
3. Antares
O algoritmo é utilizado no sistema Antares, um ATIS cujo objetivo principal é fornecer informações descritivas e visuais sobre trajetos de linhas (de ônibus) e estimativas de
tempo de espera e viagem de um trajeto [Bastos and Jaques 2010, Freitas et al. 2011]. A
partir de endereços (nome da rua e número) de origem e destino, o sistema identifica quais
linhas de ônibus o usuário deve tomar. Um diferencial desta ferramenta é a provisão do
cálculo de conexões necessárias para trajetos mais longos, podendo igualmente informar
trocas de ônibus quando necessárias. A ferramenta ilustra visualmente deslocamentos a
serem percorridos via transporte público (ônibus) através de um sistema de mapas geográficos da Google conhecido como Google Maps (https://developers.google.com/maps/). A
descrição do deslocamento é também fornecida textualmente na interface.
Em uma primeira versão do protótipo, o sistema calcula apenas a rota com menor distância entre um endereço de origem e um endereço destino. O sistema está sendo
estendido para disponibilizar várias alternativas de rotas, de acordo com diferentes critérios a serem escolhidos pelo usuário (menor distância, menor tempo de espera, menor
tempo de transbordo, menor duração, menor distância a pé). Porém devido a restrições de
espaço, este artigo enfoca somente o algoritmo para escolha do itinerário com menor distância, uma vez que a geração dos outros itinerários depende de pequenas configurações
no algoritmo escolhido (por exemplo, modificar a heurística escolhida).
Para calcular os itinerários, a aplicação possui uma importante base de dados onde
estão armazenadas todas as linhas de ônibus de um centro urbano, assim como a sequencia de paradas que compõem cada linha em um subconjunto da cidade de Porto Alegre.
A base de dados compreende basicamente uma tabela descrevendo as paradas (identificador, latitude e longitude de cada parada), linhas de ônibus (identificador e descrição),
e, finalmente, uma tabela de relação entre linhas e paradas que descreve a sequencia de
paradas visitadas por cada linha.
Na próxima seção é descrita a modelagem realizada utilizando o algoritmo A*
para resolver o problema do caminho mais curto usando transporte público como meio
de locomoção. A modelagem proposta permite transbordo, quando necessário, o que
a diferencia das soluções comumente fornecidas por empresas permissionárias e órgãos
gestores no Brasil (que geralmente exibem somente a rota de cada linha de ônibus). Para
melhor compreensão do problema, considera-se que os pontos de origem e destino são
sempre uma parada. Na prática, Antares calcula a distância usando a API Google Maps
para encontrar as paradas mais próximas do endereços fornecidos.
4. Modelagem do Problema usando A*
Para determinar um itinerário entre um endereço de origem (latitude e longitude de uma
parada) e um endereço de destino, a solução aqui apresentada utiliza o algoritmo heurístico de roteamento em grafo A*. Uma rede de paradas de uma cidade ligadas por linhas
de ônibus pode ser representada como um grafo G(N, A), composto por um conjunto de
nodos N e um conjunto de arestas A. Um arco a = (id, i, j) é uma aresta dirigida entre
os nós i e j, identificada por id, e com um determinado custo ca . |n| e |a| representam os
números de nós e arestas no grafo, respectivamente.
Os algoritmos de roteamento em grafos buscam definir um caminho Po,d (uma
sequencia de arcos) entre um nó origem (o) e um nó destino (d), definido por
(id, o, j)(id, j, x), ..., (id, i, d). Um determinado caminho Po,d possui um custo co,d que
é a soma de todos os custos dos arcos que compõem a solução. O problema de achar o
caminho mais curto consiste em encontrar a solução Po,d com o menor custo co,d .
Existem duas importantes funções nos algoritmos de busca. A função suc(i) retorna um conjunto de arestas A0 ⊂ A, com todas as arestas a = (id, i, x) que ligam o nó
i a um outro nó x qualquer. Todas as arestas em A0 , retornadas por suc(i), são guardadas no conjunto OP EN ⊂ A, também chamado de fronteira, para serem testadas pelo
algoritmo futuramente. A ação de chamar a função suc(i) para um determinado nó i é
comumente chamada de expandir o nó i. A função select(OP EN ) retorna o próximo nó
a ser explorado, ou seja, a ser testado pelo algoritmo se faz parte do caminho. Os algoritmos de roteamento chamam sucessivamente as funções select(OP EN ) e suc(j) para
buscar um caminho entre o nó de origem e o nó destino. Esse processo iterativo monta
uma árvore de busca, onde cada caminho da árvore do nó raiz até um nó x qualquer representa uma solução parcial, um caminho existente entre os nós o e x, denotada por Po,x
e com um custo co,x . Os diferentes algoritmos de roteamento se diferenciam, geralmente,
pela estratégia utilizada para escolher j, ou seja, pela chamada à função select(OP EN ).
O Algoritmo 1 ilustra o pseudo-código geral de uma busca. Po,x representa uma
lista que guarda os arcos que compõem o caminho do nó o ao nó x. Caso já exista um
caminho conhecido entre o e x, o algoritmo apenas substitui o caminho antigo pelo novo
caminho, caso o novo caminho tenha o menor custo (linhas 9-10 do Algoritmo 1). Essa
solução melhora significativamente o desempenho do algoritmo de busca, sem interferir
no caráter ótimo do mesmo algoritmo quando a heurística é admissível e consistente. Esse
é o caso da distância euclideana usada neste artigo [Russell and Norvig 1995].
No presente trabalho, o algoritmo de roteamento que está sendo utilizado para a
geração dos itinerários é o A*. O A* é um algoritmo heurístico, isto é, ele utiliza uma
heurística com o propósito de reduzir o espaço da busca (números de nós |n| a serem
explorados) e, portanto, melhorar a complexidade de tempo [Nilsson 1971]. Além de ser
completo (sempre acha uma solução, se ela existir) e ótimo (sempre acha a melhor solução) se a heurística for admissível [Nilsson 1971], o algoritmo A* apresenta melhores
resultados em termos de complexidade de tempo em relação aos conhecidos algoritmos
de busca cega em Largura e Dijkstra [Fu et al. 2006]. O desempenho do algoritmo é um
fator crucial no sistema proposto por se tratar de uma aplicação web que responde em
tempo real às requisições dos usuários. Apesar de seu comprovado desempenho para
os problemas de roteamento em geral [Nilsson 1971], os algoritmos heurísticos tem sido
pouco empregados na área de ITS [Fu et al. 2006]. Isso se deve ao fato que estes algorit-
input : nó o ∈ N de origem, nó d ∈ N de destino
output: um caminho Po,d
OP EN ← o ;
while OP EN 6= ∅ do
3
i ← select(OP EN ) ;
4
if i == d then
5
return Po,d
6
end
7
else
8
A0 ← suc(j) ;
9
foreach a = (i, j) ∈ A0 do
10
if co,i + ca < co,j then
11
co,j ← co,i + ca ;
12
Po,j ← Po,i + a ;
13
OP EN ← OP EN + j ;
14
end
15
end
16
end
17 end
Algoritmo 1: Pseudo-código do algoritmo de roteamento para o caminho mais curto.
1
2
mos de busca heurística tem sua origem na área de Inteligência Artificial, e têm sido mais
amplamente utilizados para resolver vários problemas teóricos da área.
Para ilustração, inicialmente, considera-se que o problema a ser tratado consiste
na escolha de um caminho Po,d a partir da parada mais próxima do ponto de origem até
a parada mais próxima do endereço de destino. Uma importante questão é quem são os
nodos e arestas do grafo deste problema. Para o problema do caminho mais curto em
transporte público, cada nó n é uma parada localizada em uma determinada linha e cada
aresta a = (id, i, j) representa uma linha de ônibus que sai de i e chega em j (podendo
continuar). Atualmente, ca representa a distância entre as paradas i e j. Como pode haver
mais de uma linha de ônibus entre duas paradas, podem existir mais de uma aresta entre
dois nós.
Por se tratar de um algoritmo de busca heurística, é necessário que o algoritmo A*
tenha algum conhecimento específico sobre o problema (heurística) para poder estimar
qual é o melhor nodo da fronteira a ser expandido, ou seja, para definir qual vai ser o
retorno da função select(OP EN ). O algoritmo utiliza a distância euclidiana, já que essa é
uma heurística admissível para o problema de encontrar o caminho com a menor distância.
A distância euclideana é calculada a partir das informações de latitude e longitude das
paradas, usando uma fórmula de trigonometria esférica [Gore 1907]. Neste caso, para
garantir que os melhores caminhos possam ser expandidos na ordem correta, o conjunto
OP EN é tratado como uma fila de prioridade. Os nós estão ordenados pela função
g(n) = f (n) + h(n), onde f (n) representa a distância real entre o nó origem (o) e o nó
n, computada pelo sistema, e h(n) representa a heurística, distância euclidiana calculada
pela respectiva fórmula.
Essa primeira versão sofreu diversas atualizações no decorrer de desenvolvimento
deste projeto (últimos 3 anos). Primeiramente, verificou-se a necessidade de incorporar
trajetos a pé e pontos turísticos. Para tanto, era necessário tratar o problema do percurso
a pé também como um grafo. A opção escolhida foi considerar cada cruzamento de ruas
como um nodo e as ruas como arestas no grafo. Nessa nova versão, os nodos podem ser
tanto uma parada de uma determinada linha como um cruzamento entre ruas. A função
suc(n) pode retornar tanto a próxima parada de uma linha, caso n seja uma parada/linha,
ou todos os outros cruzamentos de ruas que estejam ligados ao cruzamento n por uma
rua. Essa nova formulação permite ao algoritmo incorporar trechos a pé, quando necessários. Porém, um novo problema foi encontrado: como os trechos a pé possuíam o mesmo
custo que os trechos em transporte coletivo, o algoritmo tendia a sugerir exclusivamente
caminhos a pé (eles forneciam uma distância real menor, pois não haviam os desvios
geralmente realizados pelas linhas de ônibus). Dessa forma, foi necessário penalizar o
trecho a pé em detrimento aos trechos em ônibus. A opção adotada foi definir empiricamente uma constante c, tal que g(n) = c ∗ f (n) + h(n), quando o nodo n representa
um cruzamento de ruas. O grupo está ainda trabalhando, através de testes empíricos, na
melhora desse dado.
5. Experimentos de Avaliação
O algoritmo foi avaliado com dados da cidade brasileira de Porto Alegre. Os dados foram
obtidos da empresa estatal EPTC (http://www.eptc.com.br), através de uma requisição
formal do grupo de pesquisa. Os dados compreendem 3 arquivos de informações no
formato csv 12 . O arquivo bus − stops.csv contém o identificador, latitude e longitude de
cada parada de ônibus da cidade. O arquivo routes.csv guarda identificador e descrição
das linhas de ônibus e o arquivo routestops.csv descreve as paradas pelas quais cada linha
de ônibus passa. Ao todo, esses arquivos descrevem informações sobre 4.423 paradas, 758
linhas de ônibus, e 22.873 relações paradas e ônibus.
A modelagem foi testada com 532 problemas gerados randomicamente. Os dados
do problema consistiam em uma parada de ônibus de origem e uma parada destino obtidas
randomicamente dos arquivos de paradas de ônibus. Cada problema gerado foi testado
igualmente com o algoritmo A* usando a distância euclideana como heurística (ver seção
4), o algoritmo de Busca em Largura e o algoritmo Dijkstra, que é um dos algoritmos
mais utilizados atualmente na busca pelo caminho mais curto.
Na Figura 1, pode ser observado o gráfico de comparação do A* com a Busca em
Largura e o Dijkstra para o problema do menor caminho de transporte público, usando dados reais da Cidade de Porto Alegre. No eixo X do gráfico, pode ser observado o número
de identificação do problema e no eixo Y os custos em km (os dados foram ordenados por
custo para melhor visualização). Como pode ser observado, o A* sempre encontrou soluções com menor custo que o Busca em Largura. No entanto, o seu resultado foi análogo
ao Dijkstra (a linha do custo do Dijkstra não aparece no gráfico porque está sobreposta
pela linha do A*). Os resultados dos experimentos mostraram diferenças semelhantes
1
O CSV (do inglês comma separated values) é um formato amplamente usado para representação de
dados em arquivos de texto, onde os dados são separados por um delimitador, geralmente a vírgula para
distinguir campos e a quebra de linha para tuplas [Shafranovich 2005].
2
Os dados foram originalmente entregues pela empresa EPTC em papel (impressos) ao grupo. Os
integrantes do grupo escanearam e converteram em arquivos csv.
Figura 1. Comparação do custo (em km) do A* com a Busca em Largura (BL) e o
Dijkstra
em relação à complexidade de espaço (número de nós expandidos), ou seja, em geral o
Dijkstra e o A* expandem número semelhantes de nós, mas menor que o Busca em Largura. Em relação à duração, o A* e o Dijkstra possuem duração semelhante, geralmente
maior que a duração do Busca em Largura para resolver cada problema. Isso mostra que
a estrutura de dados fila de prioridade é o gargalo de tempo para esses algoritmos, e não
o cálculo da heurística, como o grupo previa inicialmente.
6. Conclusões
No caso da área de transportes, a definição do caminho mais curto é um problema complexo que pode envolver vários transbordos (trocas de linhas). Assim, ele não pode ser
tratado por consultas a um banco de dados, já que muitas vezes não há uma única linha de
transporte coletivo que compreenda os endereços de origem e destino. Dessa forma, esse
artigo apresenta uma solução para o problema que consiste na modelagem do algoritmo
heurístico A* para o problema da menor rota de transporte público. A principal vantagem
do algoritmo A* é que ele é completo e ótimo, ao contrário do Dijkstra e da Busca em
Largura.
O algoritmo foi avaliado com uma base de dados real da cidade de Porto Alegre. Para avaliação, o algoritmo A* foi testado com 532 problemas, onde as paradas
de origem e destino foram geradas aleatoriamente. Os mesmos dados foram testados e
comparados com o algoritmo de Busca em Largura e Dijkstra. Conforme os resultados
da Seção 5 mostram, o algoritmo A* sempre apresentou uma solução de menor custo
(menor distância) que o algoritmo de Busca em Largura. No entanto, os resultados do
A*, em relação ao custo, complexidade de tempo e espaço foram análogos aos resultados
do Dijkstra. Esses resultados surpreenderam os autores, uma vez que se esperava que o
A*, por ser ótimo, apresentasse soluções de custo menor que Dijkstra, que não é ótimo
[Russell and Norvig 1995]. Os autores pretendem realizar uma análise mais profunda
desses resultados e do comportamento dos dois algoritmos.
A modelagem proposta permite transbordo, quando necessário, o que a diferencia
das soluções comumente fornecidas por empresas permissionárias e órgãos gestores no
Brasil (que geralmente exibem somente a rota de cada linha de ônibus). A solução está
sendo estendida para incorporar igualmente trechos a pé, e permitir a definição de diferentes critérios para escolha de trajetos (o caminho mais curto, o caminho mais rápido, o
caminho mais turístico, entre outros).
Referências
Bastos, R. and Jaques, P. (2010). ANTARES: Um sistema Web de consulta de rotas de
ônibus como serviço público. Revista Brasileira de Computação Aplicada, 2:41–56.
Cherkassky, B. V., Goldberg, A. V., and Radzik, T. (1996). Shortest paths algorithms:
Theory and experimental evaluation. Mathematical Programming, 73(2):129–174.
Freitas, F., Moraes, R. F., and Jaques, P. (2011). Um sistema web de consulta de trajetos
de transporte público. In Ibero-Americana WWW/Internet (CIAWI), RJ. IADIS.
FTA (2000). Advanced Public Transportation Systems: The State of the Art - Update
2000. Technical report, FTA, Washignton, DC.
FTA (2006). Advanced Public Transportation Systems: The State of the Art - Update
2006. Technical report, FTA, Washignton, DC.
Fu, L., Sun, D., and Rilett, L. (2006). Heuristic shortest path algorithms for transportation
applications: State of the art. Computers & Operations Research, 33(11):3324–3343.
Goczyla, K. and Cielatkowski, J. (1995). Optimal routing in a transportation network.
European Journal of Operational Research, 87(2):214–222.
Golden, B. L. and Ball, M. (1978). Shortest paths with euclidean distances: An explanatory model. Networks, 8(4):297–314.
Gore, J. H. (1907). Elements of plane and spherical trigonometry. G.P. Putnamâs sons.
Nilsson, N. J. (1971). Problem-Solving Methods in Artificial Intelligence. McGraw-Hill.
PIARC (2000a). Intermodality: Measures to Stimulate Public Transport Usage. Technical
report, PIARC.
PIARC (2000b). ITS Handbook 2000. Artech House Books.
Russell, S. J. and Norvig, P. (1995). Artificial Intelligence: A Modern Approach. Prentice
Hall.
Sedgewick, R. and Vitter, J. S. (1986). Shortest paths in euclidean graphs. Algorithmica,
1(1-4):31–48.
Seo, Y., Lee, C., and Moon, C. (2006). Tabu search algorithm for flexible flow path design
of unidirectional automated-guided vehicle systems. OR Spectrum, 29(3):471–487.
Shafranovich, Y. (2005). RFC 4180. Technical report.
Van Vliet, D. (1978). Improved shortest path algorithms for transport networks. Transportation Research, 12(1):7–20.
Wu, Q. and Hartley, J. (2004). Using K-Shortest Paths Algorithms to Accommodate User
Preferences in the Optimization of Public Transport Travel, pages 181–186.
Download

Um Estudo de Caso com o Uso do A* para o Problema do Caminho