PESQUISA OPERACIONAL II
Prof. Dr. Daniel Caetano
2019 - 1
PROBLEMA DO CAMINHO MÍNIMO: DIJKSTRA
Objetivos
• Compreender os problemas de caminho mínimo e suas aplicações
• Compreender a modelagem de problemas de caminho mínimo
• Capacitar para aplicação do algoritmo de Dijkstra (Label Correcting)
• Atividade Aula 4 – SAVA!
Material de Estudo
Material Acesso ao Material
Apresentação http://www.caetano.eng.br/ (Pesquisa Operacional II – Aula 4)
Minha Biblioteca Introdução à Pesquisa Operacional (Hillier/Lieberman), Cap. 9, Seção 9.3
Recursos na Web http://www.teses.usp.br/teses/disponiveis/3/3138/tde-21032006-135820/publico/Daniel_Caetano_DissertacaoFinal.pdf - Anexo B
RETOMANDO:
ÁRVORES GERADORAS DE CUSTO MÍNIMO
O que é Árvore Geradora Mínima? • É uma árvore (sub-grafo onde não há ciclos)
• Que preserva todos os nós originais
• Cuja soma dos arcos tem valor mínimo
1
2
3 4
5
6
5
7
12
8
2
12
8
10 5 1
2
3 4
5
6
5
8
2
8
5
Comparando Prim x Kruskal • Complexidade Computacional de Prim
• Complexidade do algoritmo de Kruskal
• Usamos Prim
– Quando o grafo é todo conexo
– Quando a densidade é alta (muitos arcos por nó)
• Usamos Kruskal
– Quando o grafo não é todo conexo
– Quando a densidade é baixa (poucos arcos)
𝐶 = 𝑂(𝑣2)
𝐶 = 𝑂(𝑎. log 𝑣)
PROBLEMAS DE CAMINHO MÍNIMO
Problemas de Caminho Mínimo • Problema de Fluxo em Rede
– Encontrar caminho para deslocamento
• Especificamente...
– Encontrar um caminho de menor “custo”
• O que pode ser o custo?
– “Dinheiro” (custo financeiro)
– Distância
– Tempo
– ...
Problemas de Caminho Mínimo • Exemplos?
– Melhor caminho para uma entrega
• Mais rápido
• Mais barato
– Melhor caminho em uma rede de comunicação
• Mais rápido – menor “lag”
– Identificar áreas de atuação de emergência
• Mais rápido - pontos atendidos dentro de um tempo
O Problema do Motorista de Taxi • Características Consideradas
– Um funcionário de uma empresa de taxi ganha um valor fixo por viagem
• Quanto mais viagens ele fizer, mais ele ganha
– Ele não escolhe as viagens que faz
– Velocidade constante e fixa
– Sem informações sobre o próximo passageiro
– Não tem informações sobre o trânsito
• Como maximizar os ganhos?
– Vejamos um exemplo
Problema do Motorista de Taxi • Objetivo
– Passageiro de O a D pelo caminho mais curto
Problema do Motorista de Taxi • Objetivo
– Passageiro de O a D pelo caminho mais curto
MODELAGEM MATEMÁTICA
Modelagem Matemática • A modelagem é tradicional
min 𝑐𝑖𝑗𝑥𝑖𝑗𝑖𝑗∈𝐸
𝑥𝑖𝑗𝑖𝑗∈𝐸
− 𝑥𝑗𝑘𝑗𝑘∈𝐸
= 𝐵 ∀𝑗 ∈ 𝑆
𝑥𝑖𝑗 ∈ 0, 1 ∀𝑖𝑗 ∈ 𝐸
Sujeito a:
B= -1 para j = O B= 1 para j = D B = 0 para os demais nós
Algoritmos de Caminho Mínimo
• Existem vários
• Genéricos
– Network Simplex
– Out-of-Kilter
• Específicos
– Label Setting
– Dijkstra (Label Correcting)
– Moore etc.
ALGORITMO DE DIJKSTRA
Algoritmo de Dijkstra
• Também conhecido como Label Correcting
• Funciona para redes direcionadas ou não
– Em geral trabalhamos com direções
• Quando o grafo não é direcionado...
• ...criamos arcos em ambas as direções
1 2 12
1 2
12
12
Label Correcting
• Lida com redes com ciclos
• Complexidade no pior caso
𝐶 = 𝑂(𝑎 + 𝑣. log 𝑣)
Label Correcting • Etiquetas com 3 posições: • Lógica:
a) Marcar o nó Origem com antecessor O (ele mesmo), distância 0 e necessidade de cálculo.
b) Escolha o nó com necessidade de cálculo com menor distância acumulada. Esse é o nó atual.
c) Calcule a distância do nó atual para todos os descendentes, preenchendo a etiqueta dos que estão com a etiqueta vazia ou quando o caminho atual for amis curto que o registrado na etiqueta. Cada nó preenchido ou alterado deve ser marcado para cálculo.
d) Marque que o nó atual não precisa mais de cálculo. e) Voltar para b) até que nenhum nó esteja marcado
para cálculo.
Nó Antecessor
Distância Acumulada
Necessita Cálculo?
Exemplo Label Correcting
1
2
3 4
5
6
5
7
12
8
2 3
12
8
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 Sim
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 Sim
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5
Sim
0
7 Sim
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5
Sim
0
7 Sim
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17 Sim
2
7 Sim
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17 Sim
2
7 Sim
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17 Sim
2
15 Sim
3
22 Sim
3 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17 Sim
2
15 Sim
3
22 Sim
3 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17 Sim
2
29 Sim
4
15 -
3
20 Sim
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17 Sim
2
29 Sim
4
15 -
3
20 Sim
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17
-
2
29 Sim
4
15 -
3
20 Sim
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17
-
2
29 Sim
4
15 -
3
20 Sim
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17
-
2
29 Sim
4
15 -
3
20 -
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17
-
2
29 Sim
4
15 -
3
20 -
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17
-
2
29 -
4
15 -
3
20 -
4 7 -
0
Label Correcting
O
2
3
4
5
6
D
5
7
12
10
8
15
4
4 16
12
14
5
0 -
0 5 -
0 17
-
2
29 -
4
15 -
3
20 -
4 7 -
0
EXERCÍCIOS
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
- - 0
Sim
1
-
- -
-
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
- 32 Sim
1 0 -
1
- 21 Sim
1
-
-
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
- 32 Sim
1 0 -
1
- 21 -
1 46 Sim
7
- 67 Sim
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 Sim
0 32
-
1 0 -
1
92 Sim
0
21 -
1 46 Sim
7
- 67 Sim
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 Sim
0 32
-
1 0 -
1
92 Sim
0
21 -
1 46
-
7
- 67 Sim
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 -
0 32
-
1 0 -
1
92 Sim
0
21 -
1 46
-
7
- 67 Sim
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 -
0 32
-
1 0 -
1
92 Sim
0
21 -
1 46
-
7
101
Sim
4
67 -
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 -
0 32
-
1 0 -
1
92 -
0
21 -
1 46
-
7
101
Sim
4
67 -
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 -
0 32
-
1 0 -
1
92 -
0
21 -
1 46
-
7
101
-
4
67 -
7
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 2
3 4
5 6
60
51
32
18 40
51
29
34
46
0
7
31
25
21
61 -
0 32
-
1 0 -
1
92 -
0
21 -
1 46
-
7
101
-
4
67 -
7
Exercício (para entrega!)
2. Aplique o Algoritmo de Dijkstra (1 a 9)
1
2
3
4
5
6
8
4
15
4
11
2
1
10
15 7
8
9
2
12
2
9
10
0 Sim
1
CONCLUSÕES
Resumo
• Caminho Mínimo: Modelagem Matemática
• Algoritmo de Dijkstra: rápido!
• Calcular todos os caminhos para uma origem!
• TAREFA: Exercícios Aula 4
• Outros problemas de fluxo em rede?
– O clássico Problema do Transporte
PERGUNTAS?
Top Related