This commit is contained in:
Siarhei Fedartsou 2024-06-10 22:46:30 +02:00
parent 88708eedb0
commit 96ae1e1320
3 changed files with 98 additions and 77 deletions

View File

@ -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;

View File

@ -510,17 +510,18 @@ std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorith
EdgeWeight weight = weight_upper_bound;
EdgeWeight forward_heap_min = forward_heap.MinKey();
EdgeWeight reverse_heap_min = reverse_heap.MinKey();
// if (!reverse_heap.Empty())
// reverse_heap_min = reverse_heap.MinKey();
#if 0
// if (!reverse_heap.Empty())
// 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() + 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<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorith
}
if (!reverse_heap.Empty())
{
routingStep<REVERSE_DIRECTION>(
routingStep<REVERSE_DIRECTION>(
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<Algorithm> &,
}
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<Algorithm> &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())
{

View File

@ -219,7 +219,6 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
const EdgeWeight weight_upper_bound = to_alias<EdgeWeight>(
((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier());
#if 1
std::vector<PhantomNode> test_sources;
std::vector<PhantomNode> test_targets;
@ -238,7 +237,6 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &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<Algorithm> &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<Algorithm> &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<double> old_distances;
// for (const auto& s: test_sources) {
@ -277,47 +273,53 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
// }
// }
// std::cerr << "NEW RUN: \n";
// std::cerr << "NEW RUN: \n";
std::vector<double> new_distances;
for (const auto& s: test_sources) {
forward_heap.Clear();
for (const auto &s : test_sources)
{
forward_heap.Clear();
for (const auto& t: test_targets) {
for (const auto &t : test_targets)
{
double network_distance =
getNetworkDistance(engine_working_data,
facade,
forward_heap,
reverse_heap,
s,
t,
weight_upper_bound);
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<double> expected = {663.997, 1533.04, std::numeric_limits<double>::max(), std::numeric_limits<double>::max()};
if (new_distances.size() != expected.size()) {
std::vector<double> expected = {663.997,
1533.04,
std::numeric_limits<double>::max(),
std::numeric_limits<double>::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++) {
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;
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<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()))
{
if (prev_pruned[s])
{
@ -336,12 +338,12 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &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<Algorithm> &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++) {
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;
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);
}
}