This commit is contained in:
Siarhei Fedartsou 2024-05-28 20:41:59 +02:00
parent dcd615ef2a
commit 5b26eac258
2 changed files with 44 additions and 28 deletions

View File

@ -497,7 +497,7 @@ std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorith
EdgeWeight weight_upper_bound, EdgeWeight weight_upper_bound,
const Args &...args) const Args &...args)
{ {
if (forward_heap.Empty() || reverse_heap.Empty()) if (forward_heap.Empty() && reverse_heap.Empty())
{ {
return {}; return {};
} }
@ -510,9 +510,17 @@ std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorith
EdgeWeight weight = weight_upper_bound; EdgeWeight weight = weight_upper_bound;
EdgeWeight forward_heap_min = forward_heap.MinKey(); EdgeWeight forward_heap_min = forward_heap.MinKey();
EdgeWeight reverse_heap_min = reverse_heap.MinKey(); EdgeWeight reverse_heap_min = reverse_heap.MinKey();
while (forward_heap.Size() + reverse_heap.Size() > 0 /*&& // if (!reverse_heap.Empty())
forward_heap_min + reverse_heap_min < weight*/) // reverse_heap_min = reverse_heap.MinKey();
#if 0
while (forward_heap.Size() + reverse_heap.Size() > 0 && (
forward_heap_min < weight || reverse_heap_min < weight))
#else
while (forward_heap.Size() > 0 && forward_heap_min < weight_upper_bound)
#endif
{ {
// std::cerr << "F: " << forward_heap_min << " R: " << reverse_heap_min << " W: " << weight << std::endl;
if (!forward_heap.Empty()) if (!forward_heap.Empty())
{ {
routingStep<FORWARD_DIRECTION>( routingStep<FORWARD_DIRECTION>(
@ -520,14 +528,21 @@ std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorith
if (!forward_heap.Empty()) if (!forward_heap.Empty())
forward_heap_min = forward_heap.MinKey(); forward_heap_min = forward_heap.MinKey();
} }
if (!reverse_heap.Empty()) // if (!reverse_heap.Empty())
{ // {
// routingStep<REVERSE_DIRECTION>(
// facade, reverse_heap, forward_heap, middle, weight, force_step_nodes, args...);
// if (!reverse_heap.Empty())
// reverse_heap_min = reverse_heap.MinKey();
// }
};
if (!reverse_heap.Empty()) {
routingStep<REVERSE_DIRECTION>( routingStep<REVERSE_DIRECTION>(
facade, reverse_heap, forward_heap, middle, weight, force_step_nodes, args...); facade, reverse_heap, forward_heap, middle, weight, force_step_nodes, args...);
if (!reverse_heap.Empty()) if (!reverse_heap.Empty())
reverse_heap_min = reverse_heap.MinKey(); reverse_heap_min = reverse_heap.MinKey();
} }
};
// No path found for both target nodes? // No path found for both target nodes?
if (weight >= weight_upper_bound || SPECIAL_NODEID == middle) if (weight >= weight_upper_bound || SPECIAL_NODEID == middle)

View File

@ -220,7 +220,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier()); ((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier());
#if 0 #if 1
std::vector<PhantomNode> test_sources; std::vector<PhantomNode> test_sources;
std::vector<PhantomNode> test_targets; std::vector<PhantomNode> test_targets;
@ -259,23 +259,23 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
// std::cerr << "OLD RUN: \n"; // std::cerr << "OLD RUN: \n";
std::vector<double> old_distances; // std::vector<double> old_distances;
for (const auto& s: test_sources) { // for (const auto& s: test_sources) {
for (const auto& t: test_targets) { // for (const auto& t: test_targets) {
forward_heap.Clear(); // forward_heap.Clear();
double network_distance = // double network_distance =
getNetworkDistanceOld(engine_working_data, // getNetworkDistanceOld(engine_working_data,
facade, // facade,
forward_heap, // forward_heap,
reverse_heap, // reverse_heap,
s, // s,
t, // t,
weight_upper_bound); // weight_upper_bound);
old_distances.push_back(network_distance); // old_distances.push_back(network_distance);
} // }
} // }
// std::cerr << "NEW RUN: \n"; // std::cerr << "NEW RUN: \n";
@ -314,7 +314,8 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
std::exit(1); std::exit(1);
} }
} }
#else std::exit(1);
#elif 1
std::vector<double> old_distances; std::vector<double> old_distances;
for (const auto s : util::irange<std::size_t>(0UL, prev_viterbi.size())) for (const auto s : util::irange<std::size_t>(0UL, prev_viterbi.size()))
{ {
@ -409,7 +410,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
} }
double network_distance = double network_distance =
getNetworkDistanceOld(engine_working_data, getNetworkDistance(engine_working_data,
facade, facade,
forward_heap, forward_heap,
reverse_heap, reverse_heap,