remove unneeded edge-offset during query
This commit is contained in:
parent
db5fd5506d
commit
038e8cc8b8
@ -168,8 +168,7 @@ public:
|
|||||||
&middle_node,
|
&middle_node,
|
||||||
&upper_bound_to_shortest_path_distance,
|
&upper_bound_to_shortest_path_distance,
|
||||||
via_node_candidate_list,
|
via_node_candidate_list,
|
||||||
forward_search_space,
|
forward_search_space
|
||||||
0
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(0 < reverse_heap1.Size()){
|
if(0 < reverse_heap1.Size()){
|
||||||
@ -179,8 +178,7 @@ public:
|
|||||||
&middle_node,
|
&middle_node,
|
||||||
&upper_bound_to_shortest_path_distance,
|
&upper_bound_to_shortest_path_distance,
|
||||||
via_node_candidate_list,
|
via_node_candidate_list,
|
||||||
reverse_search_space,
|
reverse_search_space
|
||||||
0
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -284,7 +282,7 @@ public:
|
|||||||
//prioritizing via nodes for deep inspection
|
//prioritizing via nodes for deep inspection
|
||||||
BOOST_FOREACH(const NodeID node, preselected_node_list) {
|
BOOST_FOREACH(const NodeID node, preselected_node_list) {
|
||||||
int length_of_via_path = 0, sharing_of_via_path = 0;
|
int length_of_via_path = 0, sharing_of_via_path = 0;
|
||||||
ComputeLengthAndSharingOfViaPath(node, &length_of_via_path, &sharing_of_via_path, 0, packed_shortest_path);
|
ComputeLengthAndSharingOfViaPath(node, &length_of_via_path, &sharing_of_via_path, packed_shortest_path);
|
||||||
const int maximum_allowed_sharing = upper_bound_to_shortest_path_distance*VIAPATH_GAMMA;
|
const int maximum_allowed_sharing = upper_bound_to_shortest_path_distance*VIAPATH_GAMMA;
|
||||||
if( sharing_of_via_path <= maximum_allowed_sharing && length_of_via_path <= upper_bound_to_shortest_path_distance*(1+VIAPATH_EPSILON)) {
|
if( sharing_of_via_path <= maximum_allowed_sharing && length_of_via_path <= upper_bound_to_shortest_path_distance*(1+VIAPATH_EPSILON)) {
|
||||||
ranked_candidates_list.push_back(
|
ranked_candidates_list.push_back(
|
||||||
@ -305,7 +303,7 @@ public:
|
|||||||
int length_of_via_path = INVALID_EDGE_WEIGHT;
|
int length_of_via_path = INVALID_EDGE_WEIGHT;
|
||||||
NodeID s_v_middle = SPECIAL_NODEID, v_t_middle = SPECIAL_NODEID;
|
NodeID s_v_middle = SPECIAL_NODEID, v_t_middle = SPECIAL_NODEID;
|
||||||
BOOST_FOREACH(const RankedCandidateNode & candidate, ranked_candidates_list){
|
BOOST_FOREACH(const RankedCandidateNode & candidate, ranked_candidates_list){
|
||||||
if(ViaNodeCandidatePassesTTest(forward_heap1, reverse_heap1, forward_heap2, reverse_heap2, candidate, 0, upper_bound_to_shortest_path_distance, &length_of_via_path, &s_v_middle, &v_t_middle)) {
|
if(ViaNodeCandidatePassesTTest(forward_heap1, reverse_heap1, forward_heap2, reverse_heap2, candidate, upper_bound_to_shortest_path_distance, &length_of_via_path, &s_v_middle, &v_t_middle)) {
|
||||||
// select first admissable
|
// select first admissable
|
||||||
selected_via_node = candidate.node;
|
selected_via_node = candidate.node;
|
||||||
break;
|
break;
|
||||||
@ -417,7 +415,6 @@ private:
|
|||||||
const NodeID via_node,
|
const NodeID via_node,
|
||||||
int *real_length_of_via_path,
|
int *real_length_of_via_path,
|
||||||
int *sharing_of_via_path,
|
int *sharing_of_via_path,
|
||||||
const int offset,
|
|
||||||
const std::vector<NodeID> & packed_shortest_path
|
const std::vector<NodeID> & packed_shortest_path
|
||||||
) {
|
) {
|
||||||
engine_working_data.InitializeOrClearSecondThreadLocalStorage(
|
engine_working_data.InitializeOrClearSecondThreadLocalStorage(
|
||||||
@ -445,7 +442,6 @@ private:
|
|||||||
existing_forward_heap,
|
existing_forward_heap,
|
||||||
&s_v_middle,
|
&s_v_middle,
|
||||||
&upper_bound_s_v_path_length,
|
&upper_bound_s_v_path_length,
|
||||||
2 * offset,
|
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -459,7 +455,6 @@ private:
|
|||||||
existing_reverse_heap,
|
existing_reverse_heap,
|
||||||
&v_t_middle,
|
&v_t_middle,
|
||||||
&upper_bound_of_v_t_path_length,
|
&upper_bound_of_v_t_path_length,
|
||||||
2 * offset,
|
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -627,8 +622,7 @@ private:
|
|||||||
NodeID * middle_node,
|
NodeID * middle_node,
|
||||||
int * upper_bound_to_shortest_path_distance,
|
int * upper_bound_to_shortest_path_distance,
|
||||||
std::vector<NodeID> & search_space_intersection,
|
std::vector<NodeID> & search_space_intersection,
|
||||||
std::vector<SearchSpaceEdge> & search_space,
|
std::vector<SearchSpaceEdge> & search_space
|
||||||
const int edge_expansion_offset
|
|
||||||
) const {
|
) const {
|
||||||
const NodeID node = forward_heap.DeleteMin();
|
const NodeID node = forward_heap.DeleteMin();
|
||||||
const int distance = forward_heap.GetKey(node);
|
const int distance = forward_heap.GetKey(node);
|
||||||
@ -653,7 +647,7 @@ private:
|
|||||||
const int new_distance = reverse_heap.GetKey(node) + distance;
|
const int new_distance = reverse_heap.GetKey(node) + distance;
|
||||||
if (new_distance < *upper_bound_to_shortest_path_distance)
|
if (new_distance < *upper_bound_to_shortest_path_distance)
|
||||||
{
|
{
|
||||||
if ((new_distance + edge_expansion_offset) >= 0)
|
if (new_distance >= 0)
|
||||||
{
|
{
|
||||||
*middle_node = node;
|
*middle_node = node;
|
||||||
*upper_bound_to_shortest_path_distance = new_distance;
|
*upper_bound_to_shortest_path_distance = new_distance;
|
||||||
@ -699,7 +693,6 @@ private:
|
|||||||
QueryHeap& new_forward_heap,
|
QueryHeap& new_forward_heap,
|
||||||
QueryHeap& new_reverse_heap,
|
QueryHeap& new_reverse_heap,
|
||||||
const RankedCandidateNode& candidate,
|
const RankedCandidateNode& candidate,
|
||||||
const int offset,
|
|
||||||
const int lengthOfShortestPath,
|
const int lengthOfShortestPath,
|
||||||
int * length_of_via_path,
|
int * length_of_via_path,
|
||||||
NodeID * s_v_middle,
|
NodeID * s_v_middle,
|
||||||
@ -715,7 +708,7 @@ private:
|
|||||||
//compute path <s,..,v> by reusing forward search from s
|
//compute path <s,..,v> by reusing forward search from s
|
||||||
new_reverse_heap.Insert(candidate.node, 0, candidate.node);
|
new_reverse_heap.Insert(candidate.node, 0, candidate.node);
|
||||||
while (new_reverse_heap.Size() > 0) {
|
while (new_reverse_heap.Size() > 0) {
|
||||||
super::RoutingStep(new_reverse_heap, existing_forward_heap, s_v_middle, &upper_bound_s_v_path_length, 2*offset, false);
|
super::RoutingStep(new_reverse_heap, existing_forward_heap, s_v_middle, &upper_bound_s_v_path_length, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( INVALID_EDGE_WEIGHT == upper_bound_s_v_path_length ) {
|
if( INVALID_EDGE_WEIGHT == upper_bound_s_v_path_length ) {
|
||||||
@ -727,7 +720,7 @@ private:
|
|||||||
int upper_bound_of_v_t_path_length = INVALID_EDGE_WEIGHT;
|
int upper_bound_of_v_t_path_length = INVALID_EDGE_WEIGHT;
|
||||||
new_forward_heap.Insert(candidate.node, 0, candidate.node);
|
new_forward_heap.Insert(candidate.node, 0, candidate.node);
|
||||||
while (new_forward_heap.Size() > 0) {
|
while (new_forward_heap.Size() > 0) {
|
||||||
super::RoutingStep(new_forward_heap, existing_reverse_heap, v_t_middle, &upper_bound_of_v_t_path_length, 2*offset, true);
|
super::RoutingStep(new_forward_heap, existing_reverse_heap, v_t_middle, &upper_bound_of_v_t_path_length, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( INVALID_EDGE_WEIGHT == upper_bound_of_v_t_path_length ){
|
if( INVALID_EDGE_WEIGHT == upper_bound_of_v_t_path_length ){
|
||||||
@ -891,7 +884,6 @@ private:
|
|||||||
reverse_heap3,
|
reverse_heap3,
|
||||||
&middle,
|
&middle,
|
||||||
&upper_bound,
|
&upper_bound,
|
||||||
offset,
|
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -901,7 +893,6 @@ private:
|
|||||||
forward_heap3,
|
forward_heap3,
|
||||||
&middle,
|
&middle,
|
||||||
&upper_bound,
|
&upper_bound,
|
||||||
offset,
|
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,6 @@ public:
|
|||||||
SearchEngineData::QueryHeap & reverse_heap,
|
SearchEngineData::QueryHeap & reverse_heap,
|
||||||
NodeID * middle_node_id,
|
NodeID * middle_node_id,
|
||||||
int * upper_bound,
|
int * upper_bound,
|
||||||
const int edge_expansion_offset,
|
|
||||||
const bool forward_direction
|
const bool forward_direction
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
@ -75,7 +74,7 @@ public:
|
|||||||
// SimpleLogger().Write(logDEBUG) << "new_distance: " << new_distance;
|
// SimpleLogger().Write(logDEBUG) << "new_distance: " << new_distance;
|
||||||
if(new_distance < *upper_bound )
|
if(new_distance < *upper_bound )
|
||||||
{
|
{
|
||||||
if( new_distance + edge_expansion_offset >= 0 )
|
if (new_distance >= 0)
|
||||||
{
|
{
|
||||||
*middle_node_id = node;
|
*middle_node_id = node;
|
||||||
*upper_bound = new_distance;
|
*upper_bound = new_distance;
|
||||||
|
@ -174,7 +174,6 @@ public:
|
|||||||
reverse_heap1,
|
reverse_heap1,
|
||||||
&middle1,
|
&middle1,
|
||||||
&local_upper_bound1,
|
&local_upper_bound1,
|
||||||
0,
|
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -184,7 +183,6 @@ public:
|
|||||||
forward_heap1,
|
forward_heap1,
|
||||||
&middle1,
|
&middle1,
|
||||||
&local_upper_bound1,
|
&local_upper_bound1,
|
||||||
0,
|
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -198,7 +196,6 @@ public:
|
|||||||
reverse_heap2,
|
reverse_heap2,
|
||||||
&middle2,
|
&middle2,
|
||||||
&local_upper_bound2,
|
&local_upper_bound2,
|
||||||
0,
|
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -208,7 +205,6 @@ public:
|
|||||||
forward_heap2,
|
forward_heap2,
|
||||||
&middle2,
|
&middle2,
|
||||||
&local_upper_bound2,
|
&local_upper_bound2,
|
||||||
0,
|
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user