diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index 2da26b57..35cacd9c 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -711,15 +711,26 @@ RamseyPolicyStatement::writeJsonOutput(ostream &output) const output << "}"; } -void -EvaluatePlannerObjective::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const +EvaluatePlannerObjectiveStatement::EvaluatePlannerObjectiveStatement(OptionsList options_list_arg) : + options_list{move(options_list_arg)} { +} + +void +EvaluatePlannerObjectiveStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const +{ + options_list.writeOutput(output); output << "oo_.planner_objective_value = evaluate_planner_objective(M_, options_, oo_);" << endl; } void -EvaluatePlannerObjective::writeJsonOutput(ostream &output) const +EvaluatePlannerObjectiveStatement::writeJsonOutput(ostream &output) const { + if (options_list.getNumberOfOptions()) + { + output << ", "; + options_list.writeJsonOutput(output); + } output << R"({"statementName": "evaluate_planner_objective"})"; } diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh index 47cdb503..1a4e192f 100644 --- a/src/ComputingTasks.hh +++ b/src/ComputingTasks.hh @@ -199,9 +199,12 @@ public: void writeJsonOutput(ostream &output) const override; }; -class EvaluatePlannerObjective : public Statement +class EvaluatePlannerObjectiveStatement : public Statement { +private: + const OptionsList options_list; public: + EvaluatePlannerObjectiveStatement(OptionsList options_list_arg); void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeJsonOutput(ostream &output) const override; }; diff --git a/src/DynareBison.yy b/src/DynareBison.yy index 406a0ae0..5673a31e 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -2456,8 +2456,18 @@ ramsey_constraint : NAME LESS expression ';' evaluate_planner_objective : EVALUATE_PLANNER_OBJECTIVE ';' { driver.evaluate_planner_objective(); } + | EVALUATE_PLANNER_OBJECTIVE '(' evaluate_planner_objective_options_list ')' ';' + { driver.evaluate_planner_objective(); } ; +evaluate_planner_objective_options_list : evaluate_planner_objective_option COMMA evaluate_planner_objective_options_list + | evaluate_planner_objective_option + ; + +evaluate_planner_objective_option : o_evaluate_planner_objective_periods + | o_evaluate_planner_objective_drop + ; + occbin_setup : OCCBIN_SETUP ';' { driver.occbin_setup(); } | OCCBIN_SETUP '(' occbin_setup_options_list ')' ';' @@ -4037,6 +4047,9 @@ o_checks_via_subsets : CHECKS_VIA_SUBSETS EQUAL INT_NUMBER { driver.option_num(" o_max_dim_subsets_groups : MAX_DIM_SUBSETS_GROUPS EQUAL INT_NUMBER { driver.option_num("max_dim_subsets_groups", $3); }; o_zero_moments_tolerance : ZERO_MOMENTS_TOLERANCE EQUAL non_negative_number { driver.option_num("zero_moments_tolerance", $3); }; +// Some options to "evaluate_planner_objective" +o_evaluate_planner_objective_periods : PERIODS EQUAL INT_NUMBER { driver.option_num("ramsey.periods", $3); }; +o_evaluate_planner_objective_drop : DROP EQUAL INT_NUMBER { driver.option_num("ramsey.drop", $3); }; // Some options to "occbin_solver" o_occbin_simul_maxit : SIMUL_MAXIT EQUAL INT_NUMBER { driver.option_num("simul.maxit", $3); }; diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index bf43e7fc..2220b8bd 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -2098,7 +2098,8 @@ ParsingDriver::ramsey_policy() void ParsingDriver::evaluate_planner_objective() { - mod_file->addStatement(make_unique()); + mod_file->addStatement(make_unique(options_list)); + options_list.clear(); } void