restore libosrm interface for corech, fallback to ch
This commit is contained in:
parent
4f3414c4cc
commit
e385f6352e
@ -12,8 +12,7 @@ namespace osrm
|
||||
namespace contractor
|
||||
{
|
||||
|
||||
using GraphFilterAndCore =
|
||||
std::tuple<QueryGraph, std::vector<std::vector<bool>>>;
|
||||
using GraphFilterAndCore = std::tuple<QueryGraph, std::vector<std::vector<bool>>>;
|
||||
|
||||
inline auto contractExcludableGraph(ContractorGraph contractor_graph_,
|
||||
std::vector<EdgeWeight> node_weights,
|
||||
@ -38,10 +37,8 @@ inline auto contractExcludableGraph(ContractorGraph contractor_graph_,
|
||||
// a very dense core. This increases the overall graph sizes a little bit
|
||||
// but increases the final CH quality and contraction speed.
|
||||
constexpr float BASE_CORE = 0.9;
|
||||
is_shared_core = contractGraph(contractor_graph,
|
||||
std::move(always_allowed),
|
||||
node_weights,
|
||||
BASE_CORE);
|
||||
is_shared_core =
|
||||
contractGraph(contractor_graph, std::move(always_allowed), node_weights, BASE_CORE);
|
||||
|
||||
// Add all non-core edges to container
|
||||
{
|
||||
|
@ -61,6 +61,7 @@ struct ContractorConfig final : storage::IOConfig
|
||||
|
||||
updater::UpdaterConfig updater_config;
|
||||
|
||||
// DEPRECATED to be removed in v6.0
|
||||
bool use_cached_priority;
|
||||
|
||||
unsigned requested_num_threads;
|
||||
|
@ -57,16 +57,14 @@ namespace engine
|
||||
*
|
||||
* You can chose between three algorithms:
|
||||
* - Algorithm::CH
|
||||
* Contraction Hierarchies, extremely fast queries but slow pre-processing. The default right
|
||||
* Contraction Hierarchies, extremely fast queries but slow pre-processing. The default right
|
||||
* now.
|
||||
* - Algorithm::CoreCH
|
||||
* Contractoin Hierachies with partial contraction for faster pre-processing but slower queries.
|
||||
* Deprecated, to be removed in v6.0
|
||||
* Contraction Hierachies with partial contraction for faster pre-processing but slower
|
||||
* queries.
|
||||
* - Algorithm::MLD
|
||||
* Multi Level Dijkstra which is experimental and moderately fast in both pre-processing and
|
||||
* query.
|
||||
*
|
||||
* Algorithm::CH is specified we will automatically upgrade to CoreCH if we find the data for it.
|
||||
* If Algorithm::CoreCH is specified and we don't find the speedup data, we fail hard.
|
||||
* Multi Level Dijkstra, moderately fast in both pre-processing and query.
|
||||
*
|
||||
* \see OSRM, StorageConfig
|
||||
*/
|
||||
@ -76,8 +74,8 @@ struct EngineConfig final
|
||||
|
||||
enum class Algorithm
|
||||
{
|
||||
CH, // will upgrade to CoreCH if it finds core data
|
||||
CoreCH, // will fail hard if there is no core data
|
||||
CH,
|
||||
CoreCH, // Deprecated, will be removed in v6.0
|
||||
MLD
|
||||
};
|
||||
|
||||
|
@ -43,8 +43,14 @@ OSRM::OSRM(engine::EngineConfig &config)
|
||||
// Now, check that the algorithm requested can be used with the data
|
||||
// that's available.
|
||||
|
||||
if (config.algorithm == EngineConfig::Algorithm::CH)
|
||||
if (config.algorithm == EngineConfig::Algorithm::CH ||
|
||||
config.algorithm == EngineConfig::Algorithm::CoreCH)
|
||||
{
|
||||
if (config.algorithm == EngineConfig::Algorithm::CoreCH)
|
||||
{
|
||||
util::Log(logWARNING) << "Using CoreCH is deprecated. Falling back to CH";
|
||||
config.algorithm = EngineConfig::Algorithm::CH;
|
||||
}
|
||||
bool ch_compatible = engine::Engine<CH>::CheckCompatibility(config);
|
||||
|
||||
// throw error if dataset is not usable with CH
|
||||
|
@ -60,6 +60,12 @@ return_code parseArguments(int argc,
|
||||
&contractor_config.updater_config.turn_penalty_lookup_paths)
|
||||
->composing(),
|
||||
"Lookup files containing from_, to_, via_nodes, and turn penalties to adjust turn weights")(
|
||||
"level-cache,o",
|
||||
boost::program_options::value<bool>(&contractor_config.use_cached_priority)
|
||||
->default_value(false),
|
||||
"DEPRECATED: Will always be false. Use .level file to retain the contraction level for "
|
||||
"each "
|
||||
"node from the last run.")(
|
||||
"edge-weight-updates-over-factor",
|
||||
boost::program_options::value<double>(
|
||||
&contractor_config.updater_config.log_edge_updates_factor)
|
||||
|
@ -15,6 +15,14 @@ BOOST_AUTO_TEST_CASE(test_incompatible_with_mld)
|
||||
osrm::exception);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_compatible_with_corech_fallback)
|
||||
{
|
||||
// Note - this tests that given the CoreCH algorithm config option, configuration falls back to
|
||||
// CH and is compatible with CH data
|
||||
BOOST_CHECK_NO_THROW(
|
||||
getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm", osrm::EngineConfig::Algorithm::CoreCH));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_incompatible_with_ch)
|
||||
{
|
||||
// Can't use the CH algorithm with MLD data
|
||||
|
@ -300,6 +300,16 @@ BOOST_AUTO_TEST_CASE(test_tile_ch)
|
||||
validate_tile(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_corech)
|
||||
{
|
||||
// Note: this tests that given the CoreCH algorithm config option, configuration falls back to
|
||||
// CH and is compatible with CH data
|
||||
using namespace osrm;
|
||||
auto osrm =
|
||||
getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm", osrm::EngineConfig::Algorithm::CoreCH);
|
||||
validate_tile(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_mld)
|
||||
{
|
||||
using namespace osrm;
|
||||
@ -543,6 +553,17 @@ BOOST_AUTO_TEST_CASE(test_tile_turns_ch)
|
||||
test_tile_turns(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_turns_corech)
|
||||
{
|
||||
// Note: this tests that given the CoreCH algorithm config option, configuration falls back to
|
||||
// CH and is compatible with CH data
|
||||
using namespace osrm;
|
||||
auto osrm =
|
||||
getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm", osrm::EngineConfig::Algorithm::CoreCH);
|
||||
|
||||
test_tile_turns(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_turns_mld)
|
||||
{
|
||||
using namespace osrm;
|
||||
@ -724,6 +745,17 @@ BOOST_AUTO_TEST_CASE(test_tile_speeds_ch)
|
||||
test_tile_speeds(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_speeds_corech)
|
||||
{
|
||||
// Note: this tests that given the CoreCH algorithm config option, configuration falls back to
|
||||
// CH and is compatible with CH data
|
||||
using namespace osrm;
|
||||
|
||||
auto osrm =
|
||||
getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm", osrm::EngineConfig::Algorithm::CoreCH);
|
||||
test_tile_speeds(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_speeds_mld)
|
||||
{
|
||||
using namespace osrm;
|
||||
@ -820,6 +852,17 @@ BOOST_AUTO_TEST_CASE(test_tile_nodes_ch)
|
||||
test_tile_nodes(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_nodes_corech)
|
||||
{
|
||||
// Note: this tests that given the CoreCH algorithm config option, configuration falls back to
|
||||
// CH and is compatible with CH data
|
||||
using namespace osrm;
|
||||
|
||||
auto osrm =
|
||||
getOSRM(OSRM_TEST_DATA_DIR "/ch/monaco.osrm", osrm::EngineConfig::Algorithm::CoreCH);
|
||||
test_tile_nodes(osrm);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_tile_nodes_mld)
|
||||
{
|
||||
using namespace osrm;
|
||||
|
Loading…
Reference in New Issue
Block a user