Você está na página 1de 53

PESQUISA OPERACIONAL II

PROBLEMA DO CAMINHO
MÍNIMO: DIJKSTRA

Prof. Dr. Daniel Caetano


2019 - 1
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/t
de-21032006-
135820/publico/Daniel_Caetano_DissertacaoFinal.pd
f - 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
12
5 2 5 12 5 2 5

1 2 10 5 6 1 2 5 6

7 3 4 8 3 4 8
8 8
Comparando Prim x Kruskal
• Complexidade Computacional de Prim
𝐶 = 𝑂(𝑣 2 )

• Complexidade do algoritmo de Kruskal


𝐶 = 𝑂(𝑎. log 𝑣)
• 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)
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 𝑐𝑖𝑗 𝑥𝑖𝑗 Sujeito a: 𝑥𝑖𝑗 − 𝑥𝑗𝑘 = 𝐵 ∀𝑗 ∈ 𝑆


𝑖𝑗∈𝐸 𝑖𝑗∈𝐸 𝑗𝑘∈𝐸

B= -1 para j = O
B= 1 para j = D
B = 0 para os demais nós

𝑥𝑖𝑗 ∈ 0, 1 ∀𝑖𝑗 ∈ 𝐸
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...
12
1 2

• ...criamos arcos em ambas as direções


12

1 2

12
Label Correcting
• Lida com redes com ciclos
• Complexidade no pior caso
𝐶 = 𝑂(𝑎 + 𝑣. log 𝑣)

Antecessor
Label Correcting Distância
Acumulada
• Etiquetas com 3 posições: Necessita
Cálculo?
• 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.
Exemplo Label Correcting

12
5 2 5 12

1 2 3 6

7 3 4 8
8
Label Correcting

12 5
5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
15 6
Label Correcting

0
0 12 5
Sim 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
15 6
Label Correcting

0
0 12 5
Sim 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
15 6
Label Correcting
0
5
0 Sim
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
0
5
0 Sim
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4 3
10 15
O 4 Sim D
4 14
7 8 5 12
3
0 15 3
6
7 22
- Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4 3
10 15
O 4 Sim D
4 14
7 8 5 12
3
0 15 3
6
7 22
- Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 -
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 -
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
EXERCÍCIOS
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)

29 32
2 0 1

31 21
60 51
5 25
6 7

40 51
18
46
3
4
34
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1
0
- - Sim
29 32
2 0 1

31 21
60 51
5 25
- 6 7
- -
40 51
18
46
3
4
- 34
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 1
32 0
- Sim -
29 32
2 0 1

31 21
60 51
5 25 1
- 6 7 21
- Sim
40 51
18
46
3
4
- 34
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 1
32 0
- Sim -
29 32
2 0 1

31 21
60 51
7 25 1
5 6 7
- 46 21
Sim -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
Sim - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
Sim -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
Sim - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
- -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
- -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
- -
40 51
18
46
4 3
101 4
Sim 34 7
67
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
- 46 21
- -
40 51
18
46
4 3
101 4
Sim 34 7
67
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
- 46 21
- -
40 51
18
46
4 3
101 4
- 34 7
67
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1

31 21
60 51
0
92 7 25 1
5 6 7
- 46 21
- -
40 51
18
46
4 3
101 4
- 34 7
67
-
Exercício (para entrega!)
2. Aplique o Algoritmo de Dijkstra (1 a 9)
1
0
Sim
15 15
2 6 7
4 9
2

1 11 10 9
4 2
8 4 2
10
3 5 8
1 12
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?

Você também pode gostar