From d3bd6ace90c75dec1e7c1c2396b24d1b3231c671 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Mon, 13 Aug 2018 17:00:47 +0200 Subject: [PATCH] pac: print optimizing share parameter --- src/DynamicModel.cc | 3 +++ src/ExprNode.cc | 35 ++++++++++++++++++++--------------- src/ExprNode.hh | 19 ++++++++++--------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 27a4f3a8..5d89412a 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -3755,6 +3755,7 @@ DynamicModel::walkPacParameters() if (equation->containsPacExpectation()) { + int optim_share_index = -1; set optim_share; expr_t optim_part = nullptr; expr_t non_optim_part = nullptr; @@ -3766,10 +3767,12 @@ DynamicModel::walkPacParameters() equation->get_arg2()->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars); else { + optim_share_index = *(optim_share.begin()); optim_part->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars); non_optim_part->getPacNonOptimizingPart(non_optim_params_vars_and_scaling_factor); } equation->addParamInfoToPac(lhs, + optim_share_index, ec_params_and_vars, ar_params_and_vars, non_optim_params_vars_and_scaling_factor); } diff --git a/src/ExprNode.cc b/src/ExprNode.cc index a3f17923..39dce9ac 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -675,7 +675,7 @@ NumConstNode::getPacNonOptimizingPart(set, double> } void -NumConstNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +NumConstNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { } @@ -1859,7 +1859,7 @@ VariableNode::getPacOptimizingShareAndExprNodes(set &optim_share, } void -VariableNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +VariableNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { } @@ -3481,9 +3481,9 @@ UnaryOpNode::getPacOptimizingShareAndExprNodes(set &optim_share, } void -UnaryOpNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +UnaryOpNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { - arg->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + arg->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); } void @@ -5312,10 +5312,10 @@ BinaryOpNode::getPacLHS(pair &lhs) } void -BinaryOpNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +BinaryOpNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { - arg1->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); - arg2->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + arg1->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + arg2->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); } void @@ -6203,11 +6203,11 @@ TrinaryOpNode::getPacOptimizingShareAndExprNodes(set &optim_share, } void -TrinaryOpNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +TrinaryOpNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { - arg1->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); - arg2->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); - arg3->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + arg1->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + arg2->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + arg3->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); } void @@ -6725,10 +6725,10 @@ AbstractExternalFunctionNode::getPacOptimizingShareAndExprNodes(set &optim_ } void -AbstractExternalFunctionNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +AbstractExternalFunctionNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { for (auto argument : arguments) - argument->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); + argument->addParamInfoToPac(lhs_arg, optim_share_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg); } void @@ -8290,7 +8290,7 @@ VarExpectationNode::getPacOptimizingShareAndExprNodes(set &optim_share, } void -VarExpectationNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +VarExpectationNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { } @@ -8378,6 +8378,10 @@ PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output << "M_.pac." << model_name << ".growth_neutrality_param_index = " << datatree.symbol_table.getTypeSpecificID(growth_param_index) + 1 << ";" << endl; + if (optim_share_index >= 0) + output << "M_.pac." << model_name << ".share_of_optimizing_agents_value = " + << datatree.symbol_table.getTypeSpecificID(optim_share_index) + 1 << ";" << endl; + output << "M_.pac." << model_name << ".ec.params = "; auto it = ec_params_and_vars.begin(); output << datatree.symbol_table.getTypeSpecificID(it->first) + 1 @@ -8812,7 +8816,7 @@ PacExpectationNode::getPacOptimizingShareAndExprNodes(set &optim_share, } void -PacExpectationNode::addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) +PacExpectationNode::addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) { if (lhs_arg.first == -1) { @@ -8827,6 +8831,7 @@ PacExpectationNode::addParamInfoToPac(pair &lhs_arg, set &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) = 0; + virtual void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) = 0; //! Fills var_model info for pac_expectation node virtual void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) = 0; @@ -632,7 +632,7 @@ public: expr_t cloneDynamic(DataTree &dynamic_datatree) const override; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>> @@ -730,7 +730,7 @@ public: expr_t cloneDynamic(DataTree &dynamic_datatree) const override; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>> @@ -852,7 +852,7 @@ public: expr_t cloneDynamic(DataTree &dynamic_datatree) const override; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>> @@ -1001,7 +1001,7 @@ public: //! Returns the non-zero hand-side of an equation (that must have a hand side equal to zero) expr_t getNonZeroPartofEquation() const; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> &ar_params_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacOptimizingPart(set>> &ec_params_and_vars, @@ -1107,7 +1107,7 @@ public: expr_t cloneDynamic(DataTree &dynamic_datatree) const override; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>> @@ -1227,7 +1227,7 @@ public: expr_t cloneDynamic(DataTree &dynamic_datatree) const override = 0; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>> @@ -1434,7 +1434,7 @@ public: expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>> @@ -1463,6 +1463,7 @@ private: int max_lag, pac_max_lag; vector h0_indices, h1_indices; int growth_param_index, equation_number; + int optim_share_index; set>> ec_params_and_vars; set>> ar_params_and_vars; set, double>>> params_vars_and_scaling_factor; @@ -1528,7 +1529,7 @@ public: expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override; expr_t removeTrendLeadLag(map trend_symbols_map) const override; bool isInStaticForm() const override; - void addParamInfoToPac(pair &lhs_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; + void addParamInfoToPac(pair &lhs_arg, int optim_share_arg, set>> &ec_params_and_vars_arg, set>> ¶ms_and_vars_arg, set, double>>> ¶ms_vars_and_scaling_factor_arg) override; void fillPacExpectationVarInfo(string &model_name_arg, vector &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override; bool containsPacExpectation(const string &pac_model_name = "") const override; void getPacNonOptimizingPart(set, double>>>