SlideShare uma empresa Scribd logo
1 de 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
luizaugustomm@gmail.com
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.
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
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
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
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
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)
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)
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
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:
O algoritmo de Dijkstra
# Inicia-se os valores
para todo v V[G]∈
dist[v]← ∞
prec[v] ← nulo
dist[s] ← 0
Q ← V[G] # Conjunto dos vértices abertos
S ← ø # Conjunto dos vértices fechados
# Relaxamento das arestas
enquanto 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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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
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
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
Implementação do algoritmo em Python
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
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:
O otimizador de rotas
Screenshots:
Janela principal
O otimizador de rotas
Screenshots:
Resultado simples
O otimizador de rotas
Screenshots:
Resultado completo
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:
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
Dúvidas
Obrigado!
Twitter: @luizaugustomm
E-mail: luizaugustomm@gmail.com
Site: http://ola-mundo.com
Referências
Edsger 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.

Mais conteúdo relacionado

Mais procurados

Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
Regis Magalhães
 
Aula03 exercicio fluxograma casa
Aula03   exercicio fluxograma casaAula03   exercicio fluxograma casa
Aula03 exercicio fluxograma casa
Grupo Tiradentes
 
Prototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta FidelidadePrototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta Fidelidade
Erico Fileno
 
Gestao de projetos_-_exercicio_1._com_gabarito_doc
Gestao de projetos_-_exercicio_1._com_gabarito_docGestao de projetos_-_exercicio_1._com_gabarito_doc
Gestao de projetos_-_exercicio_1._com_gabarito_doc
neyfds
 

Mais procurados (20)

Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Aula03 exercicio fluxograma casa
Aula03   exercicio fluxograma casaAula03   exercicio fluxograma casa
Aula03 exercicio fluxograma casa
 
Prototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta FidelidadePrototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta Fidelidade
 
Apresentação TCC - Sistemas de Informação
Apresentação TCC - Sistemas de Informação Apresentação TCC - Sistemas de Informação
Apresentação TCC - Sistemas de Informação
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Comparativo Método Tradicional e Método Ágil
Comparativo Método Tradicional e Método ÁgilComparativo Método Tradicional e Método Ágil
Comparativo Método Tradicional e Método Ágil
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Classes de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícilClasses de problemas p, np,np completo e np-difícil
Classes de problemas p, np,np completo e np-difícil
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos Básicos
 
Modelos de Engenharia de Software
Modelos de Engenharia de SoftwareModelos de Engenharia de Software
Modelos de Engenharia de Software
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Concorrência na Linguagem de Programação
Concorrência na Linguagem de ProgramaçãoConcorrência na Linguagem de Programação
Concorrência na Linguagem de Programação
 
Gestao de projetos_-_exercicio_1._com_gabarito_doc
Gestao de projetos_-_exercicio_1._com_gabarito_docGestao de projetos_-_exercicio_1._com_gabarito_doc
Gestao de projetos_-_exercicio_1._com_gabarito_doc
 
Seis sigma completo
Seis sigma completoSeis sigma completo
Seis sigma completo
 
Estimativa de software usando pontos de função
Estimativa de software usando pontos de funçãoEstimativa de software usando pontos de função
Estimativa de software usando pontos de função
 
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação
 
Gerenciamento de tempo em projetos
Gerenciamento de tempo em projetosGerenciamento de tempo em projetos
Gerenciamento de tempo em projetos
 
Algoritmos - Procedimentos
Algoritmos - ProcedimentosAlgoritmos - Procedimentos
Algoritmos - Procedimentos
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 

Destaque

Softwares de roteirização softwares roteirizadores e características
Softwares de roteirização   softwares roteirizadores  e característicasSoftwares de roteirização   softwares roteirizadores  e características
Softwares de roteirização softwares roteirizadores e características
jhjhj ooi
 
Logística de armazenagem e distribuicao
Logística de armazenagem e distribuicaoLogística de armazenagem e distribuicao
Logística de armazenagem e distribuicao
Elvis Bruno
 
Conceito e principios do sistema de movimentação de materiais
Conceito e principios do sistema de movimentação de materiaisConceito e principios do sistema de movimentação de materiais
Conceito e principios do sistema de movimentação de materiais
DiegoIsraelSantos
 
Sistemas de Gestão da Cadeia de Suprimentos e Distribuição
Sistemas de Gestão da Cadeia de Suprimentos e DistribuiçãoSistemas de Gestão da Cadeia de Suprimentos e Distribuição
Sistemas de Gestão da Cadeia de Suprimentos e Distribuição
Aline
 

Destaque (18)

Roteirização pura de veículos utilizando algoritmos genéticos
Roteirização pura de veículos utilizando algoritmos genéticosRoteirização pura de veículos utilizando algoritmos genéticos
Roteirização pura de veículos utilizando algoritmos genéticos
 
Expedição FBITS Shop.Org 2014
Expedição FBITS Shop.Org 2014Expedição FBITS Shop.Org 2014
Expedição FBITS Shop.Org 2014
 
Softwares de roteirização softwares roteirizadores e características
Softwares de roteirização   softwares roteirizadores  e característicasSoftwares de roteirização   softwares roteirizadores  e características
Softwares de roteirização softwares roteirizadores e características
 
Equipamentos para manuseio de materiais
Equipamentos  para manuseio de materiaisEquipamentos  para manuseio de materiais
Equipamentos para manuseio de materiais
 
Expedição
ExpediçãoExpedição
Expedição
 
Planos
PlanosPlanos
Planos
 
VRP - Vehicle Routing Problem
VRP - Vehicle Routing ProblemVRP - Vehicle Routing Problem
VRP - Vehicle Routing Problem
 
Distribuicão fisíca aula pronta 1
Distribuicão fisíca aula pronta 1Distribuicão fisíca aula pronta 1
Distribuicão fisíca aula pronta 1
 
Roteirização
RoteirizaçãoRoteirização
Roteirização
 
Manual de procedimentos de protocolo, expedição e arquivo.
Manual de procedimentos de protocolo, expedição e arquivo.Manual de procedimentos de protocolo, expedição e arquivo.
Manual de procedimentos de protocolo, expedição e arquivo.
 
Movimentação de Materiais
Movimentação de MateriaisMovimentação de Materiais
Movimentação de Materiais
 
Distribuição
DistribuiçãoDistribuição
Distribuição
 
Logística de armazenagem e distribuicao
Logística de armazenagem e distribuicaoLogística de armazenagem e distribuicao
Logística de armazenagem e distribuicao
 
Equipamentos de Movimentação de Materiais
Equipamentos de Movimentação de Materiais Equipamentos de Movimentação de Materiais
Equipamentos de Movimentação de Materiais
 
Logística e distribuição
Logística e distribuiçãoLogística e distribuição
Logística e distribuição
 
Movimentacao de Materiais
Movimentacao de MateriaisMovimentacao de Materiais
Movimentacao de Materiais
 
Conceito e principios do sistema de movimentação de materiais
Conceito e principios do sistema de movimentação de materiaisConceito e principios do sistema de movimentação de materiais
Conceito e principios do sistema de movimentação de materiais
 
Sistemas de Gestão da Cadeia de Suprimentos e Distribuição
Sistemas de Gestão da Cadeia de Suprimentos e DistribuiçãoSistemas de Gestão da Cadeia de Suprimentos e Distribuição
Sistemas de Gestão da Cadeia de Suprimentos e Distribuição
 

Semelhante a Otimizador de Rotas - PythonBrasil[6]

Algoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaAlgoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à Robótica
Lucas Oliveira
 
Smart Suspension - TCC v2
Smart Suspension - TCC v2Smart Suspension - TCC v2
Smart Suspension - TCC v2
Bruno Sprícigo
 
Simulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades ComputacionaisSimulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades Computacionais
Igor José F. Freitas
 

Semelhante a Otimizador de Rotas - PythonBrasil[6] (20)

Algoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaAlgoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à Robótica
 
Rachinations
RachinationsRachinations
Rachinations
 
Construcao de Algoritmos - Aula 05
Construcao de Algoritmos - Aula 05Construcao de Algoritmos - Aula 05
Construcao de Algoritmos - Aula 05
 
Fit Metrocamp 2016
Fit Metrocamp 2016Fit Metrocamp 2016
Fit Metrocamp 2016
 
Floyd-Warshall
Floyd-WarshallFloyd-Warshall
Floyd-Warshall
 
[PRJ32][Christopher] Aula 14 – controle
[PRJ32][Christopher] Aula 14 – controle[PRJ32][Christopher] Aula 14 – controle
[PRJ32][Christopher] Aula 14 – controle
 
Project presentation: Low-cost Autonomous Navigation System Based on Optical ...
Project presentation: Low-cost Autonomous Navigation System Based on Optical ...Project presentation: Low-cost Autonomous Navigation System Based on Optical ...
Project presentation: Low-cost Autonomous Navigation System Based on Optical ...
 
Smart Suspension - TCC v2
Smart Suspension - TCC v2Smart Suspension - TCC v2
Smart Suspension - TCC v2
 
Simulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades ComputacionaisSimulador Eletromagnético em um Ambiente de Grades Computacionais
Simulador Eletromagnético em um Ambiente de Grades Computacionais
 
Apresent trab grafos
Apresent trab grafosApresent trab grafos
Apresent trab grafos
 
Desafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleDesafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - Joinville
 
Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...
Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...
Artigo - PROJETO DE UM HARDWARE ACELERADOR DO ALGORITMO DE DISTÂNCIA EUCLIDIA...
 
[PRJ32][Christopher] Aula 4 – arduino,mems,prog v2
[PRJ32][Christopher] Aula 4 – arduino,mems,prog v2[PRJ32][Christopher] Aula 4 – arduino,mems,prog v2
[PRJ32][Christopher] Aula 4 – arduino,mems,prog v2
 
Apresentacao WS Máquinas
Apresentacao WS MáquinasApresentacao WS Máquinas
Apresentacao WS Máquinas
 
Apresentação Workshop Máquinas de Calcular
Apresentação Workshop Máquinas de CalcularApresentação Workshop Máquinas de Calcular
Apresentação Workshop Máquinas de Calcular
 
Tutorial comandosde geogebra
Tutorial comandosde geogebraTutorial comandosde geogebra
Tutorial comandosde geogebra
 
Robocode 101
Robocode 101Robocode 101
Robocode 101
 
Redução de dimensionalidade - Pós Graduação em Big Data
Redução de dimensionalidade - Pós Graduação em Big DataRedução de dimensionalidade - Pós Graduação em Big Data
Redução de dimensionalidade - Pós Graduação em Big Data
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
 
OMR (Optical Mark Recognition) with PHP
OMR (Optical Mark Recognition) with PHPOMR (Optical Mark Recognition) with PHP
OMR (Optical Mark Recognition) with PHP
 

Mais de Luiz Augusto Macêdo Morais

Mais de Luiz Augusto Macêdo Morais (17)

SBIE 2014 - Student's satisfaction with Mastery Learning in an Introductory ...
SBIE 2014 -  Student's satisfaction with Mastery Learning in an Introductory ...SBIE 2014 -  Student's satisfaction with Mastery Learning in an Introductory ...
SBIE 2014 - Student's satisfaction with Mastery Learning in an Introductory ...
 
Minicurso: Python e suas baterias incluídas
Minicurso: Python e suas baterias incluídasMinicurso: Python e suas baterias incluídas
Minicurso: Python e suas baterias incluídas
 
Expressões Regulares: Teoria e Prática
Expressões Regulares: Teoria e PráticaExpressões Regulares: Teoria e Prática
Expressões Regulares: Teoria e Prática
 
Aula 15 - Organizando os dados com listas
Aula 15 - Organizando os dados com listasAula 15 - Organizando os dados com listas
Aula 15 - Organizando os dados com listas
 
Aula 14 - Funções: não duplique seu código
Aula 14 - Funções: não duplique seu códigoAula 14 - Funções: não duplique seu código
Aula 14 - Funções: não duplique seu código
 
Aula 13 - Trabalhando com strings
Aula 13 - Trabalhando com stringsAula 13 - Trabalhando com strings
Aula 13 - Trabalhando com strings
 
Aula 12 - Começando a programar : repetição
Aula 12 - Começando a programar : repetiçãoAula 12 - Começando a programar : repetição
Aula 12 - Começando a programar : repetição
 
Aula 11 - Começando a programar: Condicionais
Aula 11 - Começando a programar: CondicionaisAula 11 - Começando a programar: Condicionais
Aula 11 - Começando a programar: Condicionais
 
Aula 10 - Estruturas de repeticao
Aula 10 - Estruturas de repeticaoAula 10 - Estruturas de repeticao
Aula 10 - Estruturas de repeticao
 
Aula 9 - Estruturas Condicionais
Aula 9 - Estruturas CondicionaisAula 9 - Estruturas Condicionais
Aula 9 - Estruturas Condicionais
 
Aula 8 - Comandos de Entrada e Saída
Aula 8 - Comandos de Entrada e SaídaAula 8 - Comandos de Entrada e Saída
Aula 8 - Comandos de Entrada e Saída
 
Aula 7 - Expressões Aritméticas e Lógicas
Aula 7 - Expressões Aritméticas e LógicasAula 7 - Expressões Aritméticas e Lógicas
Aula 7 - Expressões Aritméticas e Lógicas
 
Aula 5 - Tipos de dados
Aula 5 - Tipos de dadosAula 5 - Tipos de dados
Aula 5 - Tipos de dados
 
Aula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveisAula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveis
 
Aula 4 - Introducão a algoritmos
Aula 4 - Introducão a algoritmosAula 4 - Introducão a algoritmos
Aula 4 - Introducão a algoritmos
 
Aula 2 - Histórico da Computação e OAC
Aula 2 - Histórico da Computação e OACAula 2 - Histórico da Computação e OAC
Aula 2 - Histórico da Computação e OAC
 
Aula 1 - Apresentação
Aula 1 - ApresentaçãoAula 1 - Apresentação
Aula 1 - Apresentação
 

Otimizador de Rotas - PythonBrasil[6]

  • 1. 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 luizaugustomm@gmail.com
  • 2. 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.
  • 3. 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
  • 4. 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
  • 5. 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
  • 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
  • 7. 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)
  • 8. 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)
  • 9. 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
  • 10. 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:
  • 11. O algoritmo de Dijkstra # Inicia-se os valores para todo v V[G]∈ dist[v]← ∞ prec[v] ← nulo dist[s] ← 0 Q ← V[G] # Conjunto dos vértices abertos S ← ø # Conjunto dos vértices fechados # Relaxamento das arestas enquanto 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:
  • 12. 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:
  • 13. 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:
  • 14. 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:
  • 15. 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:
  • 16. 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:
  • 17. 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:
  • 18. 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:
  • 19. 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:
  • 20. 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:
  • 21. 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:
  • 22. 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
  • 23. 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
  • 24. 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
  • 26. 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
  • 27. 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:
  • 28. O otimizador de rotas Screenshots: Janela principal
  • 29. O otimizador de rotas Screenshots: Resultado simples
  • 30. O otimizador de rotas Screenshots: Resultado completo
  • 31. 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:
  • 32. 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
  • 35. Referências Edsger 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.