La definición de problema (Documentación avanzada)
Dada la siguiente consulta:
pgr_dijkstra(sql,startvid,endvid,directed)
Donde sql={(idi,sourcei,targeti,costi,reverse_costi)}
y
- source=⋃sourcei,
- target=⋃targeti,
Los gráficos se definen como sigue:
Grafo dirigido
El gráfico dirigido ponderado, Gd(V,E), se define por:
- Conjunto de vértices V
- V=source∪target∪startvid∪endvid
- El conjunto de aristas E
- E={ {(sourcei,targeti,costi) when cost>=0}if reverse_cost=∅ {(sourcei,targeti,costi) when cost>=0} ∪{(targeti,sourcei,reverse_costi) when reverse_costi>=0}if reverse_cost≠∅
Grafo no dirigido
El grafo ponderado no dirigido Gu(V,E), es definido por:
- Conjunto de vértices V
- V=source∪target∪startvvid∪endvid
- El conjunto de aristas E
- E={ {(sourcei,targeti,costi) when cost>=0} ∪{(targeti,sourcei,costi) when cost>=0} if reverse_cost=∅ {(sourcei,targeti,costi) when cost>=0} ∪{(targeti,sourcei,costi) when cost>=0} ∪{(targeti,sourcei,reverse_costi) when reverse_costi>=0)} ∪{(sourcei,targeti,reverse_costi) when reverse_costi>=0)} if reverse_cost≠∅
El problema
Dado:
- startvid∈V a starting vertex
- endvid∈V un vértice final
- G(V,E)={Gd(V,E) if6 directed=trueGu(V,E) if5 directed=false
Entonces:
- \boldsymbol{\pi} = \{(path\_seq_i, node_i, edge_i, cost_i, agg\_cost_i)\}
- Donde:
- path\_seq_i = i
- path\_seq_{| \pi |} = | \pi |
- node_i \in V
- node_1 = start_{vid}
- node_{| \pi |} = end_{vid}
- \forall i \neq | \pi |, \quad (node_i, node_{i+1}, cost_i) \in E
- edge_i = \begin{cases} id_{(node_i, node_{i+1},cost_i)} &\quad \text{when } i \neq | \pi | \\ -1 &\quad \text{when } i = | \pi | \\ \end{cases}
- cost_i = cost_{(node_i, node_{i+1})}
- agg\_cost_i = \begin{cases} 0 &\quad \text{when } i = 1 \\ \displaystyle\sum_{k=1}^{i} cost_{(node_{k-1}, node_k)} &\quad \text{when } i \neq 1 \\ \end{cases}
- En otras palabras: El algoritmo devuelve una ruta más corta entre start_{vid} y end_{vid}, si es que existe, en términos de una secuencia de nodos y de aristas,
- path\_seq indica la posición relativa en el camino de node o edge.
- cost es el coste del borde que se utilizará para ir al siguiente nodo.
- agg\_cost es el costo desde el start_{vid} hasta el nodo.
Si no hay ruta, el conjunto resultante estará vacío.