Sistemas de Informação Geográfica II
Alexandre Gonçalves DECivil - IST alexg@civil.ist.utl.ptAula 3
Modelo vetorial:
análise de redes
1.
Análise de redes: problemas
1. Caminhos de menor custo 2. Árvores
2.
Algoritmos
3.
Avaliação da rede
1. Indicadores topológicos 2. Indicadores métricosEm SIG (ArcGIS):
• caminhos (fig. esq.)
• circuitos (fig. dir.)
• “áreas de serviço”
• matriz OD
• VRP
Algoritmos de análise de redes
tudo variantes do problema de caminho de menor custo
Prob. do caminho de menor custo
Análise de redes
ij n i n j ijX c
1 1 min
n j Pj X 1 1 XjP0 j
n j jC X 1 1 XCj0 j
n k n k ki ik X i PC X 1 1 } , { 0 j i Xij{0,1} , sujeito a:Se resolvido em SIG, qual a info. geográfica necessária?
Topologia de linhas criada, com
atributos não-negativos para o custo
Prob. do caixeiro viajante
Análise de redes
sujeito a:
n i n i j j ij ijX c 1 1, min N i X n i j j ij
1, 1 X j N n j i i ij
1, 1 2 }, ,..., 2 { 1 | | , ,
M n M M X n j i M j i ij 2 0 3 1 9 7 8 4 5 6 10Análise de redes
• Vehicle Routing Problem
– o PRV simples pode ser definido como o problema de desenhar rotas a serem percorridas por veículos de capacidade conhecida de forma a satisfazer a procura de clientes cuja localização é conhecida, partindo cada veículo do depósito e regressando ao mesmo
Transporte de materiais e produtos de longa distância; Entrega de produtos porta a porta;
Entrega de correio; Recolha de resíduos sólidos urbanos;
Geração de rotas de autocarros; Transportes escolares; Vendas ambulantes etc.
Vehicle Routing Problem
Análise de redes
sujeito a:
n i n j m k ijk ij X c 0 0 1 min n j X n i m k ijk 1 1,..., 0 1
n p m k X X n i n j pjk ipk 0 1,..., ; 0,..., 0 0
m k Q X q n i n j k ijk i 1,..., 0 0
m k D X d c n i k n j ijk i ij ) 1,..., ( 0 0
m k X n j jk 1 1,..., 1 0
m k M n M M X n j i M j i ijk | | 1 {1,..., }, 2, 1,..., , ,
m k n j i Xijk{0,1} , 1,..., ; 1,..., ij c custos k Q capacidades k j i Xijk{0,1} , , variáveis de decisãoProb. do caminho de menor custo que minimiza a distância cumulativa dos nós não “visitados”
Análise de redes
B A
Prob. do caminho de menor custo que minimiza a distância cumulativa dos nós não “visitados”
Análise de redes
) ; ( min 1 1 1 1
n i n j ij ij i n i n j ij ijX dtY c Z
n j jP ij ij i C P i Y X 1 } , { 1 j i X Yij ij ,
Q i jQ ij Q Q V Q X 1 , 2restrições do anterior, mais: sujeito a:
Árvore de dispersão mínima
Análise de redes
5 5 4 3 5 2 8 D H B A G E F 5 7 C 4 4 5 4 3 4 3 2 D H B A G E F C 4 4 4 3 ij c j i Xij{0,1} , custos variáveis de decisão 2 BE cDescrição ambígua: o que é que pode ser a rede de menor custo que liga mais do que 2 locais?
circuito
árvore árvore árvore
Análise de redes
Árvore de dispersão mínima no plano
Análise de redes
A B
C árvores de
Árvore de dispersão mínima (de Steiner)
Análise de redes
Vértices a ligar 3 4 5 6 7 P o n tos d e S te iner 0 3 12 60 360 2520 1 1 12 120 1200 12600 2 3 75 1350 22050 3 15 630 17640 4 105 6615 5 945 Total 4 27 270 3645 62370Árvore de dispersão mínima (de Steiner)
Análise de redes
Algoritmos
• Prim (árvore de dispersão mínima)
• Dijkstra (caminho de menor custo)
Algoritmo de Prim
2 3 6 5 1 4 24 24 18 13 11 5 12 17 5 escolher (u,v)A: custo é aí mínimoT = {u,v}
enquanto T e V forem diferentes acrescentar em T o nó v*:
(u*,v*)A, de custo mínimo: u*T e v*T fim ciclo; 2 3 6 5 1 4 24 24 18 13 11 5 12 17 5 escolher (u,v)A: custo é aí mínimo
T = {u,v}
enquanto T e V forem diferentes acrescentar em T o nó v*:
(u*,v*)A, de custo mínimo: u*T e v*T fim ciclo; T = {3,5}, custo total = 5 T = {3,5,4}, custo total = 10 T = {3,5,4,2}, custo total = 23 T = {3,5,4,2,6}, custo total = 35 T = {3,5,4,2,6,1}, custo total = 59 2 3 6 5 1 4 24 13 5 12 5
Algoritmo de Prim
Encontrar o caminho
mais curto (de menor
custo) de modo a ligar
dois locais na rede.
Exemplo: de 1 para 4 2 3 6 5 1 4 24 30 18 13 11 5 12 17 5
Construir duas listas indexadas pelos nós: dist
predecessor
e uma lista de nós que falta visitar
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 para todos os v V, dist(v) = ∞; fim ciclo;
dist(início) = 0; lista = V; predecessor(início) = *indefinido*;
enquantolista ≠
escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A se dist(u) > dist(v) + custo(v,u) então dist(u) = dist(v) + custo(v,u); predecessor(u)=v; fim ciclo; fim ciclo;
Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 para todos os v V, dist(v) = ∞; fim ciclo; dist(início) = 0; lista = V; predecessor(início) = *indefinido*; enquanto lista ≠ escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A se dist(u) > dist(v) + custo(v,u) então dist(u) = dist(v) + custo(v,u); predecessor(u)=v; fim ciclo; fim ciclo; vért. dist pred 1 2 3 4 5 6
Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 vért. dist pred 1 0 *ind* 2 3 4 5 6 para todos os v V, dist(v) = ∞; fim ciclo;dist(início) = 0; lista = V; predecessor(início) = *indefinido*;
enquanto lista ≠
escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A se dist(u) > dist(v) + custo(v,u) então dist(u) = dist(v) + custo(v,u); predecessor(u)=v;
fim ciclo;
fim ciclo; lista = {1,2,3,4,5,6}
Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 vért. dist pred 1 0 *ind* 2 3 4 5 6 para todos os v V, dist(v) = ∞; fim ciclo;dist(início) = 0; lista = V; predecessor(início) = *indefinido*;
enquantolista ≠
escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A se dist(u) > dist(v) + custo(v,u) então dist(u) = dist(v) + custo(v,u); predecessor(u)=v;
fim ciclo;
fim ciclo; listav = 1 = {2,3,4,5,6}
Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 vért. dist pred 1 0 *ind* 2 30 1 3 4 5 6 24 1 para todos os v V, dist(v) = ∞; fim ciclo;dist(início) = 0; lista = V; predecessor(início) = *indefinido*;
enquantolista ≠
escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A sedist(u) > dist(v) + custo(v,u) entãodist(u) = dist(v) + custo(v,u); predecessor(u)=v;
fim ciclo;
fim ciclo; lista = {2,3,4,5,6}
Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 vért. dist pred 1 0 *ind* 2 30 1 3 41 6 4 5 42 6 6 24 1 para todos os v V, dist(v) = ∞; fim ciclo;dist(início) = 0; lista = V; predecessor(início) = *indefinido*;
enquantolista ≠
escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A sedist(u) > dist(v) + custo(v,u) entãodist(u) = dist(v) + custo(v,u); predecessor(u)=v;
fim ciclo;
fim ciclo; lista = {2,3,4,5}
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 vért. dist pred 1 0 *ind* 2 30 1 3 41 6 4 47 5 5 42 6 6 24 1 para todos os v V, dist(v) = ∞; fim ciclo;
dist(início) = 0; lista = V; predecessor(início) = *indefinido*;
enquantolista ≠
escolher v lista: dist é aí mínimo; lista = lista \ {v};
para todos os u lista: (v, u) A sedist(u) > dist(v) + custo(v,u) entãodist(u) = dist(v) + custo(v,u); predecessor(u)=v; fim ciclo; fim ciclo;
Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 Sequência vez=0 lista = {1} pred(1) = *indefinido* custo(1) = 0 vez=1 cand: (1,2)0+30; (1,6)0+24 lista = {1,6} pred(6) = 1; custo(6) = 24 vez=2 cand: (1,2)0+30; (6,2)24+12; (6,3)24+17; (6,5)24+18 lista = {1,2,6} pred(2) = 1; custo(2) = 30 vez=3 cand: (2,3)30+13;(6,3)24+17; (6,5)24+18 lista = {1,2,3,6} pred(3) = 6; custo(3) = 41Algoritmo de Dijkstra
2 3 6 5 1 4 24 30 18 13 11 5 12 17 5 Sequência (cont.) vez=4 cand: (3,4)41+11;(3,5)41+5;(6,5)24+18 lista = {1,2,3,5,6} pred(5) = 6; custo(5) = 42 vez=5 cand: (3,4)41+11;(5,4)42+5 lista = {1,2,3,4,5,6} pred(4) = 5; custo(4) = 47 vért. dist pred 1 0 *ind* 2 30 1 3 41 6 4 47 5 5 42 6 6 24 1Algoritmo de Dijkstra
outros problemas
• árvore de dispersão de alguns vértices
• extensão de uma rede
– como avaliar?
PDH – pruned Dijkstra heuristic
A
Estratégia possível para encontrar a árvore de dispersão de alguns vértices
1. encontrar a árvore de dispersão mínima de um terminal fixo para o resto do grafo;
2. eliminar os ramos da árvore que não ligam a nenhum vértice terminal.
SPH – shortest path heuristic
Outra estratégia
1. iniciar a activação de um terminal e constituir uma árvore apenas com este vértice;
2. determinar o terminal que seja mais próximo de algum vértice da árvore actual pelo algoritmo de Dijkstra;
3. juntar o caminho dado pelo algoritmo à arvore actual; 4. repetir os passos 2 e 3 até a árvore incluir todos os vértices
terminais A
múltiplas árvores de dispersão
T V v\
Indicadores topológicos
Indicadores topológicos baseados na rede (conectividade)
Medida Domínio Expressão Avaliação
Número de ciclos
rede número de ciclos no grafo
Índice a rede número de ciclos em relação
ao número máximo possível de ciclos
Índice b rede número de arestas (troços) em
relação ao número de vértices
Índice g (entre 0 e 1)
rede número de arestas em relação
ao máximo possível S V A 5 2 V S V A V A 6 3V A
A = #arestas V = #vértices S = #subgrafos conexos calcular p/
estas redes
Indicadores métricos
Indicadores métricos baseados em distâncias (acessibilidade)
Medida Domínio Expressão Avaliação
Número de König
nó centralidade de um nó (número
de arestas necessárias para o ligar com o nó que seja mais
distante)
Diâmetro rede distância (custo) entre os dois
nós mais afastados Índice de conectividade nó grau de conectividade de um nó Índice de dispersão ou de Shimbel
rede soma dos graus de
conectividade de todos os nós ij j i d K max ij j i, d max
V j ij i d A 1
V i V j ij i d A 1 1 calcular p/ as redes do slide anteriorexercício: comparar os índices topológicos e métricos do Metro de Lisboa na rede actual e na rede futura