reproduced
This commit is contained in:
		
							parent
							
								
									98e8c2e06c
								
							
						
					
					
						commit
						dcd615ef2a
					
				| @ -510,8 +510,8 @@ 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(); | ||||
|     while (forward_heap.Size() + reverse_heap.Size() > 0 && | ||||
|            forward_heap_min + reverse_heap_min < weight) | ||||
|     while (forward_heap.Size() + reverse_heap.Size() > 0 /*&&
 | ||||
|            forward_heap_min + reverse_heap_min < weight*/) | ||||
|     { | ||||
|         if (!forward_heap.Empty()) | ||||
|         { | ||||
| @ -535,6 +535,8 @@ std::optional<std::pair<NodeID, EdgeWeight>> runSearch(const DataFacade<Algorith | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|    // std::cerr << "MIDDLE = " << middle << std::endl;
 | ||||
| 
 | ||||
|     return {{middle, weight}}; | ||||
| } | ||||
| 
 | ||||
| @ -634,8 +636,8 @@ searchDistance(SearchEngineData<Algorithm> &, | ||||
|         return INVALID_EDGE_DISTANCE; | ||||
|     } | ||||
| 
 | ||||
|     auto [middle, _] = *searchResult; | ||||
| 
 | ||||
|     auto [middle, weight] = *searchResult; | ||||
|     //std::cerr << "W: " << weight << std::endl;
 | ||||
|     auto distance = forward_heap.GetData(middle).distance + reverse_heap.GetData(middle).distance; | ||||
| 
 | ||||
|     return distance; | ||||
|  | ||||
| @ -220,7 +220,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data, | ||||
|                 ((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier()); | ||||
| 
 | ||||
|            | ||||
| 
 | ||||
| #if 0 | ||||
|             std::vector<PhantomNode> test_sources; | ||||
|             std::vector<PhantomNode> test_targets; | ||||
| 
 | ||||
| @ -258,24 +258,27 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data, | ||||
|             test_targets[1].is_valid_reverse_target = true; | ||||
| 
 | ||||
| 
 | ||||
|             // std::vector<double> old_distances;
 | ||||
|         //    std::cerr << "OLD RUN: \n";
 | ||||
|             std::vector<double> old_distances; | ||||
| 
 | ||||
|             // for (const auto& s: test_sources) {
 | ||||
|             //     for (const auto& t: test_targets) {
 | ||||
|             //         forward_heap.Clear();
 | ||||
|             //         double network_distance =
 | ||||
|             //             getNetworkDistanceOld(engine_working_data,
 | ||||
|             //                                facade,
 | ||||
|             //                                forward_heap,
 | ||||
|             //                                reverse_heap,
 | ||||
|             //                                s,
 | ||||
|             //                                t,
 | ||||
|             //                                weight_upper_bound);
 | ||||
|             //         old_distances.push_back(network_distance);
 | ||||
|             for (const auto& s: test_sources) { | ||||
|                 for (const auto& t: test_targets) { | ||||
|                     forward_heap.Clear(); | ||||
|                     double network_distance = | ||||
|                         getNetworkDistanceOld(engine_working_data, | ||||
|                                            facade, | ||||
|                                            forward_heap, | ||||
|                                            reverse_heap, | ||||
|                                            s, | ||||
|                                            t, | ||||
|                                            weight_upper_bound); | ||||
|                     old_distances.push_back(network_distance); | ||||
|                  | ||||
|             //     }
 | ||||
|             // }
 | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|           //  std::cerr << "NEW RUN: \n";
 | ||||
|             std::vector<double> new_distances; | ||||
| 
 | ||||
|             for (const auto& s: test_sources) { | ||||
| @ -301,13 +304,90 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data, | ||||
|                 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; | ||||
|                     std::exit(1); | ||||
|                 } | ||||
|             } | ||||
| #else | ||||
|             std::vector<double> old_distances; | ||||
|               for (const auto s : util::irange<std::size_t>(0UL, prev_viterbi.size())) | ||||
|             { | ||||
|                 if (prev_pruned[s]) | ||||
|                 { | ||||
|                     continue; | ||||
|                 } | ||||
| 
 | ||||
|                 for (const auto s_prime : util::irange<std::size_t>(0UL, current_viterbi.size())) | ||||
|                 { | ||||
|                     const double emission_pr = emission_log_probabilities[t][s_prime]; | ||||
|                     double new_value = prev_viterbi[s] + emission_pr; | ||||
|                     if (current_viterbi[s_prime] > new_value) | ||||
|                     { | ||||
|                         continue; | ||||
|                     } | ||||
| 
 | ||||
|                     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); | ||||
|                     old_distances.push_back(network_distance); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             std::vector<double> new_distances; | ||||
|             for (const auto s : util::irange<std::size_t>(0UL, prev_viterbi.size())) | ||||
|             { | ||||
|                 if (prev_pruned[s]) | ||||
|                 { | ||||
|                     continue; | ||||
|                 } | ||||
| 
 | ||||
|                 forward_heap.Clear(); | ||||
| 
 | ||||
|                 for (const auto s_prime : util::irange<std::size_t>(0UL, current_viterbi.size())) | ||||
|                 { | ||||
|                     const double emission_pr = emission_log_probabilities[t][s_prime]; | ||||
|                     double new_value = prev_viterbi[s] + emission_pr; | ||||
|                     if (current_viterbi[s_prime] > new_value) | ||||
|                     { | ||||
|                         continue; | ||||
|                     } | ||||
| 
 | ||||
|                     double network_distance = | ||||
|                         getNetworkDistance(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); | ||||
|                     new_distances.push_back(network_distance); | ||||
|                 } | ||||
|             } | ||||
|             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; | ||||
|                     std::exit(1); | ||||
|                 } | ||||
|             } | ||||
| #endif | ||||
| 
 | ||||
|             // compute d_t for this timestamp and the next one
 | ||||
|             for (const auto s : util::irange<std::size_t>(0UL, prev_viterbi.size())) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user