diff --git a/kaminpar-cli/kaminpar_arguments.cc b/kaminpar-cli/kaminpar_arguments.cc index 770c42eb..94f75cb0 100644 --- a/kaminpar-cli/kaminpar_arguments.cc +++ b/kaminpar-cli/kaminpar_arguments.cc @@ -169,6 +169,13 @@ CLI::Option_group *create_coarsening_options(CLI::App *app, Context &ctx) { ->description("Disables some approximations of sparsification algorithms.") ->default_val(false); + coarsening->add_option("--s-wff-tbr", ctx.sparsification.wff_target_burnt_ratio) + ->description("Target burn ratio of the Weighted Forest Fire (WFF) score") + ->default_val(5); + coarsening->add_option("--s-wff-pf", ctx.sparsification.wff_pf) + ->description("The probability which parameterizes the geometrically distributed number of " + "neighbors to burn") + ->default_val(.95); coarsening ->add_option( "--c-contraction-limit", diff --git a/kaminpar-shm/factories.cc b/kaminpar-shm/factories.cc index a1f807e8..b7cb5c76 100644 --- a/kaminpar-shm/factories.cc +++ b/kaminpar-shm/factories.cc @@ -148,13 +148,17 @@ std::unique_ptr create_sampler(const Context &ctx) { return std::make_unique>( std::make_unique>([](const NetworKit::Graph &g) { - return sparsification::NetworKitWeightedForestFireScore(g, 0.95, 5); + double>>([&](const NetworKit::Graph &g) { + return sparsification::NetworKitWeightedForestFireScore( + g, ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ); }) ); case ScoreFunctionSection::WEIGHTED_FOREST_FIRE: return std::make_unique>( - std::make_unique(0.95, 5) + std::make_unique( + ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ) ); case ScoreFunctionSection::EFFECTIVE_RESISTANCE: return std::make_unique>( @@ -179,13 +183,17 @@ std::unique_ptr create_sampler(const Context &ctx) { return std::make_unique>( std::make_unique>([](const NetworKit::Graph &g) { - return sparsification::NetworKitWeightedForestFireScore(g, 0.95, 5); + double>>([&](const NetworKit::Graph &g) { + return sparsification::NetworKitWeightedForestFireScore( + g, ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ); }) ); case ScoreFunctionSection::WEIGHTED_FOREST_FIRE: return std::make_unique>( - std::make_unique(0.95, 5) + std::make_unique( + ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ) ); case ScoreFunctionSection::EFFECTIVE_RESISTANCE: return std::make_unique>( @@ -211,14 +219,18 @@ std::unique_ptr create_sampler(const Context &ctx) { return std::make_unique>( std::make_unique>([](const NetworKit::Graph &g) { - return sparsification::NetworKitWeightedForestFireScore(g, 0.95, 5); + double>>([&](const NetworKit::Graph &g) { + return sparsification::NetworKitWeightedForestFireScore( + g, ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ); }), ctx.sparsification.no_approx ); case ScoreFunctionSection::WEIGHTED_FOREST_FIRE: return std::make_unique>( - std::make_unique(0.95, 5), + std::make_unique( + ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ), ctx.sparsification.no_approx ); case ScoreFunctionSection::EFFECTIVE_RESISTANCE: @@ -246,12 +258,16 @@ std::unique_ptr create_sampler(const Context &ctx) { std::make_unique>([](const NetworKit::Graph &g) { - return sparsification::NetworKitWeightedForestFireScore(g, 0.95, 5); + return sparsification::NetworKitWeightedForestFireScore( + g, ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ); }) ); case ScoreFunctionSection::WEIGHTED_FOREST_FIRE: return std::make_unique>( - std::make_unique(0.95, 5) + std::make_unique( + ctx.sparsification.wff_pf, ctx.sparsification.wff_target_burnt_ratio + ) ); case ScoreFunctionSection::EFFECTIVE_RESISTANCE: return std::make_unique>( diff --git a/kaminpar-shm/kaminpar.h b/kaminpar-shm/kaminpar.h index c567c1eb..4a669e93 100644 --- a/kaminpar-shm/kaminpar.h +++ b/kaminpar-shm/kaminpar.h @@ -243,6 +243,9 @@ struct SparsificationContext { float target_factor; bool no_approx; + + float wff_target_burnt_ratio; + float wff_pf; }; //