21template <
bool Bisimulation,
bool Fret>
23 probfd::solvers::StateType<Bisimulation, Fret>,
24 probfd::solvers::ActionType<Bisimulation, Fret>>;
26template <
bool Bisimulation,
bool Fret>
27void add_mdp_hs_base_options_to_feature(
28 downward::cli::plugins::Feature& feature)
30 feature.add_option<
bool>(
32 "Specifies whether the algorithm should use an upper-bounding value "
33 "function as well. In this case, convergence checks are made by "
34 "comparing whether the lower and upper bounding value functions are "
35 "epsilon-close to each other.",
37 feature.add_option<std::shared_ptr<PolicyPickerType<Bisimulation, Fret>>>(
39 "The tie-breaking strategy to use when selecting a greedy policy.",
40 add_mdp_type_to_option<Bisimulation, Fret>(
41 "arbitrary_policy_tiebreaker()"));
43 add_base_solver_options_to_feature(feature);
46template <
bool Bisimulation,
bool Fret>
47auto get_mdp_hs_base_args_from_options(
48 const downward::cli::plugins::Options& options)
50 return std::tuple_cat(
52 options.get<
bool>(
"dual_bounds"),
55 get_base_solver_args_from_options(options));
58template <
bool Bisimulation,
bool Fret>
59void add_mdp_hs_options_to_feature(downward::cli::plugins::Feature& feature)
62 feature.add_option<
bool>(
64 "Whether FRET should be used on the greedy policy graph or on the "
69 add_mdp_hs_base_options_to_feature<Bisimulation, Fret>(feature);
72template <
bool Bisimulation,
bool Fret>
73auto get_mdp_hs_args_from_options(
74 const downward::cli::plugins::Options& options)
77 return std::tuple_cat(
78 std::make_tuple(options.get<
bool>(
"fret_on_policy")),
79 get_mdp_hs_base_args_from_options<Bisimulation, Fret>(options));
81 return get_mdp_hs_base_args_from_options<Bisimulation, Fret>(options);