Pesquisa Operacional - Sistema de...

33
Pesquisa Operacional Teoria dos Grafos 1

Transcript of Pesquisa Operacional - Sistema de...

Pesquisa Operacional

Teoria dos Grafos

1

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

Tipos de grafos

1. Não orientado 2. Orientado

11

1

2

3

a

b

c

3

a

b c

d

ef

1

4

2

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

Conceitos básicos

14

Grafos especiais: considere o grafo abaixo

a

b

c

e

f

g

h

j

l

i

Conceitos básicos

15

1. Árvore (arborescência): grafo conexo sem ciclos

a

b

d

h

j

g

Conceitos básicos

16

2. Cadeia: seqüência de arcos com extremidade em comum

a

d

h

j

l

Conceitos básicos

17

3. Caminho: sequência de arcos com mesma orientação

a

c

f

j

Conceitos básicos

18

4. Ciclo: cadeia fechada

a

d

l

i

b g

5. Circuito: caminho fechado

a

b

c

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

30

Passo 1: o grafo trivial será dado pelos nós do grafo

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

32

Procedendo assim tem-se o grafo abaixo:

11

2

2

A

B C

D

E

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.