fixing sentinel nodes in adjacency list graph data structure
This commit is contained in:
@@ -86,6 +86,7 @@ public:
|
||||
const PhantomNodes & phantom_node_pair,
|
||||
RawRouteData & raw_route_data
|
||||
) {
|
||||
SimpleLogger().Write(logDEBUG) << "alt path routing";
|
||||
if( //phantom_node_pair.AtLeastOnePhantomNodeIsUINTMAX() ||
|
||||
phantom_node_pair.PhantomNodesHaveEqualLocation()
|
||||
) {
|
||||
@@ -628,7 +629,7 @@ private:
|
||||
const NodeID node = forward_heap.DeleteMin();
|
||||
const int distance = forward_heap.GetKey(node);
|
||||
const int scaled_distance = (distance-edge_expansion_offset)/(1.+VIAPATH_EPSILON);
|
||||
SimpleLogger().Write(logDEBUG) << "node: " << node << ", distance: " << distance << ", ub: " << *upper_bound_to_shortest_path_distance << ", scaled_distance: " << scaled_distance;
|
||||
// SimpleLogger().Write(logDEBUG) << "node: " << node << ", distance: " << distance << ", ub: " << *upper_bound_to_shortest_path_distance << ", scaled_distance: " << scaled_distance;
|
||||
if(
|
||||
(INVALID_EDGE_WEIGHT != *upper_bound_to_shortest_path_distance) &&
|
||||
(scaled_distance > *upper_bound_to_shortest_path_distance)
|
||||
|
||||
@@ -67,9 +67,10 @@ public:
|
||||
) const {
|
||||
const NodeID node = forward_heap.DeleteMin();
|
||||
const int distance = forward_heap.GetKey(node);
|
||||
// SimpleLogger().Write() << (forward_direction ? "fwd" : "rev") << " settled (" << forward_heap.GetData( node ).parent << "," << node << ")=" << distance;
|
||||
SimpleLogger().Write() << (forward_direction ? "fwd" : "rev") << " settled (" << forward_heap.GetData( node ).parent << "," << node << ")=" << distance;
|
||||
if(reverse_heap.WasInserted(node) ){
|
||||
const int new_distance = reverse_heap.GetKey(node) + distance;
|
||||
SimpleLogger().Write(logDEBUG) << "new_distance: " << new_distance;
|
||||
if(new_distance < *upper_bound ){
|
||||
if( new_distance >= 0 ) {
|
||||
*middle_node_id = node;
|
||||
@@ -79,6 +80,7 @@ public:
|
||||
}
|
||||
|
||||
if( (distance-edge_expansion_offset) > *upper_bound ){
|
||||
SimpleLogger().Write() << "found path";
|
||||
forward_heap.DeleteAll();
|
||||
return;
|
||||
}
|
||||
@@ -99,12 +101,13 @@ public:
|
||||
|
||||
if(forward_heap.WasInserted( to )) {
|
||||
if(forward_heap.GetKey( to ) + edge_weight < distance) {
|
||||
SimpleLogger().Write(logDEBUG) << "stalled";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SimpleLogger().Write(logDEBUG) << "done stalling";
|
||||
for(
|
||||
EdgeID edge = facade->BeginEdges(node), end_edge = facade->EndEdges(node);
|
||||
edge < end_edge;
|
||||
@@ -122,12 +125,14 @@ public:
|
||||
|
||||
//New Node discovered -> Add to Heap + Node Info Storage
|
||||
if ( !forward_heap.WasInserted( to ) ) {
|
||||
SimpleLogger().Write() << "insert (" << node << "," << to << "), distance: " << to_distance << ", edge id: " << edge;
|
||||
forward_heap.Insert( to, to_distance, node );
|
||||
}
|
||||
//Found a shorter Path -> Update distance
|
||||
else if ( to_distance < forward_heap.GetKey( to ) ) {
|
||||
forward_heap.GetData( to ).parent = node;
|
||||
forward_heap.DecreaseKey( to, to_distance );
|
||||
SimpleLogger().Write() << "decrease (" << node << "," << to << "), distance: " << to_distance;
|
||||
//new parent
|
||||
}
|
||||
}
|
||||
@@ -286,8 +291,8 @@ public:
|
||||
if (is_local_path)
|
||||
{
|
||||
SimpleLogger().Write(logDEBUG) << "case3";
|
||||
start_index = phantom_node_pair.startPhantom.fwd_segment_position - 1;
|
||||
end_index = phantom_node_pair.targetPhantom.fwd_segment_position - 1;
|
||||
start_index = phantom_node_pair.startPhantom.fwd_segment_position;
|
||||
end_index = phantom_node_pair.targetPhantom.fwd_segment_position;
|
||||
if (target_traversed_in_reverse)
|
||||
{
|
||||
SimpleLogger().Write(logDEBUG) << "case4";
|
||||
@@ -301,11 +306,15 @@ public:
|
||||
BOOST_ASSERT( start_index >= 0 );
|
||||
// BOOST_ASSERT( start_index <= end_index );
|
||||
for(
|
||||
unsigned i = start_index;
|
||||
int i = start_index;
|
||||
i != end_index;
|
||||
( start_index < end_index ? ++i :--i)
|
||||
) {
|
||||
SimpleLogger().Write(logDEBUG) << "[" << i << "]" << facade->GetCoordinateOfNode(id_vector[i]);
|
||||
BOOST_ASSERT( i >= -1 );
|
||||
if ( i >= 0 )
|
||||
{
|
||||
SimpleLogger().Write(logDEBUG) << "[" << i << "]" << facade->GetCoordinateOfNode(id_vector[i]);
|
||||
}
|
||||
unpacked_path.push_back(
|
||||
PathData(
|
||||
id_vector[i],
|
||||
|
||||
@@ -113,12 +113,12 @@ public:
|
||||
SimpleLogger().Write(logDEBUG) << "fwd1 insert: " << phantom_node_pair.startPhantom.forward_node_id << ", w: " << -phantom_node_pair.startPhantom.GetForwardWeightPlusOffset();
|
||||
forward_heap1.Insert(
|
||||
phantom_node_pair.startPhantom.forward_node_id,
|
||||
-distance1-phantom_node_pair.startPhantom.GetForwardWeightPlusOffset(),
|
||||
distance1-phantom_node_pair.startPhantom.GetForwardWeightPlusOffset(),
|
||||
phantom_node_pair.startPhantom.forward_node_id
|
||||
);
|
||||
forward_heap2.Insert(
|
||||
phantom_node_pair.startPhantom.forward_node_id,
|
||||
-distance1-phantom_node_pair.startPhantom.GetForwardWeightPlusOffset(),
|
||||
distance1-phantom_node_pair.startPhantom.GetForwardWeightPlusOffset(),
|
||||
phantom_node_pair.startPhantom.forward_node_id
|
||||
);
|
||||
}
|
||||
@@ -129,12 +129,12 @@ public:
|
||||
SimpleLogger().Write(logDEBUG) << "fwd1 insert: " << phantom_node_pair.startPhantom.reverse_node_id << ", w: " << -phantom_node_pair.startPhantom.GetReverseWeightPlusOffset();
|
||||
forward_heap1.Insert(
|
||||
phantom_node_pair.startPhantom.reverse_node_id,
|
||||
-distance2-phantom_node_pair.startPhantom.GetReverseWeightPlusOffset(),
|
||||
distance2-phantom_node_pair.startPhantom.GetReverseWeightPlusOffset(),
|
||||
phantom_node_pair.startPhantom.reverse_node_id
|
||||
);
|
||||
forward_heap2.Insert(
|
||||
phantom_node_pair.startPhantom.reverse_node_id,
|
||||
-distance2-phantom_node_pair.startPhantom.GetReverseWeightPlusOffset(),
|
||||
distance2-phantom_node_pair.startPhantom.GetReverseWeightPlusOffset(),
|
||||
phantom_node_pair.startPhantom.reverse_node_id
|
||||
);
|
||||
}
|
||||
@@ -369,8 +369,8 @@ public:
|
||||
|
||||
for(unsigned i = 0; i < packed_legs1.size(); ++i){
|
||||
BOOST_ASSERT( !phantom_nodes_vector.empty() );
|
||||
const bool at_beginning = (packed_legs1[i] == packed_legs1.front());
|
||||
const bool at_end = (packed_legs1[i] == packed_legs1.back());
|
||||
// const bool at_beginning = (packed_legs1[i] == packed_legs1.front());
|
||||
// const bool at_end = (packed_legs1[i] == packed_legs1.back());
|
||||
BOOST_ASSERT(packed_legs1.size() == raw_route_data.unpacked_path_segments.size() );
|
||||
|
||||
PhantomNodes unpack_phantom_node_pair = phantom_nodes_vector[i];
|
||||
|
||||
Reference in New Issue
Block a user