Pesquisa Operacional - Sistema de...
Transcript of Pesquisa Operacional - Sistema de...
Sumário
• Introdução
Histórico
Aplicações de modelos em grafos
• Conceitos e Notação
Representações de um grafo G
Tipos de grafos
• Algoritmos
Algoritmo de Djisktra
Algoritmo de Kruskal
2
Introdução
Histórico
Euler resolveu o problema das pontes de Königsberg do rio Pregel, em
1736 utilizando um modelo de grafos: partir de uma das 4 regiões,
atravessar cada ponte uma única vez e retornar à região de partida.
Figura 1. Rio Pregel e suas sete pontes.
3
Introdução
Figura 2. Modelo de Grafo para o Rio Pregel e suas sete pontes.
Modelo de grafos utilizado por Euler para demonstrar que o
problema não tem solução. Para haver solução é necessário que
cada região tenha um número par de pontes associadas.
6
Introdução
Aplicações de modelos em grafos
1. Grafos planares: problemas de montagens/ trevos
Figura 3. Um problema de montagem.
A, B, C : linhas de montagens/
rodovias principais
D1, D2, D3: departamentos/
rodovias secundárias
Ligações: esteiras/ viadutos ou
túneis
7
Introdução
2. Problemas de localização de indústrias
Existindo 8 cidades consumidoras do produto fabricado
por uma determinada empresa, deseja-se saber onde seria o
melhor local para a instalação de uma filial desta empresa que
atendesse as 8 cidades com menor custos de distribuição do
produto.
Existem algoritmos próprios para este problema, além de
várias heurísticas que possuem bom desempenho.
8
Notação
Representações de um grafo G
1. G(V, A) onde:
V = Conjunto de vértices ou nós do grafo ({1, 2, 3} ou {1, 2, 3, 4})
A = Conjunto de arcos ou arestas do grafo ({a, b, c} ou {a, b, c, d, e, f})
2. Diagramas
9
1
2
3
a
b
c
3
a
b c
d
e f
1
4
Notação
3. Matriz de adjacência (grafo não-orientado)
A = (aij) = A =
4. Matriz de incidência (grafos orientados)
A = [aij] é a matriz (não necessariamente quadrada) de incidência
de G se
i nó ao incidente é não arcoj o se 0,
i nó o para aponta arcoj o se 1,-
i nó no origem tem arcoj o se ,1
ija
10
j nº ao i nº do aresta se ,0
j nº ao i nº do aresta se 1,1
2
3
0 1 1
1 0 1
1 1 0
1 2 3
Conceitos básicos
12
400 Rio de
JaneiroSão Paulo
Belo
Horizonte
700
1500
Brasília
Grafo com as distâncias de São Paulo a 3 capitais:
Conceitos básicos
13
A B
C
D
E
F
G
3
4
2
5
3
2
7
46
5
H
Grafo do tipo PERT/CPM
PERT = Project Evaluation And Review Technique
CPM = Critical Path Method
Algoritmo
19
Otimização em grafos
1. Determinação de árvores mínimas (máximas): Algoritmo de
kruskal
2. Determinação de caminhos mínimos: Algoritmo de Djisktra
3. Determinação de fluxo máximo: Algoritmo de Ford &
Fulkerson
Algoritmo
20
Problema do caminho mínimo: Algoritmo de Djisktra
• Determinação de caminhos mínimos em grafos valorados.
• Princípio de Otimalidade de Bellman:
“Um caminho mínimo é constituído de subcaminhos mínimos”
• Aplica-se a grafos valorados onde não há laços, arcos paralelos e
todos valores associados aos arcos são não-negativos.
• Achar o caminho mínimo entre dois nós (origem = s e destino = t)
de um grafo.
Algoritmo
21
Descrição geral do algoritmo
• Adota a técnica de rotulação dos nós, havendo dois tipos de rótulos: rótulos
temporários e rótulos definitivos
• A cada iteração alguns nós são rotulados temporariamente e apenas um nó é
rotulado definitivamente.
• O valor do rótulo definitivo associado a um dado nó
corresponde ao valor da distância mínima entre o nó origem s e o nó rotulado
definitivamente.
• A execução do algoritmo termina quando se consegue rotular
definitivamente o nó destino t.
Algoritmo de Djisktra
22
1. Inicialização: Rotular definitivamente o nó origem s com valor 0.
Rotular temporariamente os demais nós com valor .
2. Atualização dos rótulos temporários:
Todo nó j ainda não rotulado definitivamente deve receber novo valor de rótulo dado
por
min {valor do rótulo atual do nó j, valor do rótulo do nó i + cij},
Onde, i = último nó rotulado definitivamente
cij = valor da distância entre os nós i e j atravës do arco (i, j).
3. Rotulação definitiva
Comparar os valores dos rótulos temporários e escolher para ser rotulado definitivamente
o nó j associado ao menor valor.
4. Passo geral do algoritmo
Repetir sucessivamente os passos 2 e 3 até se conseguir rotular definitivamente o nó
destino t.
Algoritmo de Djisktra
23
Observações importantes:
1. O valor da distância mínima entre os nós s e t será dada pelo valor do rótulo
definitivo do nó destino t.
2. Procedimento para obtenção dos nós intermediários pertencentes ao caminho
mínimo entre o nó origem s e o nó destino t:
• A partir do nó t achar qual foi o nó i do passo 2 responsável pelo valor de seu
rótulo definitivo.
• Suponha que tenha sido o nó k.
• A partir do nó k repita o processo de busca do nó i do passo 2 responsável pelo
valor do rótulo definitivo do nó k.
• Suponha que tenha sido o nó l.
• A partir do nó l repita o processo de busca do nó i do passo 2 responsável pelo
valor do rótulo definitivo do nó l.
• Repetir este processo até que o nó i seja o nó origem s
• Os nós i encontrados em cada etapa deste processo de busca serão os nós
intermediários do caminho mínimo entre os nós s e t.
Algoritmo
24
Exemplo: Achar a distância mínima entre os nós s e t da rede abaixo.
S
1 3
4 T
7
1
32
4
3
4 7
1 2
10
2
8
2
26
Algoritmo de Djisktra
25
Aplicação do Algoritmo de Djisktra - tabela parcial
Rótulos Explicação
S 1 2 3 4 5 t Vetor com nós do grafo
0* Passo 1 - inicialização
0* 7 1 Passo 2 com i = s
0* 7 1* Passo 3 - rot. def. nó 2
0* 4 1* Passo 2 com i = 2
0* 4 1* Passo 3 - rot. def. nó 5
... ... ... ... ... ... ... ...............................................
0* 4* 1* 12 5* 4* 7* Passo 3 - rot. def. nó t (parar!)
Valor da distância mínima entre os nós s e t = 7 = rótulo definitivo do nó t.
Algoritmo de Djisktra
26
Aplicação do Algoritmo de Djisktra - tabela completa
Rótulos Explicação
S 1 2 3 4 5 t Vetor com nós do grafo0* Passo 1 - inicialização
0* 7 1 Passo 2 com i = s
0* 7 1* Passo 3 - rot. Def. Nó 2
0* 4 1* 5 4 Passo 2 com i = 2
0* 4 1* 5 4* Passo 3 - rot. Def. Nó 5
0* 4 1* 14 5 4* 11 Passo 2 com i = 5
0* 4* 1* 14 5 4* 11 Passo 3 - rot. Def. Nó 1
0* 4* 1* 12 5 4* 11 Passo 2 com i = 1
0* 4* 1* 12 5* 4* 11 Passo 3 - rot. Def. Nó 4
0* 4* 1* 12 5* 4* 7 Passo 2 com i = 4
0* 4* 1* 12 5* 4* 7* Passo 3 - rot. Def. Nó t (parar!)
Resolução completa do exemplo de caminho mínimo
Algoritmo de Djisktra
27
Valor da distância mínima entre os nós s e t = 7 = rótulo definitivo do nó t.
Recuperação do caminho mínimo (ótimo):
Valor do rótulo definitivo do nó t = 7 sendo o nó i responsável = 4
Valor do rótulo definitivo do nó 4 = 5 sendo o nó i responsável = 2
Valor do rótulo definitivo do nó 2 = 1 sendo o nó i responsável = s
T 4 2 S2 4 1
Algoritmo de Kruskal
28
Determinação de uma árvore mínima em um grafo valorado g(v, a):
Algoritmo de Kruskal
Seja um grafo valorado g(v, a) onde para cada aresta (i, j) existe um custo associado cij.
Descrição do algoritmo
Passo 1.
Considerar o grafo trivial formado apenas pelos nós do grafo g(v, a)
Passo 2.
Acrescentar ao grafo trivial a aresta (i, j) associada ao menor valor de custo cij.
Repetir este procedimento respeitando a ordem crescente de valores de cij , desde
que a aresta analisada não forme ciclo com as arestas já incorporadas à árvore.
Após incorporar |v| - 1 arestas ao grafo trivial pelo processo acima descrito parar!
A árvore mínima foi obtida ( |V| = cardinalidade do conjunto de nós v do grafo g(v, a)).
Algoritmo de Kruskal
29
Exemplo de aplicação do algoritmo de Kruskal
Considere o grafo abaixo e determine uma árvore mínima:
8
4
112
1
6
2
5
5
9
3
1
8 10
9 4
A
B C
DF
9
8
Algoritmo de Kruskal
31
Passo 2.
A primeira aresta a ser incorporada será a aresta associada ao valor de
custo = 1. Observe que há duas arestas nestas condições: aresta (a, b) e
aresta (c, d).
Pode-se escolher arbitrariamente qual delas será incorporada primeiro ao
grafo trivial.. A seguir incorpore a outra (observe que elas não formam
ciclo).
A seguir tem-se as arestas (b, e) e (b, f) correspondentes ao custo de
valor 2. Analogamente ao caso anterior pode-se optar por qualquer uma
elas para ser analisada primeiro, e ambas serão incorporadas ao grafo
resultante da operação anterior, pois também não formam ciclo algum.
Algoritmo de Kruskal
33
Como o número de nós é 10 prossegue-se neste processo até que sejam
incorporadas 10 - 1 = 9 arestas, sendo obtida uma árvore mínima,
conforme a figura a seguir.
3
4
2
1 2
5
1
8
4
Observe que esta é uma solução ótima do problema.
Custo mínimo ótimo associado todas as árvore mínimas:
1 + 1 + 2 + 2 + 3 + 4 + 4 + 5 + 8 = 30.