pgr_dijkstraCostMatrix

pgr_dijkstraCostMatrix - Calcula la matriz de costes utilizando pgr_dijkstra.

_images/boost-inside.jpeg

Adentro: Boost Graph

Disponibilidad

  • Versión 3.0.0

    • Función oficial

  • Versión 2.3.0

    • Nueva función propuesta

Descripción

Utilizando el algoritmo Dijkstra, calcula y devuelve una matriz de costes.

Algoritmo de Dijkstra, concebido por el informático holandés Edsger Dijkstra en 1956. Es un algoritmo de búsqueda en grafos que resuelve el problema de ruta más corta para un grafo con costos de aristas no negativos, produciendo la ruta más corta desde un vértice inicial a un vértice final . Esta implementación se puede utilizar con un grafos dirigidos y no dirigidos.

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 ids de veértices.

  • Los valores regresados se ordenan:

    • start_vid ascendente

    • end_vid ascendente

Firmas

Resumen

pgr_dijkstraCostMatrix(Edges SQL, start vids, [directed])

RETURNS SET OF (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_dijkstraCostMatrix(
  '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 Aristas

TEXT

SQL Aristas como se describe a continuación

vid 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

Set of (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 destino.

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_dijkstraCostMatrix(
    '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