From 9b7bb7b458a922d195440a944221e488517ab3eb Mon Sep 17 00:00:00 2001 From: Kajari Ghosh Date: Thu, 20 Sep 2018 00:11:55 -0400 Subject: [PATCH] osrm-routed runs! but there is a failure once I send a request fix many_to_many_mld --- include/customizer/edge_based_graph.hpp | 6 ++++-- include/customizer/serialization.hpp | 4 ++++ src/customize/customizer.cpp | 8 ++++++-- src/engine/routing_algorithms/many_to_many_mld.cpp | 7 ++++--- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/include/customizer/edge_based_graph.hpp b/include/customizer/edge_based_graph.hpp index 39240b743..33a203a78 100644 --- a/include/customizer/edge_based_graph.hpp +++ b/include/customizer/edge_based_graph.hpp @@ -58,8 +58,10 @@ class MultiLevelGraph : public partitioner::MultiLevelGraph node_weights_, - Vector node_durations_) - : node_weights(std::move(node_weights_)), node_durations(std::move(node_durations_)) + Vector node_durations_, + Vector node_distances_) + : node_weights(std::move(node_weights_)), node_durations(std::move(node_durations_)), + node_distances(std::move(node_distances_)) { util::ViewOrVector original_edge_array; diff --git a/include/customizer/serialization.hpp b/include/customizer/serialization.hpp index c5c5fdee2..afe23cf9b 100644 --- a/include/customizer/serialization.hpp +++ b/include/customizer/serialization.hpp @@ -23,6 +23,7 @@ inline void read(storage::tar::FileReader &reader, { storage::serialization::read(reader, name + "/weights", metric.weights); storage::serialization::read(reader, name + "/durations", metric.durations); + storage::serialization::read(reader, name + "/distances", metric.distances); } template @@ -32,6 +33,7 @@ inline void write(storage::tar::FileWriter &writer, { storage::serialization::write(writer, name + "/weights", metric.weights); storage::serialization::write(writer, name + "/durations", metric.durations); + storage::serialization::write(writer, name + "/distances", metric.distances); } template @@ -42,6 +44,7 @@ inline void read(storage::tar::FileReader &reader, storage::serialization::read(reader, name + "/node_array", graph.node_array); storage::serialization::read(reader, name + "/node_weights", graph.node_weights); storage::serialization::read(reader, name + "/node_durations", graph.node_durations); + storage::serialization::read(reader, name + "/node_distances", graph.node_distances); storage::serialization::read(reader, name + "/edge_array", graph.edge_array); storage::serialization::read(reader, name + "/is_forward_edge", graph.is_forward_edge); storage::serialization::read(reader, name + "/is_backward_edge", graph.is_backward_edge); @@ -56,6 +59,7 @@ inline void write(storage::tar::FileWriter &writer, storage::serialization::write(writer, name + "/node_array", graph.node_array); storage::serialization::write(writer, name + "/node_weights", graph.node_weights); storage::serialization::write(writer, name + "/node_durations", graph.node_durations); + storage::serialization::write(writer, name + "/node_distances", graph.node_distances); storage::serialization::write(writer, name + "/edge_array", graph.edge_array); storage::serialization::write(writer, name + "/is_forward_edge", graph.is_forward_edge); storage::serialization::write(writer, name + "/is_backward_edge", graph.is_backward_edge); diff --git a/src/customize/customizer.cpp b/src/customize/customizer.cpp index 2c4f57ab8..03139c54b 100644 --- a/src/customize/customizer.cpp +++ b/src/customize/customizer.cpp @@ -125,6 +125,8 @@ int Customizer::Run(const CustomizationConfig &config) std::vector node_weights; std::vector node_durations; // TODO: to be removed later + std::vector + node_distances; // TODO: is this and the above still to be removed later? dont think so std::uint32_t connectivity_checksum = 0; auto graph = LoadAndUpdateEdgeExpandedGraph( config, mlp, node_weights, node_durations, connectivity_checksum); @@ -166,8 +168,10 @@ int Customizer::Run(const CustomizationConfig &config) util::Log() << "MLD customization writing took " << TIMER_SEC(writing_mld_data) << " seconds"; TIMER_START(writing_graph); - MultiLevelEdgeBasedGraph shaved_graph{ - std::move(graph), std::move(node_weights), std::move(node_durations)}; + MultiLevelEdgeBasedGraph shaved_graph{std::move(graph), + std::move(node_weights), + std::move(node_durations), + std::move(node_distances)}; customizer::files::writeGraph( config.GetPath(".osrm.mldgr"), shaved_graph, connectivity_checksum); TIMER_STOP(writing_graph); diff --git a/src/engine/routing_algorithms/many_to_many_mld.cpp b/src/engine/routing_algorithms/many_to_many_mld.cpp index a7120b841..f893621d0 100644 --- a/src/engine/routing_algorithms/many_to_many_mld.cpp +++ b/src/engine/routing_algorithms/many_to_many_mld.cpp @@ -163,6 +163,7 @@ void relaxOutgoingEdges(const DataFacade &facade, BOOST_ASSERT_MSG(node_weight + turn_weight > 0, "edge weight is invalid"); const auto to_weight = weight + turn_weight; const auto to_duration = duration + turn_duration; + const auto to_distance = distance + node_distance; // New Node discovered -> Add to Heap + Node Info Storage if (!query_heap.WasInserted(to)) @@ -170,16 +171,16 @@ void relaxOutgoingEdges(const DataFacade &facade, query_heap.Insert( to, to_weight, - {node, false, to_duration, static_cast(node_distance)}); + {node, false, to_duration, to_distance}); } // Found a shorter Path -> Update weight and set new parent - else if (std::tie(to_weight, to_duration, node_distance, node) < + else if (std::tie(to_weight, to_duration, to_distance, node) < std::tie(query_heap.GetKey(to), query_heap.GetData(to).duration, query_heap.GetData(to).distance, query_heap.GetData(to).parent)) { - query_heap.GetData(to) = {node, false, to_duration, node_distance}; + query_heap.GetData(to) = {node, false, to_duration, to_distance}; query_heap.DecreaseKey(to, to_weight); } }