From 96ae1e1320ed7496d4b01823e942e97e079565d8 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Mon, 10 Jun 2024 22:46:30 +0200 Subject: [PATCH] wip --- include/engine/phantom_node.hpp | 2 +- .../routing_algorithms/routing_base_mld.hpp | 87 +++++++++++-------- .../routing_algorithms/map_matching.cpp | 86 +++++++++--------- 3 files changed, 98 insertions(+), 77 deletions(-) diff --git a/include/engine/phantom_node.hpp b/include/engine/phantom_node.hpp index b1e70cb72..6a9a90509 100644 --- a/include/engine/phantom_node.hpp +++ b/include/engine/phantom_node.hpp @@ -214,7 +214,7 @@ struct PhantomNode util::Coordinate input_location; unsigned short fwd_segment_position; // is phantom node valid to be used as source or target - //private: + // private: unsigned short is_valid_forward_source : 1; unsigned short is_valid_forward_target : 1; unsigned short is_valid_reverse_source : 1; diff --git a/include/engine/routing_algorithms/routing_base_mld.hpp b/include/engine/routing_algorithms/routing_base_mld.hpp index 7f4ce331d..970d4a08d 100644 --- a/include/engine/routing_algorithms/routing_base_mld.hpp +++ b/include/engine/routing_algorithms/routing_base_mld.hpp @@ -510,17 +510,18 @@ std::optional> runSearch(const DataFacade 0 && ( forward_heap_min < weight || reverse_heap_min < weight)) - #else - while (forward_heap.Size() + reverse_heap.Size() > 0 && ( - forward_heap_min + reverse_heap_min < weight)) - #endif +#else + while (forward_heap.Size() + reverse_heap.Size() > 0 && + (forward_heap_min + reverse_heap_min < weight)) +#endif { - // std::cerr << "F: " << forward_heap_min << " R: " << reverse_heap_min << " W: " << weight << std::endl; + // std::cerr << "F: " << forward_heap_min << " R: " << reverse_heap_min << " W: " << weight + // << std::endl; if (!forward_heap.Empty()) { @@ -531,7 +532,7 @@ std::optional> runSearch(const DataFacade( + routingStep( facade, reverse_heap, forward_heap, middle, weight, force_step_nodes, args...); if (!reverse_heap.Empty()) reverse_heap_min = reverse_heap.MinKey(); @@ -653,7 +654,7 @@ searchDistance(SearchEngineData &, } auto [middle, weight] = *searchResult; - //std::cerr << "W: " << weight << std::endl; + // std::cerr << "W: " << weight << std::endl; auto distance = forward_heap.GetData(middle).distance + reverse_heap.GetData(middle).distance; return distance; @@ -752,38 +753,52 @@ double getNetworkDistance(SearchEngineData &engine_working_data, // } // } - - // forward_heap.Clear(); - if (forward_heap.Empty()) { - if (source_phantom.IsValidForwardSource()) + // forward_heap.Clear(); + if (forward_heap.Empty()) { - forward_heap.Insert(source_phantom.forward_segment_id.id, - EdgeWeight{0}, - {source_phantom.forward_segment_id.id, false, EdgeDistance{0}}); - } + if (source_phantom.IsValidForwardSource()) + { + forward_heap.Insert(source_phantom.forward_segment_id.id, + EdgeWeight{0}, + {source_phantom.forward_segment_id.id, false, EdgeDistance{0}}); + } - if (source_phantom.IsValidReverseSource()) - { - forward_heap.Insert(source_phantom.reverse_segment_id.id, - EdgeWeight{0}, - {source_phantom.reverse_segment_id.id, false, EdgeDistance{0}}); - } -} else { - if (target_phantom.IsValidForwardTarget()) { - if (forward_heap.WasInserted(target_phantom.forward_segment_id.id)) { - std::cerr << "Found " << target_phantom.forward_segment_id.id << " in forward_heap" << std::endl; - } else { - std::cerr << "Not found " << target_phantom.forward_segment_id.id << " in forward_heap" << std::endl; + if (source_phantom.IsValidReverseSource()) + { + forward_heap.Insert(source_phantom.reverse_segment_id.id, + EdgeWeight{0}, + {source_phantom.reverse_segment_id.id, false, EdgeDistance{0}}); } } - if (target_phantom.IsValidReverseTarget()) { - if (forward_heap.WasInserted(target_phantom.reverse_segment_id.id)) { - std::cerr << "Found " << target_phantom.reverse_segment_id.id << " in forward_heap" << std::endl; - } else { - std::cerr << "Not found " << target_phantom.reverse_segment_id.id << " in forward_heap" << std::endl; + else + { + if (target_phantom.IsValidForwardTarget()) + { + if (forward_heap.WasInserted(target_phantom.forward_segment_id.id)) + { + std::cerr << "Found " << target_phantom.forward_segment_id.id << " in forward_heap" + << std::endl; + } + else + { + std::cerr << "Not found " << target_phantom.forward_segment_id.id + << " in forward_heap" << std::endl; + } + } + if (target_phantom.IsValidReverseTarget()) + { + if (forward_heap.WasInserted(target_phantom.reverse_segment_id.id)) + { + std::cerr << "Found " << target_phantom.reverse_segment_id.id << " in forward_heap" + << std::endl; + } + else + { + std::cerr << "Not found " << target_phantom.reverse_segment_id.id + << " in forward_heap" << std::endl; + } } } -} if (target_phantom.IsValidForwardTarget()) { diff --git a/src/engine/routing_algorithms/map_matching.cpp b/src/engine/routing_algorithms/map_matching.cpp index a00d0be06..2bd215d3c 100644 --- a/src/engine/routing_algorithms/map_matching.cpp +++ b/src/engine/routing_algorithms/map_matching.cpp @@ -219,7 +219,6 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, const EdgeWeight weight_upper_bound = to_alias( ((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier()); - #if 1 std::vector test_sources; std::vector test_targets; @@ -238,7 +237,6 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, test_targets[0].forward_segment_id.enabled = 1; test_targets[0].is_valid_forward_target = true; - test_targets[0].reverse_segment_id.id = 268; test_targets[0].reverse_segment_id.enabled = 0; @@ -246,7 +244,6 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, test_sources[1].forward_segment_id.enabled = 1; test_sources[0].is_valid_forward_source = true; - test_sources[1].reverse_segment_id.id = 2147483647; test_sources[1].reverse_segment_id.enabled = 0; @@ -257,8 +254,7 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, test_targets[1].reverse_segment_id.enabled = 1; test_targets[1].is_valid_reverse_target = true; - - // std::cerr << "OLD RUN: \n"; + // std::cerr << "OLD RUN: \n"; // std::vector old_distances; // for (const auto& s: test_sources) { @@ -273,51 +269,57 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, // t, // weight_upper_bound); // old_distances.push_back(network_distance); - + // } // } - - // std::cerr << "NEW RUN: \n"; + // std::cerr << "NEW RUN: \n"; std::vector new_distances; - for (const auto& s: test_sources) { - forward_heap.Clear(); - - for (const auto& t: test_targets) { - - double network_distance = - getNetworkDistance(engine_working_data, - facade, - forward_heap, - reverse_heap, - s, - t, - weight_upper_bound); + for (const auto &s : test_sources) + { + forward_heap.Clear(); + + for (const auto &t : test_targets) + { + + double network_distance = getNetworkDistance(engine_working_data, + facade, + forward_heap, + reverse_heap, + s, + t, + weight_upper_bound); new_distances.push_back(network_distance); - } } - std::vector expected = {663.997, 1533.04, std::numeric_limits::max(), std::numeric_limits::max()}; - if (new_distances.size() != expected.size()) { + std::vector expected = {663.997, + 1533.04, + std::numeric_limits::max(), + std::numeric_limits::max()}; + if (new_distances.size() != expected.size()) + { std::cerr << "New distances size is not equal to expected size" << std::endl; std::exit(1); } // for (size_t index = 0; index < new_distances.size(); index++) { // std::cerr << new_distances[index] << std::endl; // } - for (size_t index = 0; index < new_distances.size(); index++) { - - if (std::abs(new_distances[index] - expected[index]) > 1e-1) { - std::cerr << "New: " << new_distances[index] << " Expected: " << expected[index] << std::endl; + for (size_t index = 0; index < new_distances.size(); index++) + { + + if (std::abs(new_distances[index] - expected[index]) > 1e-1) + { + std::cerr << "New: " << new_distances[index] << " Expected: " << expected[index] + << std::endl; std::exit(1); } } std::exit(1); #elif 1 std::vector old_distances; - for (const auto s : util::irange(0UL, prev_viterbi.size())) + for (const auto s : util::irange(0UL, prev_viterbi.size())) { if (prev_pruned[s]) { @@ -336,12 +338,12 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, forward_heap.Clear(); double network_distance = getNetworkDistanceOld(engine_working_data, - facade, - forward_heap, - reverse_heap, - prev_unbroken_timestamps_list[s].phantom_node, - current_timestamps_list[s_prime].phantom_node, - weight_upper_bound); + facade, + forward_heap, + reverse_heap, + prev_unbroken_timestamps_list[s].phantom_node, + current_timestamps_list[s_prime].phantom_node, + weight_upper_bound); old_distances.push_back(network_distance); } } @@ -376,15 +378,19 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, new_distances.push_back(network_distance); } } - if (new_distances.size() != old_distances.size()) { + if (new_distances.size() != old_distances.size()) + { std::cerr << "New distances size is not equal to expected size" << std::endl; std::exit(1); } - for (size_t index = 0; index < new_distances.size(); index++) { - - if (std::abs(new_distances[index] - old_distances[index]) > 1e-1) { - std::cerr << "New: " << new_distances[index] << " Expected: " << old_distances[index] << std::endl; + for (size_t index = 0; index < new_distances.size(); index++) + { + + if (std::abs(new_distances[index] - old_distances[index]) > 1e-1) + { + std::cerr << "New: " << new_distances[index] + << " Expected: " << old_distances[index] << std::endl; std::exit(1); } }