• Nenhum resultado encontrado

Evolução da componente algorítmica de cálculo de rotas do Move-Me

N/A
N/A
Protected

Academic year: 2021

Share "Evolução da componente algorítmica de cálculo de rotas do Move-Me"

Copied!
86
0
0

Texto

(1)

F

ACULDADE DE

E

NGENHARIA DA

U

NIVERSIDADE DO

P

ORTO

Evolução da componente algorítmica de

cálculo de rotas do Move-Me

André Pedro Deus Pinheiro

Mestrado Integrado em Engenharia Informática e Computação Orientador: João Paulo de Castro Canas Ferreira

(2)
(3)

Evolução da componente algorítmica de cálculo de rotas

do Move-Me

André Pedro Deus Pinheiro

Mestrado Integrado em Engenharia Informática e Computação

(4)
(5)

Resumo

Nos dias que correm os transportes públicos têm vindo a afirmar cada vez mais a sua im-portância no quotidiano da população, seja para evitar as filas de trânsito nas horas de ponta ou para reduzir os custos no final do mês. Surge assim a necessidade de dar uma resposta rápida e eficaz aos utentes dos transportes públicos. É neste contexto que o projeto IMS, desenvolvido pela empresa OPT S.A. foi criado. Este projeto tem como finalidade auxiliar os utentes na es-colha das rotas dentro de uma rede de transportes públicos multimodais. O projeto está dividido em módulos distintos, responsáveis por exercerem funções específicas. O objetivo deste trabalho passa essencialmente pela sofisticação da componente algorítmica de cálculo de rotas no módulo PADA. O algoritmo atual apresenta tempos de resposta na ordem dos segundos desde o momento em que a rede de transportes se expandiu para Lisboa. Desse modo, o principal foco deste trabalho é determinar como se pode reduzir os tempos de resposta tendo em conta critérios que podem ser definidos pelos utilizadores, como o tempo de chegada mais próximo ao destino final, o menor tempo de partida a partir da origem, o menor número de transbordos e o tempo máximo a cami-nhar. É de realçar que o sistema já se encontra em funcionamento, pelo que as restrições atuais devem ser respeitadas. Este facto não invalida que a sofisticação do algoritmo atual seja um desa-fio menor já que nos últimos anos se tem investido na área dos algoritmos em redes de transportes públicos, que culminou na invenção de novos algoritmos como o RAPTOR e o CSA que não são baseados em grafos e que podem ser paralelizados, capazes de correr ordens de magnitude mais rápido do que algoritmos baseados no algoritmo de Dijkstra para o caminho mais curto entre dois vértices de um grafo. Simultaneamente também se tem assistido à criação de novas técnicas de aceleração como A* com Landmarks, Arc Flags, Contração e pesquisa bidirecional, no entanto todas requerem uma fase de pré-processamento morosa e dispendiosa em termos de memória, seguida de uma fase de consulta extremamente rápida.

Para este problema, os dados fornecidos correspondem a uma estimativa da hora de chegada das viaturas de transporte às paragens que fazem parte da rede. Através de outros módulos existen-tes no sistema é possível construir e caracterizar toda a rede de transporexisten-tes. O módulo responsável pela gestão da rede de transportes, o BITA, armazena informação relativa a todas as linhas de todos os operadores, às variantes de uma linha, à ordem das paragens de uma linha e às horas de passagem de um veículo numa paragem num determinado dia. Estes dados são cruciais para que se possam obter resultados corretos durante a fase de cálculo de rotas. A sofisticação do módulo PADA tem impacto essencialmente ao nível da experiência do utilizador, uma vez que os utentes poderão ter acesso às rotas de viagens mais convenientes de modo quase imediato.

O algoritmo escolhido foi uma adaptação do algoritmo RAPTOR uma vez que pode ser fa-cilmente paralelizado, tirando assim partido do elevado número de núcleos do servidor onde será executado. Durante os testes, o desempenho do algoritmo de cálculo de rotas foi bastante sa-tisfatório, revelando-se capaz de executar, em média, 100 vezes mais rápido do que o algoritmo atualmente utilizado. Os resultados com o acesso ao tempo real foram igualmente muito satisfa-tórios.

(6)
(7)

Abstract

Nowadays, public transportation have been affirming more and more its importance in the day-to-day life of the general population, whether to avoid traffic queues at rush hours, or to reduce costs at the end of the month. Therefore, there is a need for a rapid and effective response to public transport users. Is is in this context that the IMS project, developed by OPT S.A, was created. The purpose of this project is to assist choosing routes inside a multimodal public transportation network. The project is divided in several modules, responsible for carrying out specific functions. With the development of this master thesis it is expected to refine the algorithmic component of route calculation in the PADA module. The current algorithm presents query times in the order of seconds since the network has expanded to Lisbon. Thus, the main focus of this master thesis is to determine how the query times can be reduced, taking in account criteria that can be defined by users, such as the closest time of arrival, numbers of transfers and the maximum walking distance. If should be noted that the system is already in operation, so the current restrictions must be respected. This fact does not invalidate that the sophistication of the algorithm will be a minor challenge since in the last years large investments were done in the subject of algorithms on public transportation networks, which culminated in the invention of new algorithms such as RAPTOR and CSA, that are not based on graphs and can be easily parallelized, capable of running orders of magnitude faster than previous algorithm based on Dijkstra for the calculation of shortest path between two vertices of a graph. At the same time, new speed-up techniques such as A* with Landmarks, Arc Flags, Contraction and bidirectional search have been developed, however, all of them require a time-consuming pre-processing phase, followed by an extremely fast query phase. For this problem, the data that is provided corresponds to an estimate of the arrival time of a vehicle on a stop of the public transportation network. By accessing other modules it is possible to build and characterize the public transportation network. The module responsible for the network management, BITA, stores information about all the lines of all providers, the variants of a single line, the order of the stops of a single line and the arrival times of a vehicle in a stop, on a given day. These data is crucial in order to get the correct results during the route calculation. The sophistication of the PADA module will impact essentially the user experience as users will have access to the most convenient travel routes almost immediately.

The chosen algorithm was an adaption of RAPTOR because it can be easily parallelized, taking advantage of the high number of cores of the server where the algorithm will be executed in production. During the test phase, the performance of this algorithm was quite satisfactory. It was able to run, in average, 100 times faster than the current algorithm in production. The results with real time access were also quite satisfactory.

(8)
(9)

Agradecimentos

Esta dissertação não teria sido escrita sem o apoio de algumas pessoas pelas quais eu quero aproveitar esta página para expressar a minha gratidão. Em primeiro lugar, agradeço aos meus pais pelo apoio incondicional que me deram não só durante a realização da dissertação, mas du-rante toda a minha vida académica. Em segundo lugar quero agradecer ao Professor Doutor João Canas Ferreira, o meu orientador da dissertação, pela dedicação e pela disponibilidade que sem-pre mostrou ter durante este último ano letivo. Agradeço-lhe também pelo incansável apoio que me concedeu e por me ter introduzido no mundo do planeamento de rotas de uma maneira mais aprofundada. Só assim é que foi possível obter resultados com qualidade.

Quero aproveitar para também agradecer a todos os colegas de trabalho da empresa que me acolheu, a OPT. Agradeço em especial ao Dr. Fernando Vieira e ao Eng. Luís Filipe Ferreira por me terem introduzido o projeto e acompanhado durante toda a realização da dissertação. Agradeço também ao Eng. Vasco Agria e ao Eng. Gil Castro pelo apoio e pela paciência inesgotável que tiveram para esclarecer todas as minhas dúvidas técnicas.

A todos um muito obrigado!

(10)
(11)

“The only way to do great work is to love what you do.”

(12)
(13)

Conteúdo

1 Introdução 1 1.1 Contexto . . . 1 1.2 A Empresa . . . 2 1.3 Motivação e Objetivos . . . 3 1.4 Estrutura da Dissertação . . . 3 2 Estado da Arte 5 2.1 Introdução . . . 5

2.2 Algoritmos de caminho mais curto . . . 6

2.2.1 Técnicas Básicas . . . 6

2.2.2 Pesquisa orientada para um objetivo . . . 7

2.2.3 Técnicas de Aceleração . . . 8

2.3 Transportes Públicos . . . 13

2.3.1 Algoritmos para cálculo de caminho mais curto . . . 13

2.3.2 Representação dos dados . . . 16

2.3.3 Aplicações Existentes . . . 16

2.4 Resumo e Conclusões . . . 20

3 Modelação do Problema 23 3.1 Introdução . . . 24

3.2 Planeamento de viagens numa rede multimodal . . . 25

3.2.1 Modelo tempo-expandido . . . 25

3.2.2 Modelo tempo-dependente . . . 26

3.2.3 Modelo baseado em frequências . . . 27

3.3 Metodologia . . . 28

3.3.1 Criação da Rede de Transportes . . . 29

3.3.2 Extração dos Pontos de Interesse . . . 32

3.3.3 Indexação de paragens e pontos de interesse . . . 33

3.3.4 Criação das ligações a pé . . . 34

3.3.5 Agrupamento de paragens . . . 35

3.4 Algoritmo - Cálculo de Rotas . . . 36

3.4.1 RAPTOR - Execução do algoritmo . . . 38

3.4.2 Tempo Real . . . 42

3.4.3 Seleção das paragens de transbordo . . . 44

4 Implementação 47 4.1 O Sistema IMS . . . 47

(14)

CONTEÚDO

4.3 Esforço de desenvolvimento . . . 51

5 Resultados e Avaliação 53 5.1 Construção da rede . . . 53

5.2 Comparação das características entre os algoritmos . . . 55

5.3 Avaliação do cálculo de rotas . . . 55

5.4 Desempenho do algoritmo . . . 58

6 Conclusões e Trabalho Futuro 63

(15)

Lista de Figuras

2.1 Exemplo da desigualdade triangular . . . 9

2.2 Exemplo da pesquisa de rotas no RAPTOR entre dois vértices . . . 15

2.3 Logo da aplicação OpenTripPlanner . . . 17

2.4 Exemplo do cálculo de rotas no OpenTripPlanner na rede de Lisboa . . . 18

2.5 Logo da aplicação Navitia . . . 18

2.6 Exemplo de sugestões para um plano de viagem no serviço itinerarium.net . . . . 19

2.7 Linhas próximas de uma paragem no serviço itinerarium.net . . . 19

2.8 Todas as paragens de uma linha no serviço itinerarium.net . . . 20

2.9 Apresentação do resultado do cálculo de caminho mais curto no website do Metro do Porto . . . 21

2.10 Seleção das paragens de origem e destino no website do Metro do Porto . . . 21

3.1 Exemplificação do modelo realístico da versão tempo-expandido . . . 27

3.2 Exemplificação do modelo realístico tempo-dependente . . . 28

3.3 Exemplo simplificado da linha 205 da STCP . . . 30

3.4 Exemplificação de duas variantes de uma linha . . . 32

3.5 Extração dos pontos de interesse . . . 33

3.6 Associação de cada paragem às linhas que por ela passam . . . 34

3.7 Criação das ligações a pé a partir de uma paragem . . . 35

3.8 Rede de exemplo para o algoritmo RAPTOR. . . 40

3.9 Seleção das viagens a partir da paragem 2. . . 40

3.10 Rede de transportes após a análise da linha 205 a partir da paragem 4. . . 42

3.11 Rede de transportes após a análise da linha 700 a partir da paragem 3. . . 43

3.12 Rede de transportes após a análise da linha 205 a partir da paragem 5 na ronda K = 3. . . 43

3.13 Exemplificação da seleção da paragem de transbordo . . . 44

4.1 Esquematização da arquitetura lógica horizontal do sistema IMS da OPT. . . 48

4.2 Esquematização da arquitetura lógica vertical do sistema IMS da OPT. . . 50

5.1 Comparação dos tempos de resposta do algoritmo RAPTOR com e sem a restrição do tempo limite a caminhar. . . 60

5.2 Comparação dos tempos de resposta do algoritmo RAPTOR com e sem a restrição do tempo limite a caminhar, com um número máximo de rondas definido a 2. . . 60

5.3 Resultados da execução de 4 rondas com 1000 pedidos cada da adaptação do al-goritmo RAPTOR. . . 61

5.4 Resultados da execução de 4 rondas com 1000 pedidos cada da adaptação do al-goritmo RAPTOR, para diferentes valores de K. . . 62

(16)
(17)

Lista de Tabelas

3.1 Exemplo de horários para duas viagens distintos. . . 26

3.2 Exemplo de um conjunto de viagens para a variante principal da linha 205 da STCP. 31 3.3 Execução da ronda K = 0 do algoritmo RAPTOR. . . 39

3.4 Resultados após a ronda K = 1. . . 39

3.5 Resultados após a ronda K = 2. . . 42

3.6 Resultados após a ronda K = 3. . . 43

5.1 Resultados para os cálculos de rotas realizados com o algoritmo RAPTOR. . . 57

5.2 Resultados para os cálculos de rotas com pontos intermédios. . . 58

5.3 Comparação entre os tempos de resposta do algoritmo implementado durante a dissertação e aquele atualmente em utilização. . . 59

(18)
(19)

Abreviaturas e Símbolos

ALT A*, Landmarks and Triangle Inequality CSA Connection Scan Algorithm

IMS Information for Mobility Support

OPT Otimização e Planeamento de Transportes S.A. RAPTOR Round-Based Public Transit Routing

(20)
(21)

Capítulo 1

Introdução

O presente documento tem por objetivo apresentar o trabalho desenvolvido ao longo da tese de mestrado Evolução da componente algorítmica de cálculo de rotas do Move-Me. Este trabalho está inserido no Mestrado Integrado em Engenharia Informática e Computação e decorreu sob orientação do Professor Doutor João Canas Ferreira.

Neste capítulo são abordados os principais aspetos motivacionais, será feita uma apresentação do projeto e da empresa onde decorreu o trabalho. Para além disso são identificados e definidos os problemas a tratar. Finalmente também são definidos os objetivos que se pretendem alcançar no final deste trabalho.

1.1

Contexto

Numa altura em que os transportes públicos afirmam cada vez mais a sua importância no quo-tidiano das pessoas, é hoje mais importante do que nunca oferecer soluções rápidas e eficazes, capazes de responder às necessidades crescentes dos utilizadores. Consequentemente, e com as redes de transportes cada vez mais densas e complexas, a necessidade de criar ofertas de planea-mento de rotas multimodais tem vindo a aumentar.

Tipicamente é possível encontrar na internet serviços de planeamento de rotas, onde a um uti-lizador é pedido que selecione um ponto de origem, um ponto de destino e possivelmente critérios mais específicos como a hora de partida ou horas de chegada desejadas. Como resposta ao pedido é apresentado o pleaneamento de uma ou mais rotas encontradas. Infelizmente, grande parte des-ses sistemas tem uma falha em comum: estão centrados apenas numa empresa ou num meio de transporte específico. Por exemplo, pode ser necessário planear diferentes troços de uma viagem manualmente, escolhendo por exemplo um troço do percurso que deve ser percorrido de metro até à interface com os autocarros, outro troço que faz a ligação entre os autocarros e a estação dos comboios e finalmente um troço que faz a ligação do comboio até ao destino final.

(22)

Introdução

Para cada um destes troços é necessário selecionar transportes onde as horas de chegada no transporte atual e partida no transporte seguinte sejam compatíveis. Com a necessidade inerente de corrigir estas limitações, nos últimos anos têm surgido diversas aplicações que tentam unificar todos os meios de transporte de maneira a auxiliar os utilizadores na pesquisa de rotas do cami-nho mais curto. O problema de calcular uma rota de camicami-nho mais curto envolvendo diferentes meios de transporte é denominado como problema de transportes multimodais. Neste problema é pedido ao utilizador que forneça um ponto de origem, um ponto de destino e a hora de partida ou hora de chegada pretendida. Como resultado é mostrado o percurso mais curto tendo em conta o tempo que demora a ser percorrido e potencialmente o número de transbordos, que deverá ser minimizado. De realçar que logo aqui se evidencia uma diferença entre as redes de transporte público e as redes rodoviárias já que nas redes de transporte público o utilizador está dependente dos horários das empresas transportadoras, enquanto que numa rede de transporte rodoviário o uti-lizador poderá utilizar o veículo a qualquer hora. Desse modo, nas redes de transporte rodoviários tipicamente trabalhamos com tempos, idealmente em tempo real, ou quando não for possível ter acesso a informações em tempo real então deve ser usado o tempo estático fornecido pelas empre-sas, enquanto que nas redes rodoviárias trabalhamos com distâncias, ou com tempos diretamente proporcionais à distância, através do limite máximo de velocidade em cada troço.

O desafio passa então por encontrar algoritmos capazes de responder a pedidos de utilizadores de maneira eficiente.

1.2

A Empresa

A OPT, é uma empresa sedeada no Porto e é o local onde este trabalho será desenvolvido. A OPT foi formada em 1992 e tem como principal área de desenvolvimento a gestão operacional do transporte coletivo urbano. Tem como clientes algumas das empresas de transporte com mais relevo no território nacional, como a STCP, a Carris, a Metro do Porto, a TransDev e a CP.

A empresa prima por oferecer soluções informáticas inovadoras e constantemente atualizadas nas áreas da gestão, planeamento e otimização de transportes públicos e na geração automática de informação ao público. Como exemplo, o primeiro sistema desenvolvido pela empresa, o GIST – Gestão Integrada de Sistemas de Transportes, está hoje presente nas maiores empresas nacionais de transportes públicos, tendo vindo a sofrer diversas atualizações de modo a acompanhar as mais recentes evoluções tecnológicas.

Para além do que já foi referido anteriormente, a OPT também desenvolve soluções que têm como enfoque o apoio em tempo real. De entre essas soluções merecem especial destaque o sistema SMS e o sistema InfoBoard, que atualmente está instalado em diversas faculdades na zona do Porto. Também inserido nesta área está o projeto Move-Me, já distinguido a nível nacional com o prémio de inovação tecnológica. É neste projeto que se enquadra esta dissertação, através da conceção de um algoritmo capaz de dar resposta às necessidades crescentes por parte dos utilizadores.

(23)

Introdução

A OPT procura neste momento internacionalizar-se, explorando mercados emergentes que atu-almente ainda não possuem soluções tecnológicas sofisticadas. Dessa maneira, a empresa procura trabalhar nestas oportunidades de modo a potenciar os seus produtos em território estrangeiro.

1.3

Motivação e Objetivos

O foco da OPT são os sistemas de apoio à mobilidade em tempo real. Desse modo, é im-portante que construam os seus produtos com os algoritmos onde seja possível obter os tempos de resposta mais rápidos em tempo real. Assim, o objetivo deste trabalho é dar resposta a uma necessidade presente na empresa. O módulo responsável pelo cálculo do caminho mais curto está inserido no sistema IMS, e é denominado por PADA. O algoritmo de cálculo de rotas do Move-Me já está implementado, no entanto é demasiado lento em situações reais, podendo mesmo demorar mais de um minuto a executar. Consequentemente, é importante que se reduzam os tempos de resposta do algoritmo para o mínimo possível, idealmente a rondar os milissegundos. Assim, o objetivo deste trabalho passa pela implementação de um algoritmo eficiente capaz de dar resposta às necessidades atuais dos utentes que utilizam a aplicação Move-Me. Esse algoritmo deve ser rápido e capaz de funcionar com dados fornecidos em tempo real uma vez que as redes de trans-portes públicos não são estáticas, são redes onde os atrasos são uma presença constante. Para além disso o algoritmo deve ser capaz de responder a múltiplos pedidos em simultâneo para que os utilizadores não esperem demasiado tempo pelas respostas do servidor.

1.4

Estrutura da Dissertação

No capítulo2, é descrito o estado da arte e são apresentados trabalhos relacionados dentro da área do cálculo de rotas em redes de transportes públicos.

No capítulo3o problema a tratar é descrito de maneira mais aprofundada e é apresentada a metodologia seguida para a sua resolução.

No capítulo4são apresentadas e descritas as arquiteturas horizontal e vertical do sistema. Para além disso é feito um breve balanço relacionado com o esforço de desenvolvimento.

No capítulo5é feita uma comparação entre o desempenho do algoritmo atual e o algoritmo implementado durante a dissertação. Para além disso são apresentados resultados detalhados sobre o novo algoritmo.

No capítulo6é feito um balanço final sobre o trabalho realizado durante a dissertação e são sugeridas algumas melhorias que podem ser realizadas no futuro.

(24)
(25)

Capítulo 2

Estado da Arte

Este capítulo apresenta a investigação que foi realizada em relação à área onde incide o desen-volvimento deste projeto. São apresentados diversos métodos para se fazerem cálculos de caminho mais curto e é também apresentado um método desenvolvido com a intenção de calcular o caminho mais curto dentro de uma rede de transportes públicos, em tempo real.

2.1

Introdução

O cálculo do caminho mais curto é utilizado em diversas áreas no mundo real, como o plea-neamento de rotas em redes rodoviárias, ou até mesmo no plaplea-neamento de rotas para o transporte áereo. De um modo geral, o algoritmo de Dijkstra [Som14] é o mais utilizado. É um algoritmo capaz de calcular o caminho mais curto entre uma origem s e um destino t. O problema dos transportes multimodais pode ser resolvido através de uma generalização do algoritmo de Dijkstra [DW09], no entanto quando as redes multimodais tomam proporções grandes o tempo de cálculo do algoritmo pode estar na ordem dos minutos [DW09], lento demais para aplicações no mundo real. Desse modo, foi necessário criar técnicas de aceleração, capazes de melhorar o tempo de resposta do algoritmo diversas ordens de magnitude. São técnicas que numa primeira etapa pas-sam por uma fase de pré-procespas-samento onde irão ser introduzidos atalhos entre os vértices de um grafo e onde de um modo geral o tamanho do grafo será reduzido. Esta versão reduzida do grafo será utilizada para responder a pedidos dos utilizadores. São técnicas que se podem dividir nas seguintes categorias: pesquisa bidirecional, pesquisa orientada para um objetivo e contração. Cada uma das técnicas referidas anteriormente será abordada individualmente mais à frente no documento.

(26)

Estado da Arte

2.2

Algoritmos de caminho mais curto

Nesta secção será abordada alguma teoria de grafos uma vez que uma grande parte algoritmos de pesquisa de caminho mais curto trabalha sobre grafos e é a forma mais frequente de modelar uma rede de transportes. De seguida serão abordadas algumas técnicas básicas de pesquisa e finalmente algumas técnicas capazes de guiar o algoritmo para um objetivo.

Um grafo G=(V,E) consiste num conjunto de vértices que pertencem a V e um conjunto de arestas E formadas por dois nós pertencentes a V. Os grafos considerados neste documento são direcionados, logo uma aresta (i, j) é considerada uma aresta direcionada de i para j. Neste do-cumento os vértices representam pontos específicos de uma rede rodoviário ou paragens de uma rede de transporte e uma aresta entre dois vértices representa uma via que liga dois pontos ou uma conexão entre duas paragens. A cada aresta é atribuído um peso não negativo, que é interpretado de maneira diferente quando estamos a lidar ou não com horários. No cenário da independência do tempo é suficiente atribuir um peso constante a uma aresta, que poderá ser por exemplo a distância entre dois vértices. Já no cenário da dependência de tempo é necessário utilizar uma função de peso que atribui a uma aresta diferentes pesos durante o dia [DN12]. Os grafos que utilizam estas funções de custo para calcular o peso de uma aresta são chamados de grafos time-dependent. O resultado da função de cálculo do peso pode ser entendida como o tempo de viagem entre duas estações e deve respeitar a propriedade FIFO (First-In-First-Out). Esta propriedade assegura que um transporte t1 que sai de uma paragem i, representada por vértice do grafo, antes de um trans-porte t2, não chega mais tarde do que o transtrans-porte t2 a uma paragem j. Esta propriedade pode ser aplicada em quase todas as redes de transporte, no entanto nem sempre é válida nas redes de transporte rodoviário.

Um caminho em G é composto por uma sequência de vértices, onde dois vértices estão liga-dos por uma aresta. O comprimento de um caminho é a soma de toliga-dos os pesos das arestas que o compõem. No caso da dependência de horários o comprimento do caminho pode ser interpre-tado como o tempo total que demora a percorrer um caminho numa determinada hora do dia. O tempo de uma aresta pode variar durante as várias horas do dia, uma vez que nas horas de ponta geralmente demorará mais tempo a percorrer o mesmo troço.

2.2.1 Técnicas Básicas

A solução padrão para resolver o problema do caminho mais curto é aplicar o algoritmo de Dijkstra[BDG+16] a um grafo G. Este algoritmo recorre a uma fila de prioridade Q, onde mantém os vértices ordenados pela distância até uma origem s. Todas as distâncias são inicializadas a infinito, excepto a distância da origem até à origem, que é inicializada a 0. Inicialmente, o único vértice presente na fila de prioridade Q é s. Em cada iteração, é extraído e removido da fila de prioridade Q o vértice u com menor distância até à origem s, e é calculada a distância para cada um dos seus vizinhos v. Esta distância pode ser representada por dist(s, u) + length(u, v). Se este custo melhorar dist(s, v), então o custo é atualizado e o vértice v é adicionado à fila de prioridade Q, com

(27)

Estado da Arte

custo dist(s, v). No algoritmo de Dijkstra a pesquisa pode parar assim que o vértice objetivo, t, for analisado.

A complexidade temporal do algoritmo de Dijkstra sem recorrer a uma fila de prioridade é O(|V|2), em que V representa o conjunto de vértices. A complexidade temporal deste algoritmo

pode ser melhorada recorrendo a uma fila de prioridade e a Fibonacci Heaps [FT87], passando a serO(|E| + |V|log|V|), onde E representa o conjunto das arestas do grafo [Som14].

A forma mais usual de reduzir o espaço de pesquisa é através da pesquisa bidirecional [GW05]. Neste método são executadas duas pesquisas simultaneamente, uma da origem s para o destino t, e outra do destino t para a origem s. A pesquisa pára quando existe uma intersecção de pelo menos um vértice no caminho de s para t. Este método pode diminuir o espaço de pesquisa para cerca de metade, e é mais utilizado em redes rodoviárias. Nas redes de transporte público é mais difícil utilizar esta técnica uma vez que não se conhece o instante de tempo que deve ser utilizado para fazer a pesquisa do objetivo t para a origem s. Para se contornar a situação da pesquisa t-s, pode-se utilizar limites inferiores durante o cálculo desta pesquisa até ao momento onde as duas se interceptem e a partir daí pode ser calculada a restante parte time-dependent do grafo [DPW15].

2.2.2 Pesquisa orientada para um objetivo

Os métodos de pesquisa orientada para um objetivo, ao contrário do algoritmo de Dijkstra que apenas seleciona a menor distância entre s e t, tentam guiar o algoritmo em direção ao objetivo, evitando assim analisar vértices que não estão na direção do objetivo e consequentemente redu-zindo o espaço de pesquisa. São algoritmos que tentam tirar partido das estruturas das redes em que estão inseridos.

2.2.2.1 Algoritmo de pesquisa A*

O algoritmo de pesquisa A* [GKW06][GH04] é um dos algoritmos mais utilizados na cate-goria de pequisa orientada para um objetivo. É uma versão modificada do algoritmo de Dijkstra na qual a prioridade de um vértice v é colocada a d(s, v) + π(v). A função π(v) representa uma função potencial dos vértices, que é um limite inferior d(v, t) da distância entre o vértice v e o vértice objetivo t e pode ser entendido como uma estimativa da distância entre os dois vértices. Se o valor da função potencial for 0, o algoritmo deixa de ter orientação e comporta-se como o algoritmo de Dijkstra. Esta função permite que os vértices que estão mais próximos do objetivo sejam analisados primeiro. O valor da função objetivo nunca deve sobre-estimar o custo real para chegar ao nó objetivo mais próximo.

Por outro lado, se o valor da função objetivo correspondesse a um limite inferior exato, então só os vértices que estão no caminho mais curto entre s e t seriam analisados. A qualidade da pesquisa do A* depende diretamente da qualidade da função potencial utilizada, por isso quanto mais precisa for a função potencial menor será o espaço de pesquisa do algoritmo.

Nas redes de transporte rodoviário onde se pretende minimizar a distância percorrida, a função potencial escolhida pode ser a distância geográfica entre os vários pontos, que dará alguns limites

(28)

Estado da Arte

inferiores razoáveis. O algoritmo A* funciona de maneira eficiente quando o número de vértices a pesquisar é de tamanho reduzido, no entanto quando se aplica este método de pesquisa a redes de média e grandes dimensões geralmente obtêm-se tempos de resposta muito altos, que não são práticos para situações no mundo real. Para se contornar essa situação podem ser utilizados métodos de pesquisa que tirem partido de técnicas de aceleração antes de passarem à fase de consulta. Entre esses métodos podem ser destacados o ALT [DW09][EP13][BDG+16] e a técnica Arc Flags[DW09] [BD10], que apresenta os tempos de consulta mais rápidos de entre as técnicas de aceleração.

2.2.3 Técnicas de Aceleração

Com a crescente complexidade das redes de transporte, os algoritmos como o Dijkstra e até mesmo o A* deixaram de conseguir dar respostas rápidas e eficazes no capítulo do planeamento de rotas. Em redes de larga escala podem demorar vários segundos até conseguirem encontrar um caminho mais curto entre dois pontos de uma rede. Desse modo foi necessário criar técnicas de aceleração capazes de correrem ordens de magnitude mais rápido do que algoritmos conven-cionais. Uma grande parte das técnicas de aceleração tem por base o algoritmo de Dijkstra e o objetivo destas técnicas é numa primeira fase, denominada de pré-processamento, reduzir o espaço de pesquisa sem deixar de ter em conta o critério de otimalidade. Numa segunda fase, na fase de consulta, os dados do espaço de pesquisa mais reduzido são utilizados para responder a pedidos dos utilizadores.

2.2.3.1 ALT

A técnica ALT é uma técnica de pesquisa orientada para um objetivo e é uma das mais utili-zadas e mais eficazes na pesquisa em redes rodoviárias. É baseada no algoritmo A*, melhorado através da introdução de marcos. Os marcos correspondem a um conjunto de vértices do grafo que são utilizados durante a fase de pré-processamento para se calcular a distância entre estes vér-tices de referência e todos os outros do grafo, evitando dessa maneira calcular a distância entre todos os pares de vértices do grafo, o que tornaria esta fase muito custosa. Os cálculos são feitos recorrendo à desigualdade triangular. No ALT são escolhidos um conjunto de vértices e é a partir destes vértices que a função potencial do A* é calculada, com o auxílio da desigualdade triangular (figura2.1).

Antes da fase de consulta estes algoritmos passam por uma fase de pré-processamento. No caso do algoritmo ALT, o pré-processamento é feito em dois passos: escolha dos marcos mais adequados e cálculo da tabela de distância entre todos os marcos. A segunda tarefa pode ser facilmente resolvida recorrendo ao algoritmo de Dijkstra, uma vez que o número de marcos é geralmente baixo.

Em relação à escolha dos marcos (em redes rodoviários) existem diversos métodos, como o Avoid e o Max Cover, que serão explicados mais à frente. Depois de escolhido o conjunto L dos marcos é necessário calcular a tabela de distância de todos os vértices v até todos os marcos l ∈

(29)

Estado da Arte

Figura 2.1: Exemplo da desigualdade triangular

L. Dado um marco l ∈ L, um conjunto de vértices l, u e v e a função dist(s, t) que representa o comprimento do caminho mais curto do vértice s até ao vértice t no grafo G, a desigualdade triangular pode ser traduzida no seguinte:

dist

(u, v) + dist(v, l) ≥ dist(u, l)

dist(l, u) + dist(u, v) ≥ dist(l, v)

A partir destes dados podemos calcular o limite inferior de dist(u, v) através da seguinte fór-mula:

R(l) = max(u, l) − dist(v, l), dist(l, v) − dist(l, u)

O valor de R(l) deverá ser igual ou inferior a dist(u, v).

O melhor limite inferior li pode então ser obtido utilizando o marco com o maior limite inferior de acordo com a seguinte fórmula:

li(l) = max_entre_marcos(dist(u, l) − dist(v, l), dist(l, v) − dist(l, u))

A partir daqui podemos alterar a prioridade de um nó u na fila de prioridade para o seguinte:

dist(s, u) + li(u)

A heurística Avoid tenta encontrar regiões de um grafo que não estão bem cobertas pelo con-junto atual de marcos. Isso é feito a partir da construção de uma árvore de caminho mais curto de um vértice aleatório u. O peso de cada vértice v é a diferença entre dist(v, u) e o limite inferior dist(v, u) que foi obtido pelos respetivos marcos. O tamanho de um vértice v é a soma do seu peso e o tamanho dos seus filhos na árvore de pesquisa de caminho mais curto. Se uma subárvore dessa árvore com raíz em v contém um marco, o tamanho de v é colocado a 0. A árvore de caminho

(30)

Estado da Arte

mais curto é percorrida com início no vértice de maior tamanho, seguindo os vértices filho com o maior tamanho. A folha da árvore obtida neste percurso é adicionada ao conjunto dos marcos. Nesta heurística, a primeira raíz é selecionada aleatoriamente. As seguintes são escolhidas com uma probabilidde proporcional ao quadrado da distância do marco mais próximo.

A heurística Max Cover tenta colmatar uma desvantagem da heurística Avoid, que é a fase inicial. A primeira raíz é escolhida aleatoriamente e os seguintes marcos estão muito dependentes do marco inicial. Desse modo, a heurística Max Cover inicialmente escolhe um conjunto de marcos candidatos utilizando o Avoid. Os marcos que são utilizados são selecionados do conjunto dos candidatos através de várias tentativas de pesquisas locais, cada uma começando num vértice aleatório inicial.

A fase de consulta é muito semelhante ao algoritmo de Dijkstra bidirecional, com a diferença de que em vez da prioridade de um nó ser calculada apenas recorrendo à distância até s/t, aqui também utilizamos o valor do limite inferior calculado anteriormente até aos nós t(destino) e s(origem), respetivamente. Não se deve calcular o limite inferior em relação a todos os marcos uma vez que produz demasiado overhead durante a fase de consulta. Para resolver esse problema geralmente é selecionado um conjunto pequeno (normalmente 2) de marcos ativos, dependendo da consulta em questão. Os marcos ativos vão ser atualizados de k em k iterações se já não produzirem os melhores limites inferiores para os vértices em questão.

2.2.3.2 Arc Flags

A segunda abordagem para a pesquisa orientada para um objetivo é designada por Arc Flags [BD10]. Tal como as anteriores, esta técnica é dividida em duas partes: uma fase de pré-processamento e uma fase de consulta. Durante a fase de pré-processamento o grafo é particionado em k células equilibradas, isto é, que têm um número semelhante de vértices, e para cada aresta de cada uma das células são calculados k indicadores, representadas por um vetor de K bits. Cada célula deve ter um número pequeno de vértices na fronteira, uma vez que calcular as arestas para todos os vértices levaria demasiado tempo. O bit de índice i é colocado a 1 se a aresta está no caminho mais curto para qualquer outro vértice da célula i. As arestas que não contêm o bit colocado a 1 para a célula que contém o vértice t são eliminadas. Aqui já se pode inferir sobre uma diferença importante entre a técnica ALT e a técnica Arc Flags. Enquanto a ALT tenta guiar a pesquisa em direção ao vértice t, a técnica Arc Flags tenta encontrar caminhos que possam ser eliminados durante a pesquisa, reduzindo assim ainda mais o espaço de pesquisa em relação à técnica ALT.

A fase de pré-processamento do algoritmo Arc Flags é dividida em duas fases: no particio-namento do grafo e no cálculo das respetivas Arc Flags. Na fase de cálculo das Arc Flags são calculados vários subgrafos para cada região e a cada aresta é associado um vector de indicadores com comprimento igual ao número de regiões. A maneira mais eficiente de se calcular as Arc Flagsrecorre apenas aos vértices das fronteiras de cada região. Um caminho mais curto com ob-jetivo numa região R tem de entrar nessa região em algum ponto, logo é suficiente calcular árvores de caminho mais curto inversas a partir dos vértices das fronteiras. Isto permite diminuir o tempo de pré-processamento, no entanto continua a ser bastante alto, podendo mesmo levar algumas

(31)

Estado da Arte

horas a completar o processo. A abordagem que permite os tempos de pré-processamento mais rápidos é a Abordagem Centralizada.

A fase de consulta deste algoritmo é muito semelhante ao algoritmo de Dijkstra. Para calcular o caminho mais curto entre dois vértices s e t, inicialmente é determinada a célula onde está contido o vértice t e só as arestas que têm o bit colocado a 1 para esta região é que são analisadas.

2.2.3.3 Arc Flags de múltiplos níveis

A técnica de Arc Flags de múltiplos níveis é uma melhoria em relação à técnica descrita ante-riormente. Aqui, um segundo nível de de arc flags são calculadas para cada uma das células. Cada célula C vai ser dividida em várias subcélulas e serão novamente calculadas as Arc Flags para cada subcélula. O pré-processamento em redes de transporte rodoviário, onde não se depende de horários, é muito semelhante ao processamento no método descrito em cima. Inicialmente, as arc flagspara os níveis superiores são calculadas da mesma maneira em relação ao método anterior. Para se calcular as arc flags dos níveis inferiores é construída uma árvore de caminho mais curto para todos os vértices da fronteira do nível inferior. Quando todos os vértices da célula C que contém um conjunto de subcélulas foram visitados o crescimento da árvore de pesquisa pode ser terminado. Finalmente, uma arc flag de um nível inferior é colocada a 1 se a aresta fizer parte de pelo menos uma árvore de caminho mais curto.

2.2.3.4 Contração

Uma das principais técnicas técnicas de aceleração utilizadas nas redes rodoviárias é a contra-ção [GSSD08][BDS+10]. Nesta técnica o tamanho do grafo é reduzido, quer através dos vértices quer através das arestas. As duas formas de redução do tamanho do grafo são denominadas como node-reduction e edge-reduction, respetivamente. Na contração os vértices que não são consi-derados importantes são removidos e são adicionados atalhos entre os vértices não removidos, de modo a preservar as distâncias dos nós removidos. Ao contrair vértices menos importantes a pesquisa para o caminho mais curto só necessita de analisar que são considerados importantes.

Na contração, os vértices são ordenados pelo critério de importância e os vértices são contraí-dos por ordem crescente de importância, ou seja, do menos para o mais importante. A contração tem como objetivo tirar partido da hierarquia existente nas redes de transporte rodoviário. O al-goritmo de Hierarquias de Contração tenta executar uma operação de contração de um vértice repetidamente. Para se contrair um vértice v, é criado uma aresta entre cada par de vértices vizi-nhos u e l se o caminho mais curto de u para l for único e contiver v.

É uma técnica que também pode ser combinada com a pesquisa bidirecional na fase de con-sulta. Nesta fase é executada uma pesquisa no grafo G, e são visitadas as arestas que foram introduzidas como atalhos na fase de pré-processamento. Esta fase consiste na aplicação da téc-nica de contração de vértices até que não seja possível contrair mais nenhum vértice, seguida da aplicação da técnica de contração de arestas no grafo anteriormente obtido. As técnicas referidas

(32)

Estado da Arte

anteriormente serão explicadas mais à frente em detalhe. Durante a pesquisa só são visitados vér-tices que levem a vérvér-tices com ranking mais alto, isto é, que são considerados mais importantes. Com a aplicação desta técnica é possível obter caminhos mais curtos em grafos intercontinentais na ordem dos milissegundos.

2.2.3.5 Contração de vértices

Nesta técnica o objetivo é reduzir o número de vértices no final, contraindo vértices até que mais nenhum possa ser contraído. Após a aplicação da contração de vértices o grafo é dividido em duas partes, o núcleo e a component. O núcleo do grafo é constituído por todos os vértices que não foram removidos durante a fase de contração, uma vez que serão estes vértices serão os utilizados para fazer os cálculos de caminho mais curto. Já a component do grafo G é constituída por todos os vértices que foram removidos do grafo durante a contração. Inicialmente é assumido que todos os vértices pertencem ao núcleo, uma vez que nenhum ainda foi removido.

Para se contrair um vértice v primeiro removemos o vértice v de um grafo G, as suas arestas de entrada e as suas arestas de saída. Seja o conjunto dos arestas de entrada o conjunto E, e o conjunto das arestas de saída o conjunto S. Para cada vértice de entrada u e para cada vértice de saída w é criado uma nova aresta com peso dist(e) = dist(u, v) + dist(v, w). A função dist representa o valor da distância entre os dois vértices. Se a inserção da nova aresta e levar a múltiplas arestas e2 de uaté w, então colocamos o peso da aresta já existente para o peso mínimo dist(e2) = min[dist(e), dist(e2)]. De realçar que esta técnica preserva as distâncias corretas entre quaisquer dois vértices da parte núcleo do grafo G.

2.2.3.6 Contração de arestas

Na técnica de Contração de vértices podem ser introduzidos atalhos que não são necessários para manter as distâncias corretas na parte core de um grafo. Desse modo, a técnica de Contração de arestastem por objetivo remover algumas arestas introduzidas na técnica anterior de modo a que as pesquisas de caminho mais curto sejam ainda mais eficientes. A contração das arestas é feita logo após a contração de vértices, na parte core do grafo. Para cada nó v da parte core do grafo e para cada aresta (v, w) é feita uma pesquisa de caminho mais curto. Se a distância do caminho mais curto entre o vértice v e o vértice w for inferior ao peso da aresta (v, w), que representa o atalho entre os dois vértices, então a aresta (v, w) pode ser removida do core.

Uma forma mais eficiente de executar este processo é construir uma árvore de caminho mais curto a partir do vértice v e parar a pesquisa assim que todos os vizinhos de v forem visitados. De seguida, para cada vizinho w do vértice v verificamos se o pai do vértice w é o vertice v. Se não for então podemos remover a aresta (v, w) do grafo porque o caminho mais curto entre estes dois vértices não inclui a aresta (u, w).

(33)

Estado da Arte

2.3

Transportes Públicos

Nos últimos anos foram desenvolvidas várias técnicas que depois de passarem por uma fase de pré-processamento conseguem encontrar o caminho mais curto em redes globais em milisse-gundos, muito mais rápido do que o algoritmo de Dijkstra. No entanto, nenhuma destas técnicas funciona com o mesmo grau de eficiência quando aplicada a uma rede de transporte públicos. Os algoritmos com maior sucesso nas redes de transporte rodoviário são aqueles baseados na contra-ção.

Nesta secção serão explicados alguns métodos para se calcular os percursos mais rápidos em redes de transportes públicos, será apresentada uma maneira de se representar os dados de uma rede de transporte público e serão apresentadas algumas aplicações já existentes no mercado atu-almente.

2.3.1 Algoritmos para cálculo de caminho mais curto

Os algoritmos apresentados anteriormente são baseados no Dijkstra. Infelizmente todos eles têm o problema comum de demorarem bastante tempo na fase de pré-processamento. Isto torna-os difíceis de se adaptarem a redes de transportes públictorna-os, principalmente devido ao carácter dinâmico inerente às redes de transportes públicos. Se existirem alterações nestas redes será ne-cessário correr novamente o algoritmo de pré-processamento, o que poderá demorar mais algumas horas, ou mesmo dias. Além disso, o tempo de chegada ao destino não é geralmente suficiente para se calcular a melhor solução, uma vez que o número de transbordos também deve ter sido em conta. Assim, e de modo a colmatar essa limitação, ultimamente têm sido desenvolvidos diversos algoritmos específicos para redes de transportes públicos.

De seguida será apresentado um dos algoritmos mais eficientes nestas redes, o RAPTOR, e que ao contrário daqueles apresentados até agora, não é baseado no Dijkstra. Para além do algo-ritmo que será apresentado também existe o CSA [DPSW13], no entanto este apresenta diversas limitações, o que não o torna ideal para cenários realistas. O CSA apenas calcula a chegada mais próxima, no entanto pode existir outra que parta mais tarde e chegue ao destino mais cedo. Além disso não tem em consideração o número de transbordos e nos caminhos a pé não é considerado o tempo.

2.3.1.1 RAPTOR

O algoritmo RAPTOR [DPW12] não se baseia no algoritmo de Dijkstra, nem em grafos, nem em pré-processamento, o que o torna ideal para utilizar em redes totalmente dinâmicas. Para além disso pode ser facilmente paralelizado pelos vários cores do CPU. Este algoritmo toma sempre como base os critérios tempo de chegada e número de transbordos, no entanto pode ser facilmente adaptado para trabalhar com uma quantidade arbitrária de critérios, como por exemplo, as tarifas em diversas zonas.

(34)

Estado da Arte

O algoritmo RAPTOR (figura2.2) opera por rondas e visita uma linha de um transporte pú-blico no máximo uma vez por ronda. Neste algoritmo cada ronda corresponde a um transbordo e numa viagem entre uma origem e um destino com i jornadas, sabemos que existem sempre i − 1 transbordos. Como foi dito anteriormente, o algoritmo pode ser paralelizado entre vários cores, no entanto só podem ser paralelizadas linhas independentes, isto é, linhas que não têm paragens em comum. Este algoritmo funciona diretamente sobre um horário.

Seja S o conjunto de todos os segundos do dia, P um conjunto de paragens, L um conjunto de linhas, J um conjunto de jornadas e F um conjunto de ligações a pé entre as diversas estações. As jornadas correspondem a um conjunto de estações que um veículo visita numa linha. A diferença fundamental entre as jornadas e as linhas é que as jornadas estão dependentes do tempo, enquanto que nas linhas apenas são definidas as paragens sem ter em consideração o tempo de passagem nas paragens. Desse modo, tipicamente existem mais jornadas do que linhas. Uma paragem no conjunto P corresponde a um local específico onde um veículo pára para que novos passageiros embarquem ou abandonem o veículo. Cada elemento do conjunto F corresponde a um par de pa-ragens e entre esse par está associado um tempo, que corresponde ao tempo médio necessário para se deslocarem de uma paragem até à outra a pé. Esta função é representada por dist_ f (p1, p2). A cada jornada, em cada paragem, deve estar sempre associado um tempo de chegada e um tempo de partida, representado pelas funções t_chegada( j, p) e t_partida( j, p). O valor de t_chegada( j, p) deve ser sempre menor ou igual ao valor de t_partida( j, p).

O resultado do cálculo deste algoritmo é um conjunto de viagens. Cada viagem é definida por um conjunto de jornadas, bem como ligações a pé que possam ser necessárias fazer no caso dos transbordos.

Neste algoritmo são pedidos ao utilizador os seguintes dados: uma paragem de origem p_origem, uma paragem de destino p_destino e uma hora de partida t_partida. A ideia do algoritmo RAPTOR é calcular em cada ronda k uma viagem até à paragem de destino no menor tempo possível e que tenha no máximo k jornadas. Cada ronda k deste algoritmo calcula a maneira mais rápida de se chegar a todas as paragens no máximo com k - 1 transbordos. Em cada ronda é necessário manter para cada paragem o tempo mais rápido de se chegar a essa paragem com no máximo k jorna-das. Desse modo, é necessário associar a cada paragem um array, onde o elemento i representa o tempo mais rápido para se chegar a essa paragem com i jornadas. Seja essa função a função f_tempo(i, p). Inicialmente todos os valores nestes arrays são colocados a infinito, exceto o valor f_tempo(0, p), que é colocado a t_partida. Em cada ronda k são executados 3 passos.

No primeiro passo o valor de f _tempo(k, p) é igualado ao da ronda anterior f _tempo(k −1, p), para todas as paragens. Como o valor do tempo de chegada a cada paragem só pode minimizado, esta função coloca um limite superior para o menor tempo com k jornadas. Em cada ronda k só são examinadas as linhas que contêm pelo menos uma paragem em comum com a ronda k - 1. Para se determinar quais são as linhas a ser examinadas, durante a ronda k - 1 as paragens para o qual o valor de f _tempo(k − 1, p) foi melhorado são marcadas. Assim, durante a ronda k iteramos por todas as paragens marcadas e descobrimos quais são as linhas que a contêm. Se existir mais do que uma paragem marcada para uma linha só será visitada a primeira paragem onde se possa

(35)

Estado da Arte

Figura 2.2: Exemplo da pesquisa de rotas no RAPTOR entre os vértices 1 e 6. A linhas 205 é analisada na primeira ronda, as linhas 505 e 705 são analisadas na segunda ronda e finalmente a linha 506 é analisada na terceira ronda. A pesquisa das rotas nas linhas começa nos vértices marcados a vermelho.

embarcar nessa linha.

A uma linha estão associadas várias jornadas ao longo do dia. Seja a função prox_jornada(r, p)que representa a próxima jornada na linha r, na paragem p, onde alguém pode embarcar. Isto quer dizer que queremos encontrar um valor tal que t_chegada(j, p) seja maior ou igual ao valor de f_tempo(k - 1, p). Quando este valor for encontrado na linha então é necessário colocar um apontador para esta paragem uma vez que foi aqui onde embarcamos. Este apontador servirá para no final se reconstruir o caminho. De seguida é necessário atualizar o valor de f_tempo(k, p)para esta jornada. Pode ser necessário atualizar a jornada k quando um caminho mais rápido para a paragem p foi encontrado numa ronda anterior. Desse modo é necessário verificar em todas as paragens se t_chegada(j, p) é maior do que f_tempo(k - 1, p). Se for, então o valor de prox_jornada(r, p)deve ser calculado novamente.

Finalmente, a última etapa da ronda k tem em consideração os caminhos que podem ser percor-ridos a pé. Para cada caminho dist_f(p1, p2) o valor de f_tempo(k, p2) é colocado a min[f_tempo(k, p2), f_tempo(k, p1) + dist_f(p1, p2)]. O conjunto de todas as ligações a pé é transitivo, logo não é necessário existir ligações diretas entre todos os caminhos. Se um caminho existir a pé exsitir entre duas quaisquer paragens então é garantido que será encontrado. O algoritmo pode ser parado quando já nenhum valor f_tempo(k, p) for melhorado.

Este algoritmo pode correr em tempo linear, por ronda. Em cada ronda, uma linha é visitada no máximo uma vez, ou seja no máximo visitamos todas as paragens da rede no total. Como o valor de prox_jornada(r, p) está em cache, então visitamos cada jornada de uma linha no máximo uma vez. Desse modo, a complexidade temporal do algoritmo éO(K(∑r∈R|r| + |T | + |F|)), onde

R representa o conjunto de todas as linhas da rede, T representa o conjunto de todas as viagens de todas as linhas e F representa o conjunto de todas as ligações a pé.

(36)

Estado da Arte

de processar linhas independentes. Para se calcular as linhas independentes deve construir-se um grafo de conflito, com base no facto de que duas linhas que não têm paragens em comum podem ser analisadas simultaneamente. Neste grafo, não direcionado, cada vértice corresponde a uma linha e as arestas entre os vértices correspondem a rotas que partilham pelo menos uma paragem. Neste algoritmo a ideia é colorir linhas de maneira a que vértices adjacentes não tenham a mesma cor. A partir daí é sabido que duas linhas que tenham a mesma cor podem ser processadas paralelamente. O RAPTOR é capaz de correr ordens de magnitude mais rápido do que algoritmos baseados no Dijkstra. Na rede de Londres, onde existem mais de 20 000 paragens, mais de 2 200 linhas e 5 milhões de partidas distintas, o RAPTOR é capaz de responder a consultas em cerca de 8ms numa máquina com um CPU Intel Xeon X5680, com 96GB de RAM DDR3-1333.

2.3.2 Representação dos dados

Atualmente, o formato mais comum para se representar os dados é o GTFS (General Tran-sit Feed Specification) [Goo]. É um formato utilizado para se representar informação como os horários das diferentes transportadoras e as informações geográficas das paragens e das linhas.

Este formato é composto por um conjunto de ficheiros de texto comprimidos num ficheiro ZIP, em que cada ficheiro é responsável por modelar um aspeto da rede de transportes públicos. Os ficheiros são os seguintes: agency.txt, que é o ficheiro onde as transportadoras podem colocar as suas informações básicas como os contactos, morada e nome; stops.txt que representa a lista de paragens onde os passageiras podem entrar ou abandonar os veículos. As paragens estão as-sociadas a uma empresa de transportes. O ficheiro routes.txt é responsável por armazenar todas as linhas onde uma transportadora opera. Uma linha pode ter um nome curto, um nome longo, uma descrição, um tipo consoante o veículo que opere na linha e uma cor. O ficheiro trips.txt é constituído por todas as viagens dentro de uma linha. A diferença entre as viagens e as linhas é que às viagens também está associado um tempo. Por exemplo, um veículo pode percorrer uma linha dezenas de vezes durante um dia, por isso normalmente existem muito mais viagens do que linhas. O ficheiro stop_times.txt é constituído por todos os tempos de chegada e de partida em cada paragem, por viagem. Finalmente, o ficheiro calendar.txt guarda informação sobre os dias da semana em que uma viagem está disponível. Por exemplo, os veículos podem ter horários diferen-tes. Uns podem apenas operar durante os dias de semana e outros apenas aos fins-de-semana, daí a necessidade de se fazer a distinção entre vários serviços. Estes são os ficheiros que são obrigató-rios na especificação GTFS. Opcionalmente, pode ainda ser fornecida informação sobre as regras de tarifas, preço de cada zona e ainda informação sobre a descrição do caminho físico que um veículo percorre. Esta informação é armazenada através do valor da latitude e longitude de cada ponto que um veículo percorre.

2.3.3 Aplicações Existentes

Hoje em dia já existem várias soluções construídas especificamente para trabalharem em redes de transportes públicos. Geralmente são aplicações onde um utilizador pode fornecer um conjunto

(37)

Estado da Arte

de dados de um ou mais operadores e depois de uma fase de carregamento de dados para a apli-cação o utilizador pode fazer consultas ao sistema. Regra geral estas aplicações funcionam com dados estáticos, isto é, não são capazes de retirar informação em tempo real e de fazer os cálculos de rotas a partir desses dados.

2.3.3.1 OpenTripPlanner

O OpenTripPlanner (figura2.3) [Ope] é uma plataforma de código aberto para redes de trans-portes públicos multi-modais e para múltiplas agências. É uma aplicação capaz de correr no Win-dows, Mac e Linux. Os dados fornecidos à aplicação devem estar no formato GTFS. Segue um modelo cliente-servidor, fornecendo várias interfaces de mapas para serem utilizados diretamente na aplicação ou então uma REST API para que possa ser utilizada com aplicações de terceiros.

Figura 2.3: Logo da aplicação OpenTripPlanner

Quando um utilizador abre a aplicação, depois de feito o pré-processamento dos dados, pode selecionar um ponto de origem e um ponto de destino e será presenteado com um conjunto de alternativas de rotas onde é informado sobre os veículos onde deve embarcar, até que paragem deve permanecer nesse veículo e onde deve fazer um transbordo para outro veículo (caso seja necessário) para que possa prosseguir a sua viagem até ao fim (figura2.4). As várias alternativas de rotas geralmente estão ordenadas por hora crescente de ordem de chegada e de número de transbordos.

Nesta aplicação também é possível selecionar outros critérios como a pesquisa apenas em lo-cais que podem ser percorridos por cadeiras de rodas, a pesquisa em lolo-cais onde as zonas percor-ridas a pé não sejam muito acentuadas, é possível selecionar a distância máxima que se pretende percorrer a pé e até mesmo a hora a que se pretende partir ou chegar. Esta aplicação não trabalha sobre dados em tempo real e o algoritmo de cálculo de rotas é baseado no A* com a heurística de Tung-Chew[TTLC92].

2.3.3.2 Navitia

Esta aplicação web (figura 2.5) [Nav] é um conjunto completo para quem queira gerir as rotas de uma empresa de transportes públicos ou fazer o cálculo dentro de caminho mais curto

(38)

Estado da Arte

Figura 2.4: Exemplo do cálculo de rotas no OpenTripPlanner na rede de Lisboa

dentro dessa rede. Permite calcular o caminho mais curto entre um ponto de origem e um ponto de destino para todas as formas de viajar: metro, autocarro, bicicleta, carro ou até mesmo a pé. Esta aplicação também trabalha sobre dados estáticos fornecidos através de ficheiros GTFS. Esta é a funcionalidade principal da aplicação. Está também disponível uma funcionalidade capaz de mostrar as próximas partidas e chegadas para um meio específico de transporte numa paragem selecionada. Também é possível encontrar os diferentes meios de transporte disponíveis perto de uma localização GPS ou de uma morada. Esta aplicação também se destaca por fornecer diversos datasetsde diversas partes do mundo. Através destes datasets é possível criar novas aplicações ou até mesmo agregar diferentes datasets. Os datasets são unificados no formato GTFS.

(39)

Estado da Arte

Figura 2.6: Exemplo de sugestões para um plano de viagem no serviço itinerarium.net

Atualmente a aplicação já conta com cerca de 400 datasets e está presente em cerca de 25 países. No conjunto agregado dos datasets fazem parte cerca de 1600 redes de transportes públicos a nível global.

2.3.3.3 Itinerarium

O serviço Itinerarium é um sistema nacional e funciona na rede de transportes da STCP, Metro e CP. Este serviço permite a um utilizador fornecer dois pontos, o ponto de origem e o ponto de destino, e a partir desses dois pontos são apresentadas diversas alternativas (figura2.6), ordenadas pelo tempo de chegada e pelo número de transbordos. Este serviço permite também identificar as linhas e paragens que se situam perto de uma determinada paragem (figura2.7) e até mesmo ver todas as paragens que pertencem a uma linha (figura2.8).

(40)

Estado da Arte

Figura 2.8: Todas as paragens de uma linha no serviço itinerarium.net

2.3.3.4 Metro do Porto

O serviço web do Metro do Porto dispõe de uma funcionalidade que permite aos utilizadores calcular a forma mais rápida de percorrer um percurso entre dois pontos na rede do Metro do Porto. A um utilizador é pedido a estação de origem e a estação de destino, bem como a hora a que pretende partir ou a hora a que pretende chegar ao destino. Feito o cálculo, é apresentado aos utilizadores o percurso mais rápido, a duração, a hora a que vão partir da estação de origem e chegar à estação de destino e também a tarifa associada a essa viagem (figura2.9).

2.4

Resumo e Conclusões

Nas secções anteriores foram apresentados alguns algoritmos de cálculo de caminho mais curto, bem como algumas técnicas de aceleração dos algoritmos que tiram partido da rede onde estão inseridos. Estes algoritmos de cálculo de caminho mais curto podem ser utilizados para resolver o mesmo problema dentro de uma rede de transportes. Para além disso foram apresentados alguns exemplos que são semelhantes em relação ao que se pretende no final, um algoritmo capaz de calcular rotas em redes de transportes públicos de maneira rápida e eficaz.

Dentro dos algoritmos de cálculo de caminho mais curto começou por ser explicado o algo-ritmo de Dijkstra, o algoalgo-ritmo mais simples para este tipo de cálculo, no entanto é este que serve de base para quase todos os outros. De seguida foi apresentado o algoritmo A*, uma melhoria em relação ao Dijkstra uma vez que tira partido de uma função potencial e consequentemente é capaz de guiar a pesquisa em direção ao objetivo pretendido.

Depois de explicados estes dois algoritmos, foram apresentadas algumas técnicas de acele-ração mais utilizadas hoje em dia. Foi apresentada a pesquisa bidirecional que é o ingrediente mais básico dentro destas técnicas. Foram apresentadas as técnicas ALT e Arc Flags, que é atual-mente uma das técnicas que apresenta os tempos de consulta mais rápidos, em virtude do tempo de pré-processamento muito alto. Foi explicado de que modo as duas técnicas diferem uma da outra; enquanto a ALT tenta guiar a pesquisa em direção a um vértice objetivo a Arc Flags tenta encontrar caminhos que possam ser eliminados durante a pesquisa, reduzindo assim o espaço de pesquisa

(41)

Estado da Arte

Figura 2.9: Apresentação do resultado do cálculo de caminho mais curto no website do Metro do Porto

(42)

Estado da Arte

posteriormente. De seguida foi apresentada uma extensão da técnica Arc Flags, a Arc Flags de múltiplos níveis, onde um segundo nível de Arc Flags são calculadas para todas as células. Foi explicado como se pode proceder ao cálculo das Arc Flags nos diferentes níveis. Finalmente, foi apresentada uma das técnicas mais populares entre técnicas de aceleração, a contração, bem como as duas fases, a fase de contração de vértices e a fase de contração de arestas. Infelizmente é difícil aplicar a maioria destas técnicas aos transportes públicos.

Na contração, a técnica mais popular de entre as técnicas de aceleração, é difícil aplicar a técnica uma vez que é nas redes de transporte público não existe uma hierarquia definida. Já nas redes de transporte rodoviário essa hierarquia está presente por exemplo quando se tenta explorar os vértices que pertencem a uma autoestrada em vez de uma estrada nacional.

Finalmente, foi apresentado um algoritmo construído exclusivamente para cálculo de rotas em redes de transporte público, o RAPTOR. É um algoritmo que toma uma perspetiva diferente dos apresentados anteriormente uma vez que não trabalho em grafos, mas antes diretamente em informação dos horários.

(43)

Capítulo 3

Modelação do Problema

Encontrar o caminho mais rápido entre dois pontos é um problema familiar para quem está habituado a utilizar os transportes públicos de uma cidade. Com a presença cada vez mais notável das tecnologias móveis no quotidiano da população surgem novas formas de apoiar os utentes dos transportes públicos durante as suas deslocações. O problema do cálculo do caminho mais curto entre dois pontos é um problema amplamente estudado, com vários algoritmos e técnicas de aceleração a surgirem nos últimos tempos, capazes de calcularem os caminhos mais curto numa rede intercontinental numa questão de milissegundos. No entanto, nenhuma destas técnicas de aceleração é capaz de gerar os mesmos ganhos quando testadas numa rede de transportes públicos. Tradicionalmente, este problema é resolvido recorrendo a variantes do algoritmo de Dijkstra, utilizando um modelo de um grafo devidamente adaptado para o efeito. Recentemente, novos algoritmos foram introduzidos, capazes de trabalharem diretamente sobre os horários, de uma maneira dinâmica. Assim, é agora possível eliminar a dependência dos grafos. Além disso, e como às redes de transportes públicos está associado um carácter dinâmico, é possível ter em conta os cancelamentos de viagens ou alteração de horários de última hora.

No âmbito desta tese de mestrado foi aplicado a uma rede de transportes públicos complexa um algoritmo capaz de responder rapidamente a pedidos feitos pelos utentes da rede. Esta rede é constituída por um número arbitrário de operadores. A cada operador está associado um conjunto de linhas e cada linha é constituída por um conjunto de paragens. Entre as paragens também são consideradas ligações a pé, independentes dos operadores. Desta rede também fazem parte pon-tos de interesse. Entre os ponpon-tos de interesse e as paragens podem existir ligações a pé. Quando um utilizador faz um pedido de cálculo de rotas entre dois pontos é devolvido um conjunto de itinerários sugeridos. Cada itinerário contém as paragens onde um utente deve embarcar e desem-barcar, a que horas deve embarcar e a que horas irá desembarcar de um veículo, bem como as linhas que deve seguir até atingir o destino pretendido. Durante o itinerário podem existir pontos de transbordo, que devem ser devidamente indicados ao utente.

(44)

Modelação do Problema

rotas do sistema IMS. É de salientar que neste módulo já se encontra implementado um algoritmo baseado no algoritmo de Dijkstra e em algumas técnicas de aceleração. O algoritmo atual apre-senta tempos de respostas que rondam os 30 segundos, e que por vezes podem mesmo atingir 1 minuto. Desse modo, e para responder a uma necessidade crescente dos utentes, foi aplicado o al-goritmo RAPTOR à rede de transportes, tendo sempre em conta o objetivo principal da dissertação que passa pela sofisticação do módulo PADA do sistema IMS.

3.1

Introdução

Hoje em dia as aplicações para o cálculo de rotas têm-se tornado cada vez mais populares entre aqueles que viajam frequentemente de transportes públicos. Estas aplicações de planeamento de rotas têm vindo a substituir o tradicional método de consulta de horários e linhas pela internet, garantindo assim que o utente tem acesso ao caminho ótimo até ao destino pretendido e eliminando eventuais erros de observação que possam acontecer. Ao utilizar um meio digital passa a ser possível apresentar aos utentes da rede de transportes públicos resultados em tempo real, sendo assim possível eliminar eventuais erros de observação por parte dos utentes. Assim, neste capítulo será apresentado um algoritmo capaz de auxiliar os utentes na rede de transportes públicos do Porto. É de realçar que o problema do cálculo de rotas em redes rodoviárias não é exatamente igual ao problema de cálculo de rotas mais rápidas numa rede de transportes públicos.

Uma rede de transportes públicos difere muito de uma rede de transportes rodoviários uma vez que na primeira devem ter sido em contas restrições que não se aplicam nas redes de transporte rodoviários. Numa rede de transportes públicos deve ser considerado que um veículo apenas percorre rotas pré-definidas em horas devidamente marcadas, ao contrário de uma rede rodoviária onde um condutor tem a liberdade de escolher o percurso e a hora em que pretende iniciar uma viagem. Além disso, há que ter em conta que numa rede de transportes públicos o caminho mais curto nem sempre é o ideal já que essa rota pode envolver diversos transbordos ou longas distâncias a caminhar entre diferentes pontos de transbordo.

A um transbordo está geralmente associado um tempo de espera pelo veículo que fará a pró-xima ligação. Quando se apresenta resultados ao utente este critério deve ter sido sempre em conta. Uma vez que os utentes geralmente procuram o percurso mais rápido e com menos transbordos, é importante, sempre que possível, apresentar alternativas com menos transbordos, mesmo que o tempo total da viagem seja superior. Finalmente, tem de se considerar que um determinado troço pode ser servido por diversas linhas. É então relevante desenhar um algoritmo capaz de selecionar a melhor alternativa mesmo nestas condições. Alguns algoritmos escolhem o primeiro veículo a passar no troço em questão, no entanto essa nem sempre é a melhor opção uma vez que um outro veículo pode chegar mais rápido ao mesmo ponto.

Ao contrário da maioria das soluções existentes, a solução que aqui será apresentada é capaz de devolver os resultados tendo em conta o posicionamento das viaturas em tempo real. A rede de transportes públicos que será considerada é constituída por 29 operadores, todos pertencentes à área metropolitana do Porto. Desta rede também fazem parte 680 pontos de interesse. Sempre que

(45)

Modelação do Problema

um utilizador pretender também deve ser possível calcular o caminho mais curto a partir de um ponto não definido da rede. Esse ponto será identificado pela respetiva latitude e longitude. Esta rede é multimodal uma vez que será servida por múltiplos meios de transporte, como o metro, os autocarros e os comboios.

O algoritmo que será apresentado para além de calcular o caminho mais curto entre dois pon-tos também é capaz de ter em conta critérios que podem ser personalizados por cada utilizador, como o tempo máximo a pé durante uma viagem completa ou o tempo máximo a pé para comple-tar um transbordo. Será também explicado como é que o algoritmo pode ser facilmente adaptado para incluir novas redes de transportes públicos, ou até mesmo como se podem acrescentar crité-rios adicionais a serem definidos por cada utilizador. Como se está a trabalhar sobre uma rede de transportes multimodais é necessário ter em conta as estações onde as redes se encontram. Nes-tas estações devem ser inseridas ligações a pé que correspondem aos pontos de transbordo entre diferentes redes.

3.2

Planeamento de viagens numa rede multimodal

Antes de passar à explicação do algoritmo implementado é necessário entender como é que os dados podem numa rede de transportes. Como já foi referido anteriormente, uma rede de trans-portes públicos é constituída por um conjunto de paragens (representadas pelas estações presentes na rede de transportes), por um conjunto de linhas e por um conjunto de viagens. A diferença principal entre uma viagem e uma linha é que a uma viagem está sempre associado um tempo específico do dia, isto é, numa viagem um veículo percorre as estações de uma linha numa certa hora do dia (Tabela3.1).

Para se modelar uma rede de transportes de uma maneira mais correta as viagens devem ser subdivididas em partes que correspondem às secções em que um veículo não pára. Para cada secção está associada uma origem e um destino e a respetiva hora de partida e hora de chegada. Estas secções geralmente são denominadas de conexões elementares. Logo aqui se pode inferir que uma condição que está associada às redes de transportes públicos é que estas são sempre tempo-dependentes, já que uma viagem só pode ser percorrida em determinadas horas do dia. Dessa maneira, um dos primeiro desafios ao modelar uma rede de transportes públicos prende-se com o desenho correto dos calendários de modo a que seja possível calcular rotas eficientes e ótimas dentro destas redes.

Tipicamente existem duas maneiras principais para se modelar este tipo de redes tendo em conta os horários. São designadas como modelo tempo-dependente e modelo tempo-expandido. De seguida será feita uma breve introdução a cada um destes modelos.

3.2.1 Modelo tempo-expandido

A ideia do modelo tempo-expandido é construir uma rede composta por eventos. Neste mo-delo é criado um vértice para cada evento que faz parte dos horários da rede de transportes. Os eventos são conetados na ordem em que acontecem no tempo. Dessa forma, pode ser admitido que

Referências

Documentos relacionados

Por meio destes jogos, o professor ainda pode diagnosticar melhor suas fragilidades (ou potencialidades). E, ainda, o próprio aluno pode aumentar a sua percepção quanto

Para tal, iremos: a Mapear e descrever as identidades de gênero que emergem entre os estudantes da graduação de Letras Língua Portuguesa, campus I; b Selecionar, entre esses

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

Declaro que fiz a correção linguística de Português da dissertação de Romualdo Portella Neto, intitulada A Percepção dos Gestores sobre a Gestão de Resíduos da Suinocultura:

O gráfico nº11 relativo às agências e à escola representa qual a percentagem que as agências tiveram no envio de alunos para a escola Camino Barcelona e ainda, qual a percentagem de

O modelo conceitual procura mostrar quais são os elementos de informação tratados pelo sistema, para que mais adiante se possa mostrar ainda como essa informação é transformada pelo

As análises serão aplicadas em chapas de aços de alta resistência (22MnB5) de 1 mm de espessura e não esperados são a realização de um mapeamento do processo

Pretendo, a partir de agora, me focar detalhadamente nas Investigações Filosóficas e realizar uma leitura pormenorizada das §§65-88, com o fim de apresentar e