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

Usando el algoritmo bidireccional de Dijkstra, calcular y regresar una matriz de costos.

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

    • Valor no negativo en una columna de costo se interpreta como la arista no exite.

  • Los valores se devuelven cuando hay una ruta.

  • Cuando no hay ruta:

    • Cuando el vértice de salida y el vértice destino son iguales.

      • El costo agregado de los valores no incluídos \((v, v)\) es \(0\)

    • Cuando el vértice de salida y el vértice destino son diferentes y no hay ninguna ruta:

      • El costo agregado de los valores no incluídos \((u, v)\) es :math: infty

  • Para fines de optimización, se ignora cualquier valor duplicado en los vertices de salida o destino.

  • 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

Las características principales son:

  • Se puede utilizar como entrada para pgr_TSP.

    • Usar directamente cuando la matriz resultante es simétrica y no hay valor \(\infty\).

    • Es responsabilidad dels usuario hacer que la matriz sea simétrica.

      • Mediante el uso de la media geométrica o armónica de los valores no simétricos.

      • Mediante el uso de max o min, los valores no simétricos.

      • Estableciendo el triángulo superior para que sea la imagen reflejada del triángulo inferior.

      • Estableciendo el triángulo inferior para que sea la imagen reflejada del triángulo superior.

    • También es responsabilidad de los usuarios para fijar un valor \(\infty\).

  • Cada función funciona como parte de la familia a la que pertenece.

  • No devuelve una ruta.

  • Devuelve la suma de los costos de la ruta más corta para la combinación de pares de nodos en el grafo.

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

  • Los valores se devuelven cuando hay una ruta.

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

      • El costo agregado 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 ruta.

      • El costo agregado de los valores no incluídos (u, v) es :math: infty.

  • Sea el caso, los valores devueltos se almacenan en una tabla:

    • El índice único es el par: (start_vid, end_vid).

  • Dependiendo de la función y sus parámetros, los resultados pueden ser simétricos.

    • El costo agregado de (u, v) es el mismo que para (v, u).

  • Se omite cualquier valor duplicado en las salidas.

  • Los valores regresados se ordenan:

    • start_vid ascendente

    • end_vid ascendente

Firmas

Resumen

pgr_bdDijkstraCostMatrix(SQL de aristas, salidas, [directed])
Regresa el conjunto de (start_vid, end_vid, agg_cost)
OR EMPTY SET
Ejemplo:

Matriz de costos simétrica para vértices \(\{5, 6, 10, 15\}\) en un grafo no dirigido

SELECT * FROM pgr_bdDijkstraCostMatrix(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  (SELECT array_agg(id)
    FROM vertices
    WHERE id IN (5, 6, 10, 15)),
  false);
 start_vid | end_vid | agg_cost
-----------+---------+----------
         5 |       6 |        1
         5 |      10 |        2
         5 |      15 |        3
         6 |       5 |        1
         6 |      10 |        1
         6 |      15 |        2
        10 |       5 |        2
        10 |       6 |        1
        10 |      15 |        1
        15 |       5 |        3
        15 |       6 |        2
        15 |      10 |        1
(12 rows)

Parámetros

Columna

Tipo

Descripción

SQL de aristas

TEXT

SQL de aristas como se describe a continuación

salidas

ARRAY[BIGINT]

Arreglo de identificadores de vértices iniciales.

Parámetros opcionales

Columna

Tipo

x Defecto

Descripción

directed

BOOLEAN

true

  • Cuando true el gráfo se considera Dirigido

  • Cuando false el gráfo se considera No Dirigido.

Consultas Internas

SQL aristas

Columna

Tipo

x Defecto

Descripción

id

ENTEROS

Identificador de la arista.

source

ENTEROS

Identificador del primer vértice de la arista.

target

ENTEROS

Identificador del segundo vértice de la arista.

cost

FLOTANTES

Peso de la arista (source, target)

reverse_cost

FLOTANTES

-1

Peso de la arista (target, source)

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

Donde:

ENTEROS:

SMALLINT, INTEGER, BIGINT

FLOTANTES:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Columnas de resultados

Conjunto de (start_vid, end_vid, agg_cost)

Columna

Tipo

Descripción

start_vid

BIGINT

Identificador del vértice de salida.

end_vid

BIGINT

Identificador del vértice final.

agg_cost

FLOAT

Costo afregado desde start_vid hasta end_vid.

Ejemplos Adicionales

Ejemplo:

Usar con pgr_TSP.

SELECT * FROM pgr_TSP(
  $$
  SELECT * FROM pgr_bdDijkstraCostMatrix(
    'SELECT id, source, target, cost, reverse_cost FROM edges',
    (SELECT array_agg(id)
      FROM vertices
      WHERE id IN (5, 6, 10, 15)),
    false)
  $$);
NOTICE:  pgr_TSP no longer solving with simulated annaeling
HINT:  Ignoring annaeling parameters
 seq | node | cost | agg_cost
-----+------+------+----------
   1 |    5 |    0 |        0
   2 |    6 |    1 |        1
   3 |   10 |    1 |        2
   4 |   15 |    1 |        3
   5 |    5 |    3 |        6
(5 rows)

Ver también

Índices y tablas