Skip to content

Commit

Permalink
Address #1424 by using the original fix
Browse files Browse the repository at this point in the history
  • Loading branch information
danpat authored and TheMarex committed May 28, 2015
1 parent d57f07d commit 2811382
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 44 deletions.
2 changes: 1 addition & 1 deletion features/testbot/via.feature
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,6 @@ Feature: Via points
| waypoints | route | distance | turns |
| 1,3 | ab | 200m +-1 | head,destination |
| 3,1 | ab,bc,cd,da,ab | 800m +-1 | head,right,right,right,right,destination |
| 1,2,3 | ab | 200m +-1 | head,destination |
| 1,2,3 | ab,ab | 200m +-1 | head,via,destination |
| 1,3,2 | ab,bc,cd,da,ab | 1100m +-1 | head,right,right,right,right,destination |
| 3,2,1 | ab,bc,cd,da,ab,bc,cd,da,ab | 1600m +-1 | head,right,right,right,right,right,right,right,right,destination |
58 changes: 15 additions & 43 deletions routing_algorithms/shortest_path.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,66 +92,42 @@ class ShortestPathRouting final

const bool allow_u_turn = current_leg > 0 && uturn_indicators.size() > current_leg &&
uturn_indicators[current_leg - 1];
EdgeWeight min_edge_offset = 0;
const EdgeWeight min_edge_offset =
std::min(phantom_node_pair.source_phantom.GetForwardWeightPlusOffset(),
phantom_node_pair.source_phantom.GetReverseWeightPlusOffset());

// insert new starting nodes into forward heap, adjusted by previous distances.
if ((allow_u_turn || search_from_1st_node) &&
phantom_node_pair.source_phantom.forward_node_id != SPECIAL_NODEID)
{
forward_heap1.Insert(
phantom_node_pair.source_phantom.forward_node_id,
(allow_u_turn ? 0 : distance1) -
phantom_node_pair.source_phantom.GetForwardWeightPlusOffset(),
-phantom_node_pair.source_phantom.GetForwardWeightPlusOffset(),
phantom_node_pair.source_phantom.forward_node_id);
min_edge_offset =
std::min(min_edge_offset,
(allow_u_turn ? 0 : distance1) -
phantom_node_pair.source_phantom.GetForwardWeightPlusOffset());
// SimpleLogger().Write(logDEBUG) << "fwd-a2 insert: " <<
// phantom_node_pair.source_phantom.forward_node_id << ", w: " << (allow_u_turn ? 0
// : distance1) - phantom_node_pair.source_phantom.GetForwardWeightPlusOffset();
// phantom_node_pair.source_phantom.forward_node_id << ", w: " << -phantom_node_pair.source_phantom.GetForwardWeightPlusOffset();
forward_heap2.Insert(
phantom_node_pair.source_phantom.forward_node_id,
(allow_u_turn ? 0 : distance1) -
phantom_node_pair.source_phantom.GetForwardWeightPlusOffset(),
-phantom_node_pair.source_phantom.GetForwardWeightPlusOffset(),
phantom_node_pair.source_phantom.forward_node_id);
min_edge_offset =
std::min(min_edge_offset,
(allow_u_turn ? 0 : distance1) -
phantom_node_pair.source_phantom.GetForwardWeightPlusOffset());
// SimpleLogger().Write(logDEBUG) << "fwd-b2 insert: " <<
// phantom_node_pair.source_phantom.forward_node_id << ", w: " << (allow_u_turn ? 0
// : distance1) - phantom_node_pair.source_phantom.GetForwardWeightPlusOffset();
// phantom_node_pair.source_phantom.forward_node_id << ", w: " << -phantom_node_pair.source_phantom.GetForwardWeightPlusOffset();
}
if ((allow_u_turn || search_from_2nd_node) &&
phantom_node_pair.source_phantom.reverse_node_id != SPECIAL_NODEID)
{
forward_heap1.Insert(
phantom_node_pair.source_phantom.reverse_node_id,
(allow_u_turn ? 0 : distance2) -
phantom_node_pair.source_phantom.GetReverseWeightPlusOffset(),
-phantom_node_pair.source_phantom.GetReverseWeightPlusOffset(),
phantom_node_pair.source_phantom.reverse_node_id);
min_edge_offset =
std::min(min_edge_offset,
(allow_u_turn ? 0 : distance2) -
phantom_node_pair.source_phantom.GetReverseWeightPlusOffset());
// SimpleLogger().Write(logDEBUG) << "fwd-a2 insert: " <<
// phantom_node_pair.source_phantom.reverse_node_id <<
// ", w: " << (allow_u_turn ? 0 : distance2) -
// phantom_node_pair.source_phantom.GetReverseWeightPlusOffset();
// phantom_node_pair.source_phantom.reverse_node_id << ", w: " << -phantom_node_pair.source_phantom.GetReverseWeightPlusOffset();
forward_heap2.Insert(
phantom_node_pair.source_phantom.reverse_node_id,
(allow_u_turn ? 0 : distance2) -
phantom_node_pair.source_phantom.GetReverseWeightPlusOffset(),
-phantom_node_pair.source_phantom.GetReverseWeightPlusOffset(),
phantom_node_pair.source_phantom.reverse_node_id);
min_edge_offset =
std::min(min_edge_offset,
(allow_u_turn ? 0 : distance2) -
phantom_node_pair.source_phantom.GetReverseWeightPlusOffset());
// SimpleLogger().Write(logDEBUG) << "fwd-b2 insert: " <<
// phantom_node_pair.source_phantom.reverse_node_id <<
// ", w: " << (allow_u_turn ? 0 : distance2) -
// phantom_node_pair.source_phantom.GetReverseWeightPlusOffset();
// phantom_node_pair.source_phantom.reverse_node_id << ", w: " << -phantom_node_pair.source_phantom.GetReverseWeightPlusOffset();
}

// insert new backward nodes into backward heap, unadjusted.
Expand All @@ -161,9 +137,7 @@ class ShortestPathRouting final
phantom_node_pair.target_phantom.GetForwardWeightPlusOffset(),
phantom_node_pair.target_phantom.forward_node_id);
// SimpleLogger().Write(logDEBUG) << "rev-a insert: " <<
// phantom_node_pair.target_phantom.forward_node_id <<
// ", w: " <<
// phantom_node_pair.target_phantom.GetForwardWeightPlusOffset();
// phantom_node_pair.target_phantom.forward_node_id << ", w: " << phantom_node_pair.target_phantom.GetForwardWeightPlusOffset();
}

if (phantom_node_pair.target_phantom.reverse_node_id != SPECIAL_NODEID)
Expand All @@ -172,9 +146,7 @@ class ShortestPathRouting final
phantom_node_pair.target_phantom.GetReverseWeightPlusOffset(),
phantom_node_pair.target_phantom.reverse_node_id);
// SimpleLogger().Write(logDEBUG) << "rev-a insert: " <<
// phantom_node_pair.target_phantom.reverse_node_id <<
// ", w: " <<
// phantom_node_pair.target_phantom.GetReverseWeightPlusOffset();
// phantom_node_pair.target_phantom.reverse_node_id << ", w: " << phantom_node_pair.target_phantom.GetReverseWeightPlusOffset();
}

// run two-Target Dijkstra routing step.
Expand Down Expand Up @@ -332,8 +304,8 @@ class ShortestPathRouting final
BOOST_ASSERT(search_from_1st_node != search_from_2nd_node);
}

distance1 = local_upper_bound1;
distance2 = local_upper_bound2;
distance1 += local_upper_bound1;
distance2 += local_upper_bound2;
++current_leg;
}

Expand Down

0 comments on commit 2811382

Please sign in to comment.