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
|
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
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user