otimizador de rotas - pythonbrasil[6]
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"TRANSCRIPT
![Page 1: Otimizador de Rotas - PythonBrasil[6]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/1.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/2.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/3.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/4.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/5.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/6.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/7.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/8.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/9.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/10.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/11.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/12.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/13.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/14.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/15.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/16.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/17.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/18.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/19.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/20.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/21.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/22.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/23.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/24.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/25.jpg)
Implementação do algoritmo em Python
![Page 26: Otimizador de Rotas - PythonBrasil[6]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/26.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/27.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/28.jpg)
O otimizador de rotas
Screenshots:
Janela principal
![Page 29: Otimizador de Rotas - PythonBrasil[6]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/29.jpg)
O otimizador de rotas
Screenshots:
Resultado simples
![Page 30: Otimizador de Rotas - PythonBrasil[6]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/30.jpg)
O otimizador de rotas
Screenshots:Resultado completo
![Page 31: Otimizador de Rotas - PythonBrasil[6]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/31.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/32.jpg)
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]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/33.jpg)
Dúvidas
![Page 35: Otimizador de Rotas - PythonBrasil[6]](https://reader031.vdocuments.mx/reader031/viewer/2022012318/5599b1a51a28ab64018b4570/html5/thumbnails/35.jpg)
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.