pgr_bdDijkstraCostMatrix

pgr_bdDijkstraCostMatrix - Calcula la matriz de costes utilizando pgr_bdDijkstra.

_images/boost-inside.jpeg

Adentro: Boost Graph

Disponibilidad:

  • Versión 3.0.0

    • Función oficial

  • Versión 2.5.0

    • Nueva función propuesta

Descripción

Las características principales son:

  • El proceso se realiza sólo en las aristas con costos positivos.

  • Valores son regresados cuando hay un camino.

  • Cuando el vértice inicial y el vértice final son iguales, no hay camino.

    • El agg_cost de los valores no incluídos (v, v) es 0

  • Cuando el vértice inicial y el vértice final son diferentes y no hay camino:

    • El “agg_cost” de los valores no incluídos “(u, v)” es :math: infty

  • Tiempo de ejecución (peor de los casos): \(O((V \log V + E))\)

  • Para grandes gráficos donde hay un camino entre el vértice inicial y el vértice final:

    • Se espera que termine más rápido que pgr_dijkstra

  • Devuelve una matriz de costes.

Firmas

Resumen

pgr_bdDijkstraCostMatrix(edges_sql, start_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)

Uso de valores predeterminados

pgr_bdDijkstraCostMatrix(edges_sql, start_vid)
RETURNS SET OF (start_vid, end_vid, agg_cost)
Ejemplo

Costo de la matriz para los vértices \(\{1, 2, 3, 4\}\) en un grafo no directed

SELECT * FROM pgr_bdDijkstraCostMatrix(
    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
    (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5)
);
 start_vid | end_vid | agg_cost
-----------+---------+----------
         1 |       2 |        1
         1 |       3 |        6
         1 |       4 |        5
         2 |       1 |        1
         2 |       3 |        5
         2 |       4 |        4
         3 |       1 |        2
         3 |       2 |        1
         3 |       4 |        3
         4 |       1 |        3
         4 |       2 |        2
         4 |       3 |        1
(12 rows)

Firma completa

pgr_bdDijkstraCostMatrix(edges_sql, start_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
Ejemplo

Matriz de costos simétrica para vértices \(\{1, 2, 3, 4\}\) en un grafo no dirigido

SELECT * FROM pgr_bdDijkstraCostMatrix(
    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
    (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
    false
);
 start_vid | end_vid | agg_cost
-----------+---------+----------
         1 |       2 |        1
         1 |       3 |        2
         1 |       4 |        3
         2 |       1 |        1
         2 |       3 |        1
         2 |       4 |        2
         3 |       1 |        2
         3 |       2 |        1
         3 |       4 |        1
         4 |       1 |        3
         4 |       2 |        2
         4 |       3 |        1
(12 rows)

Parámetros

Parámetro

Tipo

Descripción

edges_sql

TEXT

Consulta de aristas SQL como se describió anteriormente.

start_vids

ARRAY[ANY-INTEGER]

Arreglo de identificadores de los vértices.

dirigido

BOOLEAN

(opcional). En caso de false el grafo se considera como No Dirigido. El valor predeterminado es true que considera el grafo como Dirigido.

Consulta interna

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)

  • Cuando es negativo: la arista (source, target) no existe, por lo tanto no es parte del grafo.

reverse_cost

ANY-NUMERICAL

-1

Peso de la arista (target, source),

  • En caso negativo: la arista (target, source) no existe, por lo tanto no es parte del grafo.

Donde:

ANY-INTEGER

SMALLINT, INTEGER, BIGINT

ANY-NUMERICAL

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Columnas de Resultados

Devuelve SET OF (start_vid, end_vid, agg_cost)

Columna

Tipo

Descripción

start_vid

BIGINT

Identificador del vértice inicial.

end_vid

BIGINT

Identificador del vértice final.

agg_cost

FLOAT

Coste agregado de start_vid a end_vid.

Ejemplos Adicionales

Ejemplo

Usar con tsp

SELECT * FROM pgr_TSP(
    $$
    SELECT * FROM pgr_bdDijkstraCostMatrix(
        'SELECT id, source, target, cost, reverse_cost FROM edge_table',
        (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
        false
    )
    $$,
    randomize := false
);
 seq | node | cost | agg_cost
-----+------+------+----------
   1 |    1 |    0 |        0
   2 |    2 |    1 |        1
   3 |    3 |    1 |        2
   4 |    4 |    1 |        3
   5 |    1 |    3 |        6
(5 rows)

Ver también

Índices y tablas