This class implements incremental bidirectional Dijkstra's search for the single-pair shortest path problem. More...
#include <incbi.h>
Classes | |
struct | conn_key |
Public Attributes | |
const Graph & | g |
Vertex | v_start |
Vertex | v_goal |
StartPredecessorMap | start_predecessor |
StartDistanceMap | start_distance |
StartDistanceLookaheadMap | start_distance_lookahead |
GoalSuccessorMap | goal_successor |
GoalDistanceMap | goal_distance |
GoalDistanceLookaheadMap | goal_distance_lookahead |
WeightMap | weight |
VertexIndexMap | vertex_index_map |
EdgeIndexMap | edge_index_map |
CompareFunction | compare |
CombineFunction | combine |
CostInf | inf |
CostZero | zero |
weight_type | goal_margin |
IncBiVisitor | vis |
IncBiBalancer | balancer |
heap_indexed< weight_type > | start_queue |
heap_indexed< weight_type > | goal_queue |
heap_indexed< conn_key > | conn_queue |
This class implements incremental bidirectional Dijkstra's search for the single-pair shortest path problem.
for now, we assume an undirected graph (that is, update_edge will attempt an upate in both directions) we assume that everything is constant (graph structure) rhs = one-step-lookahead (based on d/g) d (DynamicSWSF-FP) = g (LPA*) value = distance map rhs (DynamicSWSF-FP) = rhs (LPA*) = distance_lookahead_map
see "Efficient Point-to-Point Shortest Path Algorithms" by Andrew V. Goldberg et. al for correct bidirection Dijkstra's termination condition
original implemetation from 2015-04
be careful: this class uses the CostInf template argument for decisions about infinities and non-existant paths; if the underlying edge weights use a different value, performace can suffer!
Invariant 1: start_distlook[v] = min_pred(v) { start_dist[u] + w(u,v) }
Invariant 2: iff start_distlook[v] != start_dist[u], then inconsistent (also conn queue stuff)