pgr_dagShortestPath
— Devuelve las rutas más cortas para los grafos acíclicos dirigidos ponderados (DAG). En particular, el algoritmo de rutas más cortas de DAG implementado por Boost.Graph.
Advertencia
Posible bloqueo del servidor
Advertencia
Funciones experimentales
Disponibilidad
Soporte
Ruta Más Corta para grafos acíclicos dirigidos (DAG) es un algoritmo de búsqueda de grafos que resuelve el problema de ruta más corta para el grafo acíclico dirigido ponderado, produciendo una ruta más corta desde un vértice inicial (start_vid
) a un vértice final (end_vid
).
Esta implementación solo se puede utilizar con un grafo dirigido sin ciclos i.e., es decir, un grafo acíclico dirigido.
El algoritmo se basa en la ordenación topológica del dag para imponer un orden lineal en los vértices, y por lo tanto es más eficaz para DAG que el algoritmo Dijkstra o Bellman-Ford.
Resumen
pgr_dagShortestPath(edges_sql, from_vid, to_vid)
pgr_dagShortestPath(edges_sql, from_vid, to_vids)
pgr_dagShortestPath(edges_sql, from_vids, to_vid)
pgr_dagShortestPath(edges_sql, from_vids, to_vids)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
pgr_dagShortestPath(edges_sql, from_vid, to_vid)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
Ejemplo: | Desde el vértice \(1\) al vértice \(6\) |
---|
SELECT * FROM pgr_dagShortestPath(
'SELECT id, source, target, cost FROM edge_table',
1, 6
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
1 | 1 | 1 | 1 | 1 | 0
2 | 2 | 2 | 4 | 1 | 1
3 | 3 | 5 | 8 | 1 | 2
4 | 4 | 6 | -1 | 0 | 3
(4 rows)
pgr_dagShortestPath(edges_sql, from_vid, to_vids)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
Ejemplo: | Desde el vértice \(1\) a los vértices \(\{ 5, 6\}\) |
---|
SELECT * FROM pgr_dagShortestPath(
'SELECT id, source, target, cost FROM edge_table',
1, ARRAY[5,6]
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
1 | 1 | 1 | 1 | 1 | 0
2 | 2 | 2 | 4 | 1 | 1
3 | 3 | 5 | -1 | 0 | 2
4 | 1 | 1 | 1 | 1 | 0
5 | 2 | 2 | 4 | 1 | 1
6 | 3 | 5 | 8 | 1 | 2
7 | 4 | 6 | -1 | 0 | 3
(7 rows)
pgr_dagShortestPath(edges_sql, from_vids, to_vid)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
Ejemplo: | Desde los vértices \(\{1, 3\}\) al vértice \(6\) |
---|
SELECT * FROM pgr_dagShortestPath(
'SELECT id, source, target, cost FROM edge_table',
ARRAY[1,3], 6
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
1 | 1 | 1 | 1 | 1 | 0
2 | 2 | 2 | 4 | 1 | 1
3 | 3 | 5 | 8 | 1 | 2
4 | 4 | 6 | -1 | 0 | 3
5 | 1 | 3 | 5 | 1 | 0
6 | 2 | 6 | -1 | 0 | 1
(6 rows)
pgr_dagShortestPath(edges_sql, from_vids, to_vids)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
Ejemplo: | Desde los vértices :{1, 4} a los vértices \(\{12, 6\}\) |
---|
SELECT * FROM pgr_dagShortestPath(
'SELECT id, source, target, cost FROM edge_table',
ARRAY[1, 4],ARRAY[12,6]
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
1 | 1 | 1 | 1 | 1 | 0
2 | 2 | 2 | 4 | 1 | 1
3 | 3 | 5 | 8 | 1 | 2
4 | 4 | 6 | -1 | 0 | 3
5 | 1 | 1 | 1 | 1 | 0
6 | 2 | 2 | 4 | 1 | 1
7 | 3 | 5 | 10 | 1 | 2
8 | 4 | 10 | 12 | 1 | 3
9 | 5 | 11 | 13 | 1 | 4
10 | 6 | 12 | -1 | 0 | 5
11 | 1 | 4 | 16 | 1 | 0
12 | 2 | 9 | 15 | 1 | 1
13 | 3 | 12 | -1 | 0 | 2
(13 rows)
Descripción de los parámetros de las firmas (declaraciones de funciones)
Parámetro | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
edges_sql | TEXT |
Consulta SQL como se describió anteriormente. | |
start_vid | BIGINT |
Identificador del vértice inicial de la ruta. | |
start_vids | ARRAY[BIGINT] |
Arreglo de identificadores de vértices iniciales. | |
end_vid | BIGINT |
Identificador del vértice final de la ruta. | |
end_vids | ARRAY[BIGINT] |
Arreglo de identificadores de vértices finales. |
Columna | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
id | ANY-INTEGER |
Identificador de la arista. | |
origen | ANY-INTEGER |
Identificador del primer punto final en el vértice de la arista. | |
objetivo | ANY-INTEGER |
Identificador del segundo punto final en el vértice de la arista. | |
costo | ANY-NUMERICAL |
Peso de la arista (source, target)
|
|
reverse_cost | ANY-NUMERICAL |
-1 | Peso de la arista (target, source),
|
Donde:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|---|
ANY-NUMERICAL: | SMALLINT, INTEGER, BIGINT, REAL, FLOAT |
Devuelve el conjunto de (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
Columna | Tipo | Descripción |
---|---|---|
seq | INT |
Valor secuencial a partir de 1. |
path_seq | INT |
Posición relativa en la ruta. Tiene el valor 1 para el principio de una ruta. |
start_vid | BIGINT |
Identificador del vértice inicial. Se devuelve cuando hay varias vetrices iniciales en la consulta. |
end_vid | BIGINT |
Identificador del vértice final. Se devuelve cuando hay varios vértices finales en la consulta. |
nodo | BIGINT |
Identificador del nodo en la ruta de start_vid a end_vid . |
arista | BIGINT |
Identificador del borde utilizado para ir del nodo al siguiente nodo de la secuencia de ruta. -1 para el último nodo de la ruta. |
costo | FLOAT |
Costo de desplazamiento desde node usando `` edge`` hasta el siguiente nodo en la secuencia de ruta. |
agg_cost | FLOAT |
Coste agregado de start_v to node . |
Índices y tablas