diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index c2d17d76b6a39ba6d338d203cc3e6227172fb629..9edc69dbf4cf812f772c337cad85afaf6b59a748 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -2222,14 +2222,20 @@ ParsingDriver::evaluate_planner_objective() void ParsingDriver::discretionary_policy() { + /* The logic here is different from “ramsey_policy” and “ramsey_model”, + because we want to allow several instances of “discretionary_policy” in + the same .mod file. */ if (!mod_file->symbol_table.exists("optimal_policy_discount_factor")) - { - declare_parameter("optimal_policy_discount_factor"); - init_param("optimal_policy_discount_factor", data_tree->One); - } + declare_parameter("optimal_policy_discount_factor"); + + if (!planner_discount) + planner_discount = data_tree->One; + init_param("optimal_policy_discount_factor", planner_discount); + mod_file->addStatement(make_unique<DiscretionaryPolicyStatement>(symbol_list, options_list)); symbol_list.clear(); options_list.clear(); + planner_discount = nullptr; } void