preprocessor: find optimizing shares of agents in PAC equation
parent
c5c61f99ba
commit
edc242d471
|
@ -3749,13 +3749,30 @@ DynamicModel::walkPacParameters()
|
||||||
{
|
{
|
||||||
for (auto & equation : equations)
|
for (auto & equation : equations)
|
||||||
{
|
{
|
||||||
bool pac_encountered = false;
|
|
||||||
pair<int, int> lhs (-1, -1);
|
pair<int, int> lhs (-1, -1);
|
||||||
set<pair<int, pair<int, int>>> params_and_vars;
|
set<pair<int, pair<int, int>>> ar_params_and_vars, ec_params_and_vars;
|
||||||
set<pair<int, pair<int, int>>> ecm_params_and_vars;
|
set<pair<int, pair<pair<int, int>, double>>> non_optim_params_vars_and_scaling_factor;
|
||||||
equation->walkPacParameters(pac_encountered, lhs, ecm_params_and_vars, params_and_vars);
|
|
||||||
if (pac_encountered)
|
if (equation->containsPacExpectation())
|
||||||
equation->addParamInfoToPac(lhs, ecm_params_and_vars, params_and_vars);
|
{
|
||||||
|
set<int> optim_share;
|
||||||
|
expr_t optim_part = nullptr;
|
||||||
|
expr_t non_optim_part = nullptr;
|
||||||
|
equation->getPacLHS(lhs);
|
||||||
|
equation->get_arg2()->getPacOptimizingShareAndExprNodes(optim_share,
|
||||||
|
optim_part,
|
||||||
|
non_optim_part);
|
||||||
|
if (optim_part == nullptr)
|
||||||
|
equation->get_arg2()->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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,
|
||||||
|
ec_params_and_vars, ar_params_and_vars,
|
||||||
|
non_optim_params_vars_and_scaling_factor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
471
src/ExprNode.cc
471
src/ExprNode.cc
|
@ -649,13 +649,33 @@ NumConstNode::isInStaticForm() const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
NumConstNode::isParamTimesEndogExpr() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NumConstNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
NumConstNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NumConstNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
NumConstNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NumConstNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NumConstNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1802,13 +1822,44 @@ VariableNode::isInStaticForm() const
|
||||||
return lag == 0;
|
return lag == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
VariableNode::isParamTimesEndogExpr() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VariableNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
VariableNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
if (type != SymbolType::endogenous
|
||||||
|
&& type != SymbolType::exogenous)
|
||||||
|
{
|
||||||
|
cerr << "ERROR VariableNode::getPacNonOptimizingPart: Error in parsing PAC equation"
|
||||||
|
<< endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
params_vars_and_scaling_factor.emplace(make_pair(-1,
|
||||||
|
make_pair(make_pair(symb_id, lag),
|
||||||
|
1.0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VariableNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VariableNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
VariableNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VariableNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3401,16 +3452,38 @@ UnaryOpNode::isInStaticForm() const
|
||||||
return arg->isInStaticForm();
|
return arg->isInStaticForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
UnaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
UnaryOpNode::isParamTimesEndogExpr() const
|
||||||
{
|
{
|
||||||
arg->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
return arg->isParamTimesEndogExpr();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
UnaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
UnaryOpNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
{
|
{
|
||||||
arg->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg);
|
arg->getPacNonOptimizingPart(params_vars_and_scaling_factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
UnaryOpNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
|
{
|
||||||
|
arg->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
UnaryOpNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
arg->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
UnaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -5006,8 +5079,7 @@ BinaryOpNode::isInStaticForm() const
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
BinaryOpNode::walkPacParametersHelper(const expr_t arg1, const expr_t arg2,
|
BinaryOpNode::getPacOptimizingPartHelper(const expr_t arg1, const expr_t arg2,
|
||||||
pair<int, int> &lhs,
|
|
||||||
set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
{
|
{
|
||||||
|
@ -5027,7 +5099,7 @@ BinaryOpNode::walkPacParametersHelper(const expr_t arg1, const expr_t arg2,
|
||||||
{
|
{
|
||||||
auto *test_arg1 = dynamic_cast<VariableNode *>(testarg2->get_arg1());
|
auto *test_arg1 = dynamic_cast<VariableNode *>(testarg2->get_arg1());
|
||||||
auto *test_arg2 = dynamic_cast<VariableNode *>(testarg2->get_arg2());
|
auto *test_arg2 = dynamic_cast<VariableNode *>(testarg2->get_arg2());
|
||||||
if (test_arg1 != nullptr && test_arg2 != nullptr && lhs.first != -1)
|
if (test_arg1 != nullptr && test_arg2 != nullptr)
|
||||||
{
|
{
|
||||||
test_arg1->collectDynamicVariables(SymbolType::endogenous, endogs);
|
test_arg1->collectDynamicVariables(SymbolType::endogenous, endogs);
|
||||||
ec_params_and_vars.emplace(*(params.begin()), *(endogs.begin()));
|
ec_params_and_vars.emplace(*(params.begin()), *(endogs.begin()));
|
||||||
|
@ -5040,18 +5112,198 @@ BinaryOpNode::walkPacParametersHelper(const expr_t arg1, const expr_t arg2,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
BinaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
BinaryOpNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
{
|
{
|
||||||
if (op_code == BinaryOpcode::times)
|
if (op_code == BinaryOpcode::times)
|
||||||
{
|
{
|
||||||
int orig_ar_params_and_vars_size = ar_params_and_vars.size();
|
int orig_ar_params_and_vars_size = ar_params_and_vars.size();
|
||||||
int orig_ec_params_and_vars_size = ec_params_and_vars.size();
|
int orig_ec_params_and_vars_size = ec_params_and_vars.size();
|
||||||
walkPacParametersHelper(arg1, arg2, lhs, ec_params_and_vars, ar_params_and_vars);
|
getPacOptimizingPartHelper(arg1, arg2, ec_params_and_vars, ar_params_and_vars);
|
||||||
if ((int)ar_params_and_vars.size() == orig_ar_params_and_vars_size
|
if ((int)ar_params_and_vars.size() == orig_ar_params_and_vars_size
|
||||||
&& (int)ec_params_and_vars.size() == orig_ec_params_and_vars_size)
|
&& (int)ec_params_and_vars.size() == orig_ec_params_and_vars_size)
|
||||||
walkPacParametersHelper(arg2, arg1, lhs, ec_params_and_vars, ar_params_and_vars);
|
getPacOptimizingPartHelper(arg2, arg1, ec_params_and_vars, ar_params_and_vars);
|
||||||
}
|
}
|
||||||
else if (op_code == BinaryOpcode::equal)
|
|
||||||
|
arg1->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
arg2->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BinaryOpNode::getPacNonOptimizingPartHelper(const expr_t arg1, const expr_t arg2,
|
||||||
|
set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
eval_context_t ec;
|
||||||
|
set<int> params;
|
||||||
|
set<pair<int, int>> vars;
|
||||||
|
arg1->collectDynamicVariables(SymbolType::endogenous, vars);
|
||||||
|
arg1->collectDynamicVariables(SymbolType::exogenous, vars);
|
||||||
|
|
||||||
|
if (vars.size() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (vars.size() > 1)
|
||||||
|
{
|
||||||
|
cerr << "ERROR BinaryOpNode::getPacNonOptimizingPartHelper: Error in parsing PAC equation"
|
||||||
|
<< endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
ec[(*(vars.begin())).first] = 1.0;
|
||||||
|
|
||||||
|
arg2->collectVariables(SymbolType::parameter, params);
|
||||||
|
if (params.size() > 1)
|
||||||
|
{
|
||||||
|
cerr << "ERROR BinaryOpNode::getPacNonOptimizingPartHelper: 2 Error in parsing PAC equation"
|
||||||
|
<< endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int param_idx;
|
||||||
|
if (params.size() == 1)
|
||||||
|
{
|
||||||
|
param_idx = *(params.begin());
|
||||||
|
ec[param_idx] = 1.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
param_idx = -1;
|
||||||
|
|
||||||
|
double scaling_factor = 1.0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
scaling_factor = this->eval(ec);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
params_vars_and_scaling_factor.emplace(param_idx,
|
||||||
|
make_pair(*(vars.begin()), scaling_factor));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BinaryOpNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
if (op_code == BinaryOpcode::times
|
||||||
|
|| op_code == BinaryOpcode::divide)
|
||||||
|
{
|
||||||
|
size_t orig_size = params_vars_and_scaling_factor.size();
|
||||||
|
getPacNonOptimizingPartHelper(arg1, arg2, params_vars_and_scaling_factor);
|
||||||
|
if (orig_size == params_vars_and_scaling_factor.size())
|
||||||
|
getPacNonOptimizingPartHelper(arg2, arg1, params_vars_and_scaling_factor);
|
||||||
|
if (orig_size == params_vars_and_scaling_factor.size())
|
||||||
|
{
|
||||||
|
cerr << "ERROR BinaryOpNode::getPacNonOptimizingPart: Error in parsing PAC equation"
|
||||||
|
<< endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arg1->getPacNonOptimizingPart(params_vars_and_scaling_factor);
|
||||||
|
arg2->getPacNonOptimizingPart(params_vars_and_scaling_factor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
BinaryOpNode::isParamTimesEndogExpr() const
|
||||||
|
{
|
||||||
|
if (op_code == BinaryOpcode::times)
|
||||||
|
{
|
||||||
|
set<int> params;
|
||||||
|
auto *test_arg1 = dynamic_cast<VariableNode *>(arg1);
|
||||||
|
auto *test_arg2 = dynamic_cast<VariableNode *>(arg2);
|
||||||
|
if (test_arg1)
|
||||||
|
arg1->collectVariables(SymbolType::parameter, params);
|
||||||
|
else if (test_arg2)
|
||||||
|
arg2->collectVariables(SymbolType::parameter, params);
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (params.size() != 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
params.clear();
|
||||||
|
set<pair<int, int>> endogs, exogs;
|
||||||
|
if (test_arg1)
|
||||||
|
{
|
||||||
|
arg2->collectDynamicVariables(SymbolType::endogenous, endogs);
|
||||||
|
arg2->collectDynamicVariables(SymbolType::exogenous, exogs);
|
||||||
|
arg2->collectVariables(SymbolType::parameter, params);
|
||||||
|
if (params.size() == 0 && exogs.size() == 0 && endogs.size() >= 1)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arg1->collectDynamicVariables(SymbolType::endogenous, endogs);
|
||||||
|
arg1->collectDynamicVariables(SymbolType::exogenous, exogs);
|
||||||
|
arg1->collectVariables(SymbolType::parameter, params);
|
||||||
|
if (params.size() == 0 && exogs.size() == 0 && endogs.size() >= 1)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (op_code == BinaryOpcode::plus)
|
||||||
|
return arg1->isParamTimesEndogExpr() || arg2->isParamTimesEndogExpr();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BinaryOpNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
if (optim_part != nullptr && non_optim_part != nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (op_code == BinaryOpcode::times)
|
||||||
|
{
|
||||||
|
auto *test_arg1 = dynamic_cast<VariableNode *>(arg1);
|
||||||
|
auto *test_arg2 = dynamic_cast<VariableNode *>(arg2);
|
||||||
|
|
||||||
|
set<int> params1, params2;
|
||||||
|
arg1->collectVariables(SymbolType::parameter, params1);
|
||||||
|
arg2->collectVariables(SymbolType::parameter, params2);
|
||||||
|
if (optim_part == nullptr)
|
||||||
|
if (test_arg1 != nullptr || test_arg2 != nullptr)
|
||||||
|
if (params1.size() == 1 || params2.size() == 1)
|
||||||
|
if (arg2->isParamTimesEndogExpr())
|
||||||
|
{
|
||||||
|
// arg1 is the share of optimizing agents
|
||||||
|
optim_part = arg2;
|
||||||
|
optim_share.emplace(*(params1.begin()));
|
||||||
|
}
|
||||||
|
else if (arg1->isParamTimesEndogExpr())
|
||||||
|
{
|
||||||
|
optim_part = arg1;
|
||||||
|
optim_share.emplace(*(params2.begin()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (non_optim_part == nullptr)
|
||||||
|
if (params1.size() == 1 &&
|
||||||
|
arg1 == datatree.AddMinus(datatree.One, datatree.AddVariable(*(params1.begin()))))
|
||||||
|
// arg1 is the non-optimizing share
|
||||||
|
non_optim_part = arg2;
|
||||||
|
else if (params2.size() == 1 &&
|
||||||
|
arg2 == datatree.AddMinus(datatree.One, datatree.AddVariable(*(params2.begin()))))
|
||||||
|
non_optim_part = arg1;
|
||||||
|
}
|
||||||
|
else if (op_code == BinaryOpcode::plus)
|
||||||
|
{
|
||||||
|
arg1->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
arg2->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
}
|
||||||
|
else if (op_code == BinaryOpcode::divide)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cerr << "Notation error in PAC equation" << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BinaryOpNode::getPacLHS(pair<int, int> &lhs)
|
||||||
{
|
{
|
||||||
set<pair<int, int>> general_lhs;
|
set<pair<int, int>> general_lhs;
|
||||||
arg1->collectDynamicVariables(SymbolType::endogenous, general_lhs);
|
arg1->collectDynamicVariables(SymbolType::endogenous, general_lhs);
|
||||||
|
@ -5059,15 +5311,11 @@ BinaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<
|
||||||
lhs = *(general_lhs.begin());
|
lhs = *(general_lhs.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
arg1->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
|
||||||
arg2->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
BinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg)
|
||||||
{
|
{
|
||||||
arg1->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_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);
|
arg2->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg, params_vars_and_scaling_factor_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -5918,20 +6166,48 @@ TrinaryOpNode::isInStaticForm() const
|
||||||
return arg1->isInStaticForm() && arg2->isInStaticForm() && arg3->isInStaticForm();
|
return arg1->isInStaticForm() && arg2->isInStaticForm() && arg3->isInStaticForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
TrinaryOpNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
TrinaryOpNode::isParamTimesEndogExpr() const
|
||||||
{
|
{
|
||||||
arg1->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
return arg1->isParamTimesEndogExpr()
|
||||||
arg2->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
|| arg2->isParamTimesEndogExpr()
|
||||||
arg3->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
|| arg3->isParamTimesEndogExpr();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TrinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
TrinaryOpNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
{
|
{
|
||||||
arg1->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg);
|
arg1->getPacNonOptimizingPart(params_vars_and_scaling_factor);
|
||||||
arg2->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg);
|
arg2->getPacNonOptimizingPart(params_vars_and_scaling_factor);
|
||||||
arg3->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg);
|
arg3->getPacNonOptimizingPart(params_vars_and_scaling_factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TrinaryOpNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
|
{
|
||||||
|
arg1->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
arg2->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
arg3->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TrinaryOpNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
arg1->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
arg2->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
arg3->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TrinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -6416,18 +6692,43 @@ AbstractExternalFunctionNode::isInStaticForm() const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
AbstractExternalFunctionNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
AbstractExternalFunctionNode::isParamTimesEndogExpr() const
|
||||||
{
|
{
|
||||||
for (auto argument : arguments)
|
return false;
|
||||||
argument->walkPacParameters(pac_encountered, lhs, ec_params_and_vars, ar_params_and_vars);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AbstractExternalFunctionNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
AbstractExternalFunctionNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
cerr << "ERROR AbstractExternalFunctionNode::getPacNonOptimizingPart(: Error in parsing PAC equation"
|
||||||
|
<< endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AbstractExternalFunctionNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
{
|
{
|
||||||
for (auto argument : arguments)
|
for (auto argument : arguments)
|
||||||
argument->addParamInfoToPac(lhs_arg, ec_params_and_vars_arg, ar_params_and_vars_arg);
|
argument->getPacOptimizingPart(ec_params_and_vars, ar_params_and_vars);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AbstractExternalFunctionNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
for (auto argument : arguments)
|
||||||
|
argument->getPacOptimizingShareAndExprNodes(optim_share, optim_part, non_optim_part);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AbstractExternalFunctionNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -7960,13 +8261,36 @@ VarExpectationNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) c
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
VarExpectationNode::isParamTimesEndogExpr() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VarExpectationNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
VarExpectationNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
cerr << "ERROR VarExpectationNode::getPacNonOptimizingPart(: Error in parsing PAC equation"
|
||||||
|
<< endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VarExpectationNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
VarExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
VarExpectationNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
VarExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8093,6 +8417,45 @@ PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type,
|
||||||
output << " ";
|
output << " ";
|
||||||
output << it->second.second;
|
output << it->second.second;
|
||||||
}
|
}
|
||||||
|
output << "];" << endl
|
||||||
|
<< "M_.pac." << model_name << ".non_optim.params = [";
|
||||||
|
for (auto it = params_vars_and_scaling_factor.begin();
|
||||||
|
it != params_vars_and_scaling_factor.end(); it++)
|
||||||
|
{
|
||||||
|
if (it != params_vars_and_scaling_factor.begin())
|
||||||
|
output << " ";
|
||||||
|
if (it->first >= 0)
|
||||||
|
output << datatree.symbol_table.getTypeSpecificID(it->first) + 1;
|
||||||
|
else
|
||||||
|
output << "NaN";
|
||||||
|
}
|
||||||
|
output << "];" << endl
|
||||||
|
<< "M_.pac." << model_name << ".non_optim.vars = [";
|
||||||
|
for (auto it = params_vars_and_scaling_factor.begin();
|
||||||
|
it != params_vars_and_scaling_factor.end(); it++)
|
||||||
|
{
|
||||||
|
if (it != params_vars_and_scaling_factor.begin())
|
||||||
|
output << " ";
|
||||||
|
output << datatree.symbol_table.getTypeSpecificID(it->second.first.first) + 1;
|
||||||
|
}
|
||||||
|
output << "];" << endl
|
||||||
|
<< "M_.pac." << model_name << ".non_optim.lags = [";
|
||||||
|
for (auto it = params_vars_and_scaling_factor.begin();
|
||||||
|
it != params_vars_and_scaling_factor.end(); it++)
|
||||||
|
{
|
||||||
|
if (it != params_vars_and_scaling_factor.begin())
|
||||||
|
output << " ";
|
||||||
|
output << it->second.first.second;
|
||||||
|
}
|
||||||
|
output << "];" << endl
|
||||||
|
<< "M_.pac." << model_name << ".non_optim.scaling_factor = [";
|
||||||
|
for (auto it = params_vars_and_scaling_factor.begin();
|
||||||
|
it != params_vars_and_scaling_factor.end(); it++)
|
||||||
|
{
|
||||||
|
if (it != params_vars_and_scaling_factor.begin())
|
||||||
|
output << " ";
|
||||||
|
output << it->second.second;
|
||||||
|
}
|
||||||
output << "];" << endl
|
output << "];" << endl
|
||||||
<< "M_.pac." << model_name << ".h0_param_indices = [";
|
<< "M_.pac." << model_name << ".h0_param_indices = [";
|
||||||
for (auto it = h0_indices.begin();
|
for (auto it = h0_indices.begin();
|
||||||
|
@ -8423,14 +8786,33 @@ PacExpectationNode::writeJsonOutput(ostream &output,
|
||||||
<< ")";
|
<< ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
PacExpectationNode::walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
PacExpectationNode::isParamTimesEndogExpr() const
|
||||||
{
|
{
|
||||||
pac_encountered = true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PacExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg)
|
PacExpectationNode::getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PacExpectationNode::getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PacExpectationNode::getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PacExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg)
|
||||||
{
|
{
|
||||||
if (lhs_arg.first == -1)
|
if (lhs_arg.first == -1)
|
||||||
{
|
{
|
||||||
|
@ -8447,6 +8829,7 @@ PacExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pai
|
||||||
lhs_pac_var = lhs_arg;
|
lhs_pac_var = lhs_arg;
|
||||||
ar_params_and_vars = ar_params_and_vars_arg;
|
ar_params_and_vars = ar_params_and_vars_arg;
|
||||||
ec_params_and_vars = ec_params_and_vars_arg;
|
ec_params_and_vars = ec_params_and_vars_arg;
|
||||||
|
params_vars_and_scaling_factor = params_vars_and_scaling_factor_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
116
src/ExprNode.hh
116
src/ExprNode.hh
|
@ -527,10 +527,24 @@ class ExprNode
|
||||||
virtual bool isVarModelReferenced(const string &model_info_name) const = 0;
|
virtual bool isVarModelReferenced(const string &model_info_name) const = 0;
|
||||||
|
|
||||||
//! Fills parameter information related to PAC equation
|
//! Fills parameter information related to PAC equation
|
||||||
virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const = 0;
|
virtual void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const = 0;
|
||||||
|
|
||||||
|
//! Fills info for non optimizing part of PAC equation
|
||||||
|
virtual void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const = 0;
|
||||||
|
//! Returns true if expression is of the form:
|
||||||
|
//! param * (endog op endog op ...) + param * (endog op endog op ...) + ...
|
||||||
|
virtual bool isParamTimesEndogExpr() const = 0;
|
||||||
|
|
||||||
|
//! Finds the share of optimizing agents in the PAC equation,
|
||||||
|
//! the expr node associated with it,
|
||||||
|
//! and the expr node associated with the non-optimizing part
|
||||||
|
virtual void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const = 0;
|
||||||
//! Adds PAC equation param info to pac_expectation
|
//! Adds PAC equation param info to pac_expectation
|
||||||
virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) = 0;
|
virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) = 0;
|
||||||
|
|
||||||
//! Fills var_model info for pac_expectation node
|
//! Fills var_model info for pac_expectation node
|
||||||
virtual void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) = 0;
|
virtual void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) = 0;
|
||||||
|
@ -618,10 +632,17 @@ public:
|
||||||
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
virtual bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
expr_t substituteStaticAuxiliaryVariable() const override;
|
expr_t substituteStaticAuxiliaryVariable() const override;
|
||||||
|
@ -709,10 +730,17 @@ public:
|
||||||
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
//! Substitute auxiliary variables by their expression in static model
|
//! Substitute auxiliary variables by their expression in static model
|
||||||
|
@ -824,10 +852,17 @@ public:
|
||||||
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
//! Substitute auxiliary variables by their expression in static model
|
//! Substitute auxiliary variables by their expression in static model
|
||||||
|
@ -910,10 +945,15 @@ public:
|
||||||
{
|
{
|
||||||
return powerDerivOrder;
|
return powerDerivOrder;
|
||||||
}
|
}
|
||||||
void walkPacParametersHelper(const expr_t arg1, const expr_t arg2,
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
pair<int, int> &lhs,
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacNonOptimizingPartHelper(const expr_t arg1, const expr_t arg2,
|
||||||
|
set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const;
|
||||||
|
void getPacOptimizingPartHelper(const expr_t arg1, const expr_t arg2,
|
||||||
set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
set<pair<int, pair<int, int>>> &ar_params_and_vars) const;
|
set<pair<int, pair<int, int>>> &ar_params_and_vars) const;
|
||||||
|
void getPacLHS(pair<int, int> &lhs);
|
||||||
expr_t toStatic(DataTree &static_datatree) const override;
|
expr_t toStatic(DataTree &static_datatree) const override;
|
||||||
void computeXrefs(EquationInfo &ei) const override;
|
void computeXrefs(EquationInfo &ei) const override;
|
||||||
pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t>>> &List_of_Op_RHS) const override;
|
pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t>>> &List_of_Op_RHS) const override;
|
||||||
|
@ -961,10 +1001,15 @@ public:
|
||||||
//! Returns the non-zero hand-side of an equation (that must have a hand side equal to zero)
|
//! Returns the non-zero hand-side of an equation (that must have a hand side equal to zero)
|
||||||
expr_t getNonZeroPartofEquation() const;
|
expr_t getNonZeroPartofEquation() const;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> &ar_params_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
//! Substitute auxiliary variables by their expression in static model
|
//! Substitute auxiliary variables by their expression in static model
|
||||||
|
@ -1062,10 +1107,17 @@ public:
|
||||||
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
expr_t cloneDynamic(DataTree &dynamic_datatree) const override;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
//! Substitute auxiliary variables by their expression in static model
|
//! Substitute auxiliary variables by their expression in static model
|
||||||
|
@ -1175,10 +1227,17 @@ public:
|
||||||
expr_t cloneDynamic(DataTree &dynamic_datatree) const override = 0;
|
expr_t cloneDynamic(DataTree &dynamic_datatree) const override = 0;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
//! Substitute auxiliary variables by their expression in static model
|
//! Substitute auxiliary variables by their expression in static model
|
||||||
|
@ -1375,10 +1434,17 @@ public:
|
||||||
expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override;
|
expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
expr_t substituteStaticAuxiliaryVariable() const override;
|
expr_t substituteStaticAuxiliaryVariable() const override;
|
||||||
|
@ -1399,6 +1465,7 @@ private:
|
||||||
int growth_param_index, equation_number;
|
int growth_param_index, equation_number;
|
||||||
set<pair<int, pair<int, int>>> ec_params_and_vars;
|
set<pair<int, pair<int, int>>> ec_params_and_vars;
|
||||||
set<pair<int, pair<int, int>>> ar_params_and_vars;
|
set<pair<int, pair<int, int>>> ar_params_and_vars;
|
||||||
|
set<pair<int, pair<pair<int, int>, double>>> params_vars_and_scaling_factor;
|
||||||
public:
|
public:
|
||||||
PacExpectationNode(DataTree &datatree_arg, string model_name);
|
PacExpectationNode(DataTree &datatree_arg, string model_name);
|
||||||
void computeTemporaryTerms(map<expr_t, pair<int, NodeTreeReference>> &reference_count,
|
void computeTemporaryTerms(map<expr_t, pair<int, NodeTreeReference>> &reference_count,
|
||||||
|
@ -1461,10 +1528,17 @@ public:
|
||||||
expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override;
|
expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override;
|
||||||
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const override;
|
||||||
bool isInStaticForm() const override;
|
bool isInStaticForm() const override;
|
||||||
void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int>>> &ec_params_and_vars, set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg, set<pair<int, pair<pair<int, int>, double>>> ¶ms_vars_and_scaling_factor_arg) override;
|
||||||
void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int>>> &ec_params_and_vars_arg, set<pair<int, pair<int, int>>> ¶ms_and_vars_arg) override;
|
|
||||||
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
void fillPacExpectationVarInfo(string &model_name_arg, vector<int> &lhs_arg, int max_lag_arg, int pac_max_lag_arg, vector<bool> &nonstationary_arg, int growth_symb_id_arg, int equation_number_arg) override;
|
||||||
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
bool containsPacExpectation(const string &pac_model_name = "") const override;
|
||||||
|
void getPacNonOptimizingPart(set<pair<int, pair<pair<int, int>, double>>>
|
||||||
|
¶ms_vars_and_scaling_factor) const override;
|
||||||
|
void getPacOptimizingPart(set<pair<int, pair<int, int>>> &ec_params_and_vars,
|
||||||
|
set<pair<int, pair<int, int>>> ¶ms_and_vars) const override;
|
||||||
|
void getPacOptimizingShareAndExprNodes(set<int> &optim_share,
|
||||||
|
expr_t &optim_part,
|
||||||
|
expr_t &non_optim_part) const override;
|
||||||
|
bool isParamTimesEndogExpr() const override;
|
||||||
bool isVarModelReferenced(const string &model_info_name) const override;
|
bool isVarModelReferenced(const string &model_info_name) const override;
|
||||||
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override;
|
||||||
expr_t substituteStaticAuxiliaryVariable() const override;
|
expr_t substituteStaticAuxiliaryVariable() const override;
|
||||||
|
|
Loading…
Reference in New Issue