restore libosrm interface for corech, fallback to ch

This commit is contained in:
karenzshea 2017-10-13 12:14:45 +02:00 committed by Patrick Niklaus
parent 4f3414c4cc
commit e385f6352e
7 changed files with 75 additions and 16 deletions

View File

@ -12,8 +12,7 @@ namespace osrm
namespace contractor namespace contractor
{ {
using GraphFilterAndCore = using GraphFilterAndCore = std::tuple<QueryGraph, std::vector<std::vector<bool>>>;
std::tuple<QueryGraph, std::vector<std::vector<bool>>>;
inline auto contractExcludableGraph(ContractorGraph contractor_graph_, inline auto contractExcludableGraph(ContractorGraph contractor_graph_,
std::vector<EdgeWeight> node_weights, 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 // a very dense core. This increases the overall graph sizes a little bit
// but increases the final CH quality and contraction speed. // but increases the final CH quality and contraction speed.
constexpr float BASE_CORE = 0.9; constexpr float BASE_CORE = 0.9;
is_shared_core = contractGraph(contractor_graph, is_shared_core =
std::move(always_allowed), contractGraph(contractor_graph, std::move(always_allowed), node_weights, BASE_CORE);
node_weights,
BASE_CORE);
// Add all non-core edges to container // Add all non-core edges to container
{ {

View File

@ -61,6 +61,7 @@ struct ContractorConfig final : storage::IOConfig
updater::UpdaterConfig updater_config; updater::UpdaterConfig updater_config;
// DEPRECATED to be removed in v6.0
bool use_cached_priority; bool use_cached_priority;
unsigned requested_num_threads; unsigned requested_num_threads;

View File

@ -57,16 +57,14 @@ namespace engine
* *
* You can chose between three algorithms: * You can chose between three algorithms:
* - Algorithm::CH * - 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. * now.
* - Algorithm::CoreCH * - 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 * - Algorithm::MLD
* Multi Level Dijkstra which is experimental and moderately fast in both pre-processing and * Multi Level Dijkstra, moderately fast in both pre-processing and query.
* 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.
* *
* \see OSRM, StorageConfig * \see OSRM, StorageConfig
*/ */
@ -76,8 +74,8 @@ struct EngineConfig final
enum class Algorithm enum class Algorithm
{ {
CH, // will upgrade to CoreCH if it finds core data CH,
CoreCH, // will fail hard if there is no core data CoreCH, // Deprecated, will be removed in v6.0
MLD MLD
}; };

View File

@ -43,8 +43,14 @@ OSRM::OSRM(engine::EngineConfig &config)
// Now, check that the algorithm requested can be used with the data // Now, check that the algorithm requested can be used with the data
// that's available. // 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); bool ch_compatible = engine::Engine<CH>::CheckCompatibility(config);
// throw error if dataset is not usable with CH // throw error if dataset is not usable with CH

View File

@ -60,6 +60,12 @@ return_code parseArguments(int argc,
&contractor_config.updater_config.turn_penalty_lookup_paths) &contractor_config.updater_config.turn_penalty_lookup_paths)
->composing(), ->composing(),
"Lookup files containing from_, to_, via_nodes, and turn penalties to adjust turn weights")( "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", "edge-weight-updates-over-factor",
boost::program_options::value<double>( boost::program_options::value<double>(
&contractor_config.updater_config.log_edge_updates_factor) &contractor_config.updater_config.log_edge_updates_factor)

View File

@ -15,6 +15,14 @@ BOOST_AUTO_TEST_CASE(test_incompatible_with_mld)
osrm::exception); 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) BOOST_AUTO_TEST_CASE(test_incompatible_with_ch)
{ {
// Can't use the CH algorithm with MLD data // Can't use the CH algorithm with MLD data

View File

@ -300,6 +300,16 @@ BOOST_AUTO_TEST_CASE(test_tile_ch)
validate_tile(osrm); 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) BOOST_AUTO_TEST_CASE(test_tile_mld)
{ {
using namespace osrm; using namespace osrm;
@ -543,6 +553,17 @@ BOOST_AUTO_TEST_CASE(test_tile_turns_ch)
test_tile_turns(osrm); 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) BOOST_AUTO_TEST_CASE(test_tile_turns_mld)
{ {
using namespace osrm; using namespace osrm;
@ -724,6 +745,17 @@ BOOST_AUTO_TEST_CASE(test_tile_speeds_ch)
test_tile_speeds(osrm); 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) BOOST_AUTO_TEST_CASE(test_tile_speeds_mld)
{ {
using namespace osrm; using namespace osrm;
@ -820,6 +852,17 @@ BOOST_AUTO_TEST_CASE(test_tile_nodes_ch)
test_tile_nodes(osrm); 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) BOOST_AUTO_TEST_CASE(test_tile_nodes_mld)
{ {
using namespace osrm; using namespace osrm;