pgr_dijkstraCost
Usando el algoritmo Dijkstra implementado por Boost.Graph, extraiga solo el costo agregado de la(s) ruta(s) más corta(s) encontrada(s), para la combinación de vértices dada.
Disponibilidad
El algoritmo pgr_dijkstraCost
es una buena opción para calcular la suma de los costos de la ruta más corta para un subconjunto de pares de nodos del grafo. Hacemos uso de la implementación de dijkstra del Boost cuyo tiempo de ejecución es \(O(V \log V + E)\)
Resumen
pgr_dijkstraCost(edges_sql, from_vid, to_vid [, directed])
pgr_dijkstraCost(edges_sql, from_vid, to_vids [, directed])
pgr_dijkstraCost(edges_sql, from_vids, to_vid [, directed])
pgr_dijkstraCost(edges_sql, from_vids, to_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Uso de valores predeterminados
pgr_dijkstraCost(edges_sql, from_vid, to_vid)
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Ejemplo: | Del vértice \(2\) al vértice \(3\) en un grafo dirigido |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
2, 3);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
(1 row)
pgr_dijkstraCost(edges_sql, from_vid, to_vid [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Ejemplo: | Del vértice \(2\) al vértice \(3\) en un grafo no dirigido |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
2, 3, false);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 1
(1 row)
pgr_dijkstraCost(edges_sql, from_vid, to_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Ejemplo: | Del vértice \(2\) a los vértices \(\{3, 11\}\) en un grafo dirigido |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
2, ARRAY[3, 11]);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
2 | 11 | 3
(2 rows)
pgr_dijkstraCost(edges_sql, from_vids, to_vid [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Ejemplo: | De los vértices \(\{2, 7\}\) al vértice \(3\) en un grafo dirigido |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
ARRAY[2, 7], 3);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
7 | 3 | 6
(2 rows)
pgr_dijkstraCost(edges_sql, from_vids, to_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
OR EMPTY SET
Ejemplo: | De los vértices \(\{2, 7\}\) a los vértices \(\{3, 11\}\) en un grafo dirigido |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
ARRAY[2, 7], ARRAY[3, 11]);
start_vid | end_vid | agg_cost
-----------+---------+----------
2 | 3 | 5
2 | 11 | 3
7 | 3 | 6
7 | 11 | 4
(4 rows)
Parámetro | Tipo | Valores predeterminados | Descripción |
---|---|---|---|
edges_sql | TEXT |
Consulta SQL interna como se describe a continuación. | |
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. | |
dirigido | BOOLEAN |
true |
|
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. | |
cost | 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 SET OF (start_vid, end_vid, agg_cost)
Columna | Tipo | Descripción |
---|---|---|
start_vid | BIGINT |
Identificador del vértice inicial. Se utiliza cuando hay varias vetrices iniciales en la consulta. |
end_vid | BIGINT |
Identificador del vértice final. Se utiliza cuando hay varios vértices finales en la consulta. |
agg_cost | FLOAT |
Coste agregado de start_vid a end_vid . |
Ejemplo 1: | La demostración de valores repetidos se omite y el resultado se ordena. |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
ARRAY[5, 3, 4, 3, 3, 4], ARRAY[3, 5, 3, 4]);
start_vid | end_vid | agg_cost
-----------+---------+----------
3 | 4 | 3
3 | 5 | 2
4 | 3 | 1
4 | 5 | 3
5 | 3 | 4
5 | 4 | 3
(6 rows)
Ejemplo 2: | Haciendo start_vids igual que end_vids |
---|
SELECT * FROM pgr_dijkstraCost(
'select id, source, target, cost, reverse_cost from edge_table',
ARRAY[5, 3, 4], ARRAY[5, 3, 4]);
start_vid | end_vid | agg_cost
-----------+---------+----------
3 | 4 | 3
3 | 5 | 2
4 | 3 | 1
4 | 5 | 3
5 | 3 | 4
5 | 4 | 3
(6 rows)
Índices y tablas