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
{
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
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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