pgr_bdDijkstraCost - pgRouting Manual (3.3)
   
    
     pgr_bdDijkstraCost
    
   
   
    
   
  
  
   
    
     pgr_bdDijkstraCost
    
   
   - Returns the shortest path(s)’s cost using Bidirectional
Dijkstra algorithm.
  
   
   Availability
- 
    
Version 3.2.0
- 
      
New proposed signature:
- 
        
pgr_bdDijkstraCost( Combinations ) 
 - 
        
 
 - 
      
 - 
    
Version 3.0.0
- 
      
Official function
 
 - 
      
 - 
    
Version 2.5.0
- 
      
New proposed function
 
 - 
      
 
Description
    The
    
     
      pgr_bdDijkstraCost
     
    
    function sumarizes of the cost of the shortest path
using the bidirectional Dijkstra Algorithm.
   
- 
     
Process is done only on edges with positive costs.
- 
       
A negative value on a cost column is interpreted as the edge does not exist.
 
 - 
       
 - 
     
Values are returned when there is a path.
 - 
     
When there is no path:
- 
       
When the starting vertex and ending vertex are the same.
- 
         
The aggregate cost of the non included values \((v, v)\) is \(0\)
 
 - 
         
 - 
       
When the starting vertex and ending vertex are the different and there is no path:
- 
         
The aggregate cost the non included values \((u, v)\) is \(\infty\)
 
 - 
         
 
 - 
       
 - 
     
For optimization purposes, any duplicated value in the starting vertices or on the ending vertices are ignored.
 - 
     
Running time (worse case scenario): \(O((V \log V + E))\)
 - 
     
For large graphs where there is a path bewtween the starting vertex and ending vertex:
- 
       
It is expected to terminate faster than pgr_dijkstra
 
 - 
       
 
- 
     
It does not return a path.
 - 
     
Returns the sum of the costs of the shortest path of each pair combination of nodes requested.
 - 
     
Let be the case the values returned are stored in a table, so the unique index would be the pair:
(start_vid, end_vid). - 
     
Depending on the function and its parameters, the results can be symmetric.
- 
       
The aggregate cost of \((u, v)\) is the same as for \((v, u)\) .
 
 - 
       
 - 
     
Any duplicated value in the start or end vertex identifiers are ignored.
 - 
     
The returned values are ordered:
- 
       
start_vidascending - 
       
end_vidascending 
 - 
       
 
Signatures
Summary
       
        directed
       
      
      ])
     
       
        directed
       
      
      ])
     
       
        directed
       
      
      ])
     
       
        directed
       
      
      ])
     
       
        (start_vid,
       
       
        end_vid,
       
       
        agg_cost)
       
      
     One to One
        
         directed
        
       
       ])
      
        
         (start_vid,
        
        
         end_vid,
        
        
         agg_cost)
        
       
      - Example :
 - 
      
From vertex \(6\) to vertex \(10\) on a directed graph
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  6, 10, true);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         6       10         5
(1 row)
     One to Many
        
         directed
        
       
       ])
      
        
         (start_vid,
        
        
         end_vid,
        
        
         agg_cost)
        
       
      - Example :
 - 
      
From vertex \(6\) to vertices \(\{10, 17\}\) on a directed graph
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  6, ARRAY[10, 17]);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         6       10         5
         6       17         4
(2 rows)
     Many to One
        
         directed
        
       
       ])
      
        
         (start_vid,
        
        
         end_vid,
        
        
         agg_cost)
        
       
      - Example :
 - 
      
From vertices \(\{6, 1\}\) to vertex \(17\) on a directed graph
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  ARRAY[6, 1], 17);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         1       17         5
         6       17         4
(2 rows)
     Many to Many
        
         directed
        
       
       ])
      
        
         (start_vid,
        
        
         end_vid,
        
        
         agg_cost)
        
       
      - Example :
 - 
      
From vertices \(\{6, 1\}\) to vertices \(\{10, 17\}\) on an undirected graph
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  ARRAY[6, 1], ARRAY[10, 17],
  directed => false);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         1       10         4
         1       17         5
         6       10         1
         6       17         4
(4 rows)
     Combinations
        
         (start_vid,
        
        
         end_vid,
        
        
         agg_cost)
        
       
      - Example :
 - 
      
Using a combinations table on an undirected graph
 
The combinations table:
SELECT source, target FROM combinations;
 source  target
--------+--------
      5       6
      5      10
      6       5
      6      15
      6      14
(5 rows)
     The query:
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  'SELECT source, target FROM combinations',
  false);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         5        6         1
         5       10         2
         6        5         1
         6       15         2
(4 rows)
     Parameters
| 
        Column  | 
      
        Type  | 
      
        Description  | 
     
|---|---|---|
| 
        
          | 
      
        Edges SQL as described below  | 
     |
| 
        
          | 
      
        Combinations SQL as described below  | 
     |
| 
        start vid  | 
      
        
          | 
      
        Identifier of the starting vertex of the path.  | 
     
| 
        start vids  | 
      
        
          | 
      
        Array of identifiers of starting vertices.  | 
     
| 
        end vid  | 
      
        
          | 
      
        Identifier of the ending vertex of the path.  | 
     
| 
        end vids  | 
      
        
          | 
      
        Array of identifiers of ending vertices.  | 
     
Optional parameters
| 
         Column  | 
       
         Type  | 
       
         Default  | 
       
         Description  | 
      
|---|---|---|---|
| 
         
           | 
       
         
           | 
       
         
           | 
       
        
  | 
      
Inner Queries
Edges SQL
| 
         Column  | 
       
         Type  | 
       
         Default  | 
       
         Description  | 
      
|---|---|---|---|
| 
         
           | 
       
         ANY-INTEGER  | 
       
         Identifier of the edge.  | 
      |
| 
         
           | 
       
         ANY-INTEGER  | 
       
         Identifier of the first end point vertex of the edge.  | 
      |
| 
         
           | 
       
         ANY-INTEGER  | 
       
         Identifier of the second end point vertex of the edge.  | 
      |
| 
         
           | 
       
         ANY-NUMERICAL  | 
       
         
         Weight of the edge (
           | 
      |
| 
         
           | 
       
         ANY-NUMERICAL  | 
       
         -1  | 
       
         
         Weight of the edge (
          
  | 
      
Where:
- ANY-INTEGER :
 - 
      
SMALLINT,INTEGER,BIGINT - ANY-NUMERICAL :
 - 
      
SMALLINT,INTEGER,BIGINT,REAL,FLOAT 
Combinations SQL
| 
         Parameter  | 
       
         Type  | 
       
         Description  | 
      
|---|---|---|
| 
         
           | 
       
         ANY-INTEGER  | 
       
         Identifier of the departure vertex.  | 
      
| 
         
           | 
       
         ANY-INTEGER  | 
       
         Identifier of the arrival vertex.  | 
      
Where:
- ANY-INTEGER :
 - 
      
SMALLINT,INTEGER,BIGINT 
Result Columns
    Set of
    
     
      (start_vid,
     
     
      end_vid,
     
     
      agg_cost)
     
    
   
| 
        Column  | 
      
        Type  | 
      
        Description  | 
     
|---|---|---|
| 
        
          | 
      
        
          | 
      
        Identifier of the starting vertex.  | 
     
| 
        
          | 
      
        
          | 
      
        Identifier of the ending vertex.  | 
     
| 
        
          | 
      
        
          | 
      
        
        Aggregate cost from
          | 
     
Additional Examples
- Example 1 :
 - 
     
Demonstration of repeated values are ignored, and result is sorted.
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  ARRAY[7, 10, 15, 10, 10, 15], ARRAY[10, 7, 10, 15]);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         7       10         4
         7       15         3
        10        7         2
        10       15         3
        15        7         3
        15       10         1
(6 rows)
    - Example 2 :
 - 
     
Making start vids the same as end vids .
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  ARRAY[7, 10, 15], ARRAY[7, 10, 15]);
 start_vid  end_vid  agg_cost
-----------+---------+----------
         7       10         4
         7       15         3
        10        7         2
        10       15         3
        15        7         3
        15       10         1
(6 rows)
    - Example 3 :
 - 
     
Manually assigned vertex combinations.
 
SELECT * FROM pgr_bdDijkstraCost(
  'SELECT id, source, target, cost, reverse_cost FROM edges',
  'SELECT * FROM (VALUES (6, 10), (6, 7), (12, 10)) AS combinations (source, target)');
 start_vid  end_vid  agg_cost
-----------+---------+----------
         6        7         1
         6       10         5
        12       10         4
(3 rows)
    See Also
Indices and tables