35
Otimizador de rotas Implementação do algoritmo de custo mínimo de Dijkstra em Python para calcular a distância mínima entre cidades Luiz Augusto de Macêdo Morais [email protected]

Otimizador de Rotas - PythonBrasil[6]

Embed Size (px)

DESCRIPTION

Slides da palestra no PythonBrasil[6] com o tema "Implementação do algoritmo de Dijkstra para calcular da distância mínima entre cidades"

Citation preview

Page 1: Otimizador de Rotas - PythonBrasil[6]

Otimizador de rotasImplementação do algoritmo de custo mínimo de Dijkstra em Python para calcular a distância mínima entre cidades

Luiz Augusto de Macêdo [email protected]

Page 2: Otimizador de Rotas - PythonBrasil[6]

Quem sou eu

✔ 18 anos;

✔ Graduando em Licenciatura em Computação – UEPB;

✔ Monitor da disciplina de Linguagem de Programação I – Python;

✔ Faz parte do grupo de pesquisa “Genética e Evolução de Plantas do Semiárido” e utiliza o Python na pesquisa;

✔ Conheceu a linguagem Python há um ano.

Page 3: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?

● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python

● O otimizador de rotas

● Dúvidas

Page 4: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos● Quem foi Dijkstra?

● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python

● O otimizador de rotas

● Dúvidas

Page 5: Otimizador de Rotas - PythonBrasil[6]

Objetivos

✔ Mostrar quem foi Dijkstra

✔ Explicar o funcionamento do algoritmo de Dijkstra

✔ Exibir um exemplo prático do algoritmo, utilizando a linguagem Python

✔ Explicar qual é a proposta do programa Otimizador de rotas

✔ Expor as futuras funcionalidades do software

Page 6: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python

● O otimizador de rotas

● Dúvidas

Page 7: Otimizador de Rotas - PythonBrasil[6]

Quem foi Dijkstra?

Edsger Wybe Dijkstra (1930 - 2002)

● Matemático e cientista da computação

● Áreas de atuação:

● Algoritmos; ● Linguagens de programação;● Sistemas operacionais, etc.

● Criou o primeiro compilador para a linguagem ALGOL 60

● Foi contrário ao comando GOTO● A Case against the GO TO Statement (1968)

● Criador do algoritmo do caminho mais curto (shortest path)

Page 8: Otimizador de Rotas - PythonBrasil[6]

Quem foi Dijkstra?

Edsger Wybe Dijkstra (1930 - 2002)

Prêmios e titulações:

● Membro da Sociedade Britânica de Computação (1971)

● Prêmio Turing (1972)

● Prêmio AFIPS Harry Goode (1974)

● Prêmio de pioneiro da computação do IEEE (1982)

● Prêmio ACM SIGCSE para contribuições proeminentes à instrução da ciência da computação (1989)

Page 9: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?

● O algoritmo de Dijkstra● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python

● O otimizador de rotas

● Dúvidas

Page 10: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

● Encontra o menor caminho entre dois vértices de um grafo

● Não funciona com arestas de peso negativo. Para isso, usa-se o algoritmo de Bellman-Ford

● Complexidade O(|V|²)

● O(|E| + |V| * log|V|) (heap de Fibonacci)

Características:

Page 11: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

# Inicia-se os valorespara todo v V[G] ∈ dist[v]← ∞ prec[v] ← nulodist[s] ← 0

Q ← V[G] # Conjunto dos vértices abertosS ← ø # Conjunto dos vértices fechados

# Relaxamento das arestasenquanto Q ≠ ø u ← extraia-mín(Q) S ← S {u}∪ para cada v adjacente a u se dist[v] > dist[u] + w(u, v) então dist[v] ← dist[u] + w(u, v) prec[v] ← u

Pseudocódigo:

Page 12: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

∞ ∞

∞ ∞

0

A

B C

D E

10

5

2 3

1

9

7

2

4 6

Vértices A B C D E

Estimativas 0 ∞ ∞ ∞ ∞

Precedentes - - - - -

- Atribui um custo infinito a todas as distâncias,exceto a distância do vértice A, que é 0.

Execução:

Page 13: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

∞ ∞

∞ ∞

0

A

B C

D E

10

5

2 3

1

9

7

2

4 6

Vértices A B C D E

Estimativas 0 ∞ ∞ ∞ ∞

Precedentes A - - - -

- Seleciona A (vértice aberto de menor estimativa);- Fecha A;

Execução:

Page 14: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 ∞

10 ∞

0

A

B C

D E

Vértices A B C D E

Estimativas 0 10 ∞ 5 ∞

Precedentes A A - A -

10

5

2 3

1

9

7

2

4 6

- Seleciona A (vértice aberto de menor estimativa);- Fecha A;- Recalcula as estimativas de B e D.

Execução:

Page 15: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 ∞

10 ∞

0

A

B C

D E

Vértices A B C D E

Estimativas 0 10 ∞ 5 ∞

Precedentes A A - A -

10

5

2 3

1

9

7

2

4 6

- Seleciona D (vértice aberto de menor estimativa);- Fecha D;

Execução:

Page 16: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 7

8 14

0

A

B C

D E

Vértices A B C D E

Estimativas 0 8 14 5 7

Precedentes A D D A D

10

5

2 3

1

9

7

2

4 6

- Seleciona D (vértice aberto de menor estimativa);- Fecha D;- Recalcula as estimativas de B, C e E.

Execução:

Page 17: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 7

8 14

0

A

B C

D E

Vértices A B C D E

Estimativas 0 8 14 5 7

Precedentes A D D A D

10

5

2 3

1

9

7

2

4 6

- Seleciona E (vértice aberto de menor estimativa);- Fecha E;

Execução:

Page 18: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 7

8 13

0

A

B C

D E

Vértices A B C D E

Estimativas 0 8 13 5 7

Precedentes A D E A D

10

5

2 3

1

9

7

2

4 6

- Seleciona E (vértice aberto de menor estimativa);- Fecha E;- Recalcula a estimativa de C.

Execução:

Page 19: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 7

8 13

0

A

B C

D E

Vértices A B C D E

Estimativas 0 8 13 5 7

Precedentes A D E A D

10

5

2 3

1

9

7

2

4 6

- Seleciona B (vértice aberto de menor estimativa);- Fecha B;

Execução:

Page 20: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 7

8 9

0

A

B C

D E

Vértices A B C D E

Estimativas 0 8 9 5 7

Precedentes A D B A D

10

5

2 3

1

9

7

2

4 6

- Seleciona B (vértice aberto de menor estimativa);- Fecha B;- Recalcula a estimativa de C.

Execução:

Page 21: Otimizador de Rotas - PythonBrasil[6]

O algoritmo de Dijkstra

5 7

8 9

0

A

B C

D E

Vértices A B C D E

Estimativas 0 8 9 5 7

Precedentes A D B A D

10

5

2 3

1

9

7

2

4 6

- Seleciona C (vértice aberto de menor estimativa);- Fecha C

Execução:

Page 22: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?

● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?● Implementação do algoritmo em Python

● O otimizador de rotas

● Dúvidas

Page 23: Otimizador de Rotas - PythonBrasil[6]

Afinal, pra que serve este algoritmo?

● Linhas de transmissão elétrica

● Conexão de redes

● Panejamento de movimentos de um robô

● Planejamento de rotas e tempo de viagens

Page 24: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?

● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python● O otimizador de rotas

● Dúvidas

Page 25: Otimizador de Rotas - PythonBrasil[6]

Implementação do algoritmo em Python

Page 26: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?

● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python

● O otimizador de rotas● Dúvidas

Page 27: Otimizador de Rotas - PythonBrasil[6]

O otimizador de rotas

● Auxilia em viagens de percursos desconhecidos;

● Calcula a rota mínima entre cidades;● Mostra passo a passo o percurso escolhido;● Informa a distância e o tempo total de viagem;● Não necessita de conexão com a Internet.

Características:

Page 28: Otimizador de Rotas - PythonBrasil[6]

O otimizador de rotas

Screenshots:

Janela principal

Page 29: Otimizador de Rotas - PythonBrasil[6]

O otimizador de rotas

Screenshots:

Resultado simples

Page 30: Otimizador de Rotas - PythonBrasil[6]

O otimizador de rotas

Screenshots:Resultado completo

Page 31: Otimizador de Rotas - PythonBrasil[6]

O otimizador de rotas

● Exibir o mapa da rota escolhida;● Informar a rota mais rápida;● Aumentar o número de cidades e Estados;● Exibir informações sobre pedágios e tipo de

estrada;● Otimizar o algoritmo.

Próximos passos:

Page 32: Otimizador de Rotas - PythonBrasil[6]

Roteiro

● Objetivos

● Quem foi Dijkstra?

● O algoritmo de Dijkstra

● Afinal, pra que serve este algoritmo?

● Implementação do algoritmo em Python

● O otimizador de rotas

● Dúvidas

Page 33: Otimizador de Rotas - PythonBrasil[6]

Dúvidas

Page 34: Otimizador de Rotas - PythonBrasil[6]

Obrigado!

Twitter: @luizaugustomm

E-mail: [email protected]

Site: http://ola-mundo.com

Page 35: Otimizador de Rotas - PythonBrasil[6]

ReferênciasEdsger Dijkstra. Disponível em: <http://pt.wikipedia.org/wiki/Edsger_Dijkstra>. Acesso em: 8 de outubro de 2010.Algoritmo de Dijkstra. Disponível em: <http://pt.wikipedia.org/wiki/Algoritmo_de_Dijkstra>. Acesso em: 8 de outubro de 2010.Algoritmo de Dijkstra para cálculo do Caminho de Custo Mínimo. Disponível em: <http://www.inf.ufsc.br/grafos/temas/custo-minimo/dijkstra.html>. Acesso em: 8 de outubro de 2010.LEMOS, G. Otimização de Rotas Rodoviárias Utilizando o Algoritmo de Dijkstra e a API do Google Maps. 2009. 24f. Universidade Estadual de Londrina. Londrina, Paraná, 2009.MÉNDEZ, Y. S.; GUARDIA, L. E. T. Problema do caminho mais curto: Algoritmo de Dijkstra. Universidade Federal Fluminense. Rio de Janeiro, Rio de Janeiro, 2008.