diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index c67084a4eac3843a6077bd2f3a0a7bab342e85e9..e73f289299318d2eb87d220e01e5b98745f6d06f 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -1008,6 +1008,22 @@ RamseyPolicyStatement::writeJsonOutput(ostream &output) const << "}"; } +EvaluatePlannerObjective::EvaluatePlannerObjective() +{ +} + +void +EvaluatePlannerObjective::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const +{ + output << "oo_.planner_objective_value = evaluate_planner_objective(M_, options_, oo_);" << endl; +} + +void +EvaluatePlannerObjective::writeJsonOutput(ostream &output) const +{ + output << R"({"statementName": "evaluate_planner_objective"})"; +} + DiscretionaryPolicyStatement::DiscretionaryPolicyStatement(SymbolList symbol_list_arg, OptionsList options_list_arg) : symbol_list{move(symbol_list_arg)}, diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh index abfb95ed71dd75021afc56dae4301d53a13acf58..31558a37421817514e61b945472eeca1362de6ef 100644 --- a/src/ComputingTasks.hh +++ b/src/ComputingTasks.hh @@ -254,6 +254,14 @@ public: void writeJsonOutput(ostream &output) const override; }; +class EvaluatePlannerObjective : public Statement +{ +public: + EvaluatePlannerObjective(); + void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; + void writeJsonOutput(ostream &output) const override; +}; + class DiscretionaryPolicyStatement : public Statement { private: diff --git a/src/DynareBison.yy b/src/DynareBison.yy index 44490b0a32151606a52dd93866152c8ef5be5783..d1d1be31a5aa6049d7b31378747b99ed63c4aae1 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -114,7 +114,7 @@ class ParsingDriver; %token SHOCKS SHOCK_DECOMPOSITION SHOCK_GROUPS USE_SHOCK_GROUPS SIGMA_E SIMUL SIMUL_ALGO SIMUL_SEED ENDOGENOUS_TERMINAL_PERIOD %token SMOOTHER SMOOTHER2HISTVAL SQUARE_ROOT_SOLVER STACK_SOLVE_ALGO STEADY_STATE_MODEL SOLVE_ALGO SOLVER_PERIODS ROBUST_LIN_SOLVE %token STDERR STEADY STOCH_SIMUL SYLVESTER SYLVESTER_FIXED_POINT_TOL REGIMES REGIME REALTIME_SHOCK_DECOMPOSITION CONDITIONAL UNCONDITIONAL -%token TEX RAMSEY_MODEL RAMSEY_POLICY RAMSEY_CONSTRAINTS PLANNER_DISCOUNT DISCRETIONARY_POLICY DISCRETIONARY_TOL +%token TEX RAMSEY_MODEL RAMSEY_POLICY RAMSEY_CONSTRAINTS PLANNER_DISCOUNT DISCRETIONARY_POLICY DISCRETIONARY_TOL EVALUATE_PLANNER_OBJECTIVE %token <string> TEX_NAME %token UNIFORM_PDF UNIT_ROOT_VARS USE_DLL USEAUTOCORR GSA_SAMPLE_FILE USE_UNIVARIATE_FILTERS_IF_SINGULARITY_IS_DETECTED %token VALUES VAR VAREXO VAREXO_DET VARIABLE VAROBS VAREXOBS PREDETERMINED_VARIABLES VAR_EXPECTATION VAR_EXPECTATION_MODEL PLOT_SHOCK_DECOMPOSITION MODEL_LOCAL_VARIABLE @@ -254,6 +254,7 @@ statement : parameters | ramsey_model | ramsey_policy | ramsey_constraints + | evaluate_planner_objective | discretionary_policy | bvar_density | bvar_forecast @@ -2349,6 +2350,10 @@ ramsey_constraint : NAME LESS expression ';' { driver.ramsey_constraint_add_greater_equal($1,$3); } ; +evaluate_planner_objective : EVALUATE_PLANNER_OBJECTIVE ';' + { driver.evaluate_planner_objective(); } + ; + discretionary_policy : DISCRETIONARY_POLICY ';' { driver.discretionary_policy(); } | DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' ';' diff --git a/src/DynareFlex.ll b/src/DynareFlex.ll index 989bc71b8e065cf4ea06c43146d6a15898f9991d..f1c1d074ff0808cadb4b36c51d7473fb6c2fa680 100644 --- a/src/DynareFlex.ll +++ b/src/DynareFlex.ll @@ -148,6 +148,7 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]|w([1-9]{1}|[1-4][0-9]|5[0-2])) <INITIAL>planner_objective {BEGIN DYNARE_STATEMENT; return token::PLANNER_OBJECTIVE;} <INITIAL>ramsey_model {BEGIN DYNARE_STATEMENT; return token::RAMSEY_MODEL;} <INITIAL>ramsey_policy {BEGIN DYNARE_STATEMENT; return token::RAMSEY_POLICY;} +<INITIAL>evaluate_planner_objective {BEGIN DYNARE_STATEMENT; return token::EVALUATE_PLANNER_OBJECTIVE;} <INITIAL>discretionary_policy {BEGIN DYNARE_STATEMENT; return token::DISCRETIONARY_POLICY;} <INITIAL>identification {BEGIN DYNARE_STATEMENT; return token::IDENTIFICATION;} diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index 0f72b0c50cbc8f0640ac3de21b218d88b1abc576..be326eb295eb1d9222ea7ba85f2930dab44a2489 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -2201,6 +2201,12 @@ ParsingDriver::add_to_ramsey_policy_list(string name) ramsey_policy_list.push_back(move(name)); } +void +ParsingDriver::evaluate_planner_objective() +{ + mod_file->addStatement(make_unique<EvaluatePlannerObjective>()); +} + void ParsingDriver::discretionary_policy() { diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh index 81a88a5cb8122ed3835727eda6bf826ac32fbc2a..8600f63e3d606d00b7778988d756a40aafaa85b2 100644 --- a/src/ParsingDriver.hh +++ b/src/ParsingDriver.hh @@ -658,6 +658,8 @@ public: void add_ramsey_constraint(const string &name, BinaryOpcode op_code, const expr_t rhs); //! Ramsey policy statement void ramsey_policy(); + //! Evaluate Planner Objective + void evaluate_planner_objective(); //! Discretionary policy statement void discretionary_policy(); //! Adds a write_latex_dynamic_model statement