pgr_dijkstraCostMatrix

pgr_dijkstraCostMatrix - Calculates the a cost matrix using pgr_dijktras.

images/boost-inside.jpeg

Boost Graph Inside

Availability

  • Version 3.0.0

    • Official function

  • Version 2.3.0

    • New proposed function

Description

Using Dijkstra algorithm, calculate and return a cost matrix.

Signatures

Summary

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

Using defaults

pgr_dijkstraCostMatrix(edges_sql, start_vid)
RETURNS SET OF (start_vid, end_vid, agg_cost)
Example :

Cost matrix for vertices \(\{1, 2, 3, 4\}\) on a directed graph

SELECT * FROM pgr_dijkstraCostMatrix(
    '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)

Complete Signature

pgr_dijkstraCostMatrix(edges_sql, start_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)
Example :

Symmetric cost matrix for vertices \(\{1, 2, 3, 4\}\) on an undirected graph

SELECT * FROM pgr_dijkstraCostMatrix(
    '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)

Parameters

Parameter

Type

Description

edges_sql

TEXT

Edges SQL query as described above.

start_vids

ARRAY[ANY-INTEGER]

Array of identifiers of the vertices.

directed

BOOLEAN

(optional). When false the graph is considered as Undirected. Default is true which considers the graph as Directed.

Inner query

Column

Type

Default

Description

id

ANY-INTEGER

Identifier of the edge.

source

ANY-INTEGER

Identifier of the first end point vertex of the edge.

target

ANY-INTEGER

Identifier of the second end point vertex of the edge.

cost

ANY-NUMERICAL

Weight of the edge (source, target)

  • When negative: edge (source, target) does not exist, therefore it’s not part of the graph.

reverse_cost

ANY-NUMERICAL

-1

Weight of the edge (target, source) ,

  • When negative: edge (target, source) does not exist, therefore it’s not part of the graph.

Where:

ANY-INTEGER :

SMALLINT, INTEGER, BIGINT

ANY-NUMERICAL :

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Return Columns

Returns SET OF (start_vid, end_vid, agg_cost)

Column

Type

Description

start_vid

BIGINT

Identifier of the starting vertex.

end_vid

BIGINT

Identifier of the ending vertex.

agg_cost

FLOAT

Aggregate cost from start_vid to end_vid .

Additional Examples

Example :

Use with tsp

SELECT * FROM pgr_TSP(
    $$
    SELECT * FROM pgr_dijkstraCostMatrix(
        '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)

See Also

Indices and tables