pgr_aStarCost¶
pgr_aStarCost
 Total cost of the shortest path(s) using the A* algorithm.
Availability
Version 3.2.0
New proposed signature:
pgr_aStarCost
(Combinations)
Version 3.0.0
Official function
Version 2.4.0
New proposed function
Description¶
The pgr_aStarCost
function sumarizes of the cost of the shortest path(s)
using the A* algorithm.
The main characteristics are:
Process works for directed and undirected graphs.
Ordering is:
first by
start_vid
(if exists)then by
end_vid
Values are returned when there is a path.
Let \(v\) and \(u\) be nodes on the graph:
If there is no path from \(v\) to \(u\):
no corresponding row is returned
agg_cost
from \(v\) to \(u\) is \(\infty\)
There is no path when \(v = u\) therefore
no corresponding row is returned
agg_cost
from v to u is \(0\)
When \((x,y)\) coordinates for the same vertex identifier differ:
A random selection of the vertex’s \((x,y)\) coordinates is used.
Running time: \(O((E + V) * \log V)\)
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)
For undirected graphs, the results are symmetric.
The agg_cost of (u, v) is the same as for (v, u).
The returned values are ordered in ascending order:
start_vid ascending
end_vid ascending
Signatures¶
Summary
[directed, heuristic, factor, epsilon]
(start_vid, end_vid, agg_cost)
One to One¶
[directed, heuristic, factor, epsilon]
(start_vid, end_vid, agg_cost)
 Example:
From vertex \(6\) to vertex \(12\) on a directed graph with heuristic \(2\)
SELECT * FROM pgr_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
FROM edges',
6, 12,
directed => true, heuristic => 2);
start_vid  end_vid  agg_cost
++
6  12  3
(1 row)
One to Many¶
[directed, heuristic, factor, epsilon]
(start_vid, end_vid, agg_cost)
 Example:
From vertex \(6\) to vertices \(\{10, 12\}\) on a directed graph with heuristic \(3\) and factor \(3.5\)
SELECT * FROM pgr_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
FROM edges',
6, ARRAY[10, 12],
heuristic => 3, factor => 3.5);
start_vid  end_vid  agg_cost
++
6  10  5
6  12  3
(2 rows)
Many to One¶
[directed, heuristic, factor, epsilon]
(start_vid, end_vid, agg_cost)
 Example:
From vertices \(\{6, 8\}\) to vertex \(10\) on an undirected graph with heuristic \(4\)
SELECT * FROM pgr_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
FROM edges',
ARRAY[6, 8], 10,
false, heuristic => 4);
start_vid  end_vid  agg_cost
++
6  10  1
8  10  3
(2 rows)
Many to Many¶
[directed, heuristic, factor, epsilon]
(start_vid, end_vid, agg_cost)
 Example:
From vertices \(\{6, 8\}\) to vertices \(\{10, 12\}\) on a directed graph with factor \(0.5\)
SELECT * FROM pgr_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
FROM edges',
ARRAY[6, 8], ARRAY[10, 12],
factor => 0.5);
start_vid  end_vid  agg_cost
++
6  10  5
6  12  3
8  10  5
8  12  1
(4 rows)
Combinations¶
[directed, heuristic, factor, epsilon]
(start_vid, end_vid, agg_cost)
 Example:
Using a combinations table on a directed graph with factor \(0.5\).
The combinations table:
SELECT * FROM combinations;
source  target
+
5  6
5  10
6  5
6  15
6  14
(5 rows)
The query:
SELECT * FROM pgr_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
FROM edges',
'SELECT * FROM combinations',
factor => 0.5);
start_vid  end_vid  agg_cost
++
5  6  1
5  10  6
6  5  1
6  15  4
(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 





aStar optional Parameters¶
Parameter 
Type 
Default 
Description 



5 
Heuristic number. Current valid values 0~5.




For units manipulation. \(factor > 0\). 



For less restricted results. \(epsilon >= 1\). 
See heuristics available and factor handling.
Inner Queries¶
Edges SQL¶
Parameter 
Type 
Default 
Description 


ANYINTEGER 
Identifier of the edge. 


ANYINTEGER 
Identifier of the first end point vertex of the edge. 


ANYINTEGER 
Identifier of the second end point vertex of the edge. 


ANYNUMERICAL 
Weight of the edge (



ANYNUMERICAL 
1 
Weight of the edge (


ANYNUMERICAL 
X coordinate of 


ANYNUMERICAL 
Y coordinate of 


ANYNUMERICAL 
X coordinate of 


ANYNUMERICAL 
Y coordinate of 
Where:
 ANYINTEGER:
SMALLINT
,INTEGER
,BIGINT
 ANYNUMERICAL:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
Combinations SQL¶
Parameter 
Type 
Description 


ANYINTEGER 
Identifier of the departure vertex. 

ANYINTEGER 
Identifier of the arrival vertex. 
Where:
 ANYINTEGER:
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_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
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_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
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_aStarCost(
'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2
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