add optimal policy
git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@457 ac1d8469-bf42-47a9-8791-bf33cf982152time-shift
parent
1eb9483cc5
commit
6a200bfca0
|
@ -21,15 +21,17 @@ int ModelParameters::static_nbr = 0;
|
||||||
int ModelParameters::forward_nbr = 0;
|
int ModelParameters::forward_nbr = 0;
|
||||||
int ModelParameters::both_nbr = 0;
|
int ModelParameters::both_nbr = 0;
|
||||||
int ModelParameters::recur_nbr = 0;
|
int ModelParameters::recur_nbr = 0;
|
||||||
int ModelParameters::max_lag=INT_MIN;
|
int ModelParameters::max_lag = 0;
|
||||||
int ModelParameters::max_lead=INT_MIN;
|
int ModelParameters::max_lead = 0;
|
||||||
|
int ModelParameters::max_endo_lag = 0;
|
||||||
|
int ModelParameters::max_endo_lead = 0;
|
||||||
|
int ModelParameters::max_exo_lag = 0;
|
||||||
|
int ModelParameters::max_exo_lead = 0;
|
||||||
|
int ModelParameters::max_exo_det_lag = 0;
|
||||||
|
int ModelParameters::max_exo_det_lead = 0;
|
||||||
|
int ModelParameters::max_recur_lag = 0;
|
||||||
|
int ModelParameters::max_recur_lead = 0;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
//int ModelParameters::endo_min_lag=INT_MAX;
|
|
||||||
//int ModelParameters::endo_max_lag=INT_MIN;
|
|
||||||
//int ModelParameters::exo_min_lag=INT_MAX;
|
|
||||||
//int ModelParameters::exo_max_lag=INT_MIN;
|
|
||||||
//int ModelParameters::recur_min_lag=INT_MAX;
|
|
||||||
//int ModelParameters::recur_max_lag=INT_MIN;
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
ModelParameters::ModelParameters()
|
ModelParameters::ModelParameters()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1012,6 +1012,7 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
|
||||||
|
|
||||||
stack_token.push(StartID);
|
stack_token.push(StartID);
|
||||||
int precedence_last_op = operator_table.precedence(StartID->op_code);
|
int precedence_last_op = operator_table.precedence(StartID->op_code);
|
||||||
|
int last_op_code = 0;
|
||||||
|
|
||||||
while (stack_token.size() > 0)
|
while (stack_token.size() > 0)
|
||||||
{
|
{
|
||||||
|
@ -1042,17 +1043,17 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
|
||||||
{
|
{
|
||||||
// if current operator is not a temporary variable and
|
// if current operator is not a temporary variable and
|
||||||
// of lesser precedence than previous one, insert '('
|
// of lesser precedence than previous one, insert '('
|
||||||
if ( precedence_current_op < precedence_last_op )
|
if ( precedence_current_op < precedence_last_op ||
|
||||||
{
|
(last_op_code == MINUS &
|
||||||
exp << "(";
|
precedence_current_op == precedence_last_op) ||
|
||||||
}
|
current_op_code == UMINUS)
|
||||||
if ( current_op_code == UMINUS)
|
|
||||||
{
|
{
|
||||||
exp << "(";
|
exp << "(";
|
||||||
}
|
}
|
||||||
// set flag: left argument has been explored
|
// set flag: left argument has been explored
|
||||||
current_token_ID->left_done = 1;
|
current_token_ID->left_done = 1;
|
||||||
precedence_last_op = precedence_current_op;
|
precedence_last_op = precedence_current_op;
|
||||||
|
last_op_code = current_op_code;
|
||||||
if ( offset == 0 && current_op_code == POWER)
|
if ( offset == 0 && current_op_code == POWER)
|
||||||
{
|
{
|
||||||
exp << "pow(";
|
exp << "pow(";
|
||||||
|
@ -1093,12 +1094,15 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
|
||||||
{
|
{
|
||||||
if ( (offset == 0 && current_op_code == POWER) ||
|
if ( (offset == 0 && current_op_code == POWER) ||
|
||||||
( precedence_current_op > precedence_last_op &&
|
( precedence_current_op > precedence_last_op &&
|
||||||
operator_table.isfunction(current_op_code) == false) ||
|
operator_table.isfunction(current_op_code) == false) ||
|
||||||
|
(current_op_code == MINUS &&
|
||||||
|
precedence_current_op == precedence_last_op) ||
|
||||||
current_op_code == UMINUS)
|
current_op_code == UMINUS)
|
||||||
{
|
{
|
||||||
exp << ")";
|
exp << ")";
|
||||||
}
|
}
|
||||||
precedence_last_op = precedence_current_op;
|
precedence_last_op = precedence_current_op;
|
||||||
|
last_op_code = current_op_code;
|
||||||
current_token_ID->left_done=0;
|
current_token_ID->left_done=0;
|
||||||
current_token_ID->right_done=0;
|
current_token_ID->right_done=0;
|
||||||
stack_token.pop();
|
stack_token.pop();
|
||||||
|
@ -1406,16 +1410,45 @@ void ModelTree::ModelInitialization(void)
|
||||||
output << "M_.exo_names_orig_ord = [1:" << ModelParameters::exo_nbr << "];\n";
|
output << "M_.exo_names_orig_ord = [1:" << ModelParameters::exo_nbr << "];\n";
|
||||||
output << "M_.maximum_lag = " << ModelParameters::max_lag << ";\n";
|
output << "M_.maximum_lag = " << ModelParameters::max_lag << ";\n";
|
||||||
output << "M_.maximum_lead = " << ModelParameters::max_lead<< ";\n";
|
output << "M_.maximum_lead = " << ModelParameters::max_lead<< ";\n";
|
||||||
|
if (ModelParameters::exo_nbr > 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if (ModelParameters::exo_nbr > 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if (ModelParameters::exo_nbr > 0)
|
||||||
|
{
|
||||||
|
output << "M_.maximum_exo_lag = " << ModelParameters::max_exo_lag << ";\n";
|
||||||
|
output << "M_.maximum_exo_lead = " << ModelParameters::max_exo_lead<< ";\n";
|
||||||
|
}
|
||||||
if (ModelParameters::endo_nbr)
|
if (ModelParameters::endo_nbr)
|
||||||
output << "oo_.steady_state = zeros(" << ModelParameters::endo_nbr << ", 1);\n";
|
{
|
||||||
|
output << "M_.maximum_endo_lag = " << ModelParameters::max_endo_lag << ";\n";
|
||||||
|
output << "M_.maximum_endo_lead = " << ModelParameters::max_endo_lead<< ";\n";
|
||||||
|
output << "oo_.steady_state = zeros(" << ModelParameters::endo_nbr << ", 1);\n";
|
||||||
|
}
|
||||||
if (ModelParameters::exo_nbr)
|
if (ModelParameters::exo_nbr)
|
||||||
output << "oo_.exo_steady_state = zeros(" << ModelParameters::exo_nbr << ", 1);\n";
|
{
|
||||||
|
output << "M_.maximum_exo_lag = " << ModelParameters::max_exo_lag << ";\n";
|
||||||
|
output << "M_.maximum_exo_lead = " << ModelParameters::max_exo_lead<< ";\n";
|
||||||
|
output << "oo_.exo_steady_state = zeros(" << ModelParameters::exo_nbr << ", 1);\n";
|
||||||
|
}
|
||||||
|
if (ModelParameters::exo_det_nbr)
|
||||||
|
{
|
||||||
|
output << "M_.maximum_exo_det_lag = " << ModelParameters::max_exo_det_lag << ";\n";
|
||||||
|
output << "M_.maximum_exo_det_lead = " << ModelParameters::max_exo_det_lead<< ";\n";
|
||||||
|
output << "oo_.exo_det_steadystate = zeros(" << ModelParameters::exo_det_nbr << ", 1);\n";
|
||||||
|
}
|
||||||
|
if (ModelParameters::recur_nbr)
|
||||||
|
{
|
||||||
|
output << "M_.maximum_recur_lag = " << ModelParameters::max_recur_lag << ";\n";
|
||||||
|
output << "M_.maximum_recur_lead = " << ModelParameters::max_recur_lead<< ";\n";
|
||||||
|
output << "oo_.recur_steadystate = zeros(" << ModelParameters::recur_nbr << ", 1);\n";
|
||||||
|
}
|
||||||
if (ModelParameters::parameter_nbr)
|
if (ModelParameters::parameter_nbr)
|
||||||
output << "M_.params = zeros(" << ModelParameters::parameter_nbr << ", 1);\n";
|
{
|
||||||
if (ModelParameters::exo_det_nbr)
|
output << "M_.params = zeros(" << ModelParameters::parameter_nbr << ", 1);\n";
|
||||||
output << "oo_exdet_ = zeros(" << ModelParameters::exo_det_nbr << ", 1);\n";
|
}
|
||||||
if (ModelParameters::exo_det_nbr)
|
|
||||||
output << "oo_exedet_ = zeros(" << ModelParameters::exo_det_nbr << ", 1);\n";
|
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
string ModelTree::get()
|
string ModelTree::get()
|
||||||
|
|
|
@ -62,10 +62,56 @@ int VariableTable::AddVariable(string iName, int iLag)
|
||||||
if (type == eEndogenous) ModelParameters::var_endo_nbr++;
|
if (type == eEndogenous) ModelParameters::var_endo_nbr++;
|
||||||
if (type == eExogenous) ModelParameters::var_exo_nbr++;
|
if (type == eExogenous) ModelParameters::var_exo_nbr++;
|
||||||
// Setting Maximum and minimum lags
|
// Setting Maximum and minimum lags
|
||||||
if (ModelParameters::max_lead < iLag && iLag >= 0)
|
if (ModelParameters::max_lead < iLag)
|
||||||
ModelParameters::max_lead = iLag;
|
{
|
||||||
if (ModelParameters::max_lag < -iLag && iLag <= 0)
|
ModelParameters::max_lead = iLag;
|
||||||
ModelParameters::max_lag = -iLag;
|
}
|
||||||
|
else if (-ModelParameters::max_lag > iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_lag = -iLag;
|
||||||
|
}
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case eEndogenous:
|
||||||
|
if (ModelParameters::max_endo_lead < iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_endo_lead = iLag;
|
||||||
|
}
|
||||||
|
else if (-ModelParameters::max_endo_lag > iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_endo_lag = -iLag;
|
||||||
|
}
|
||||||
|
case eExogenous:
|
||||||
|
if (ModelParameters::max_exo_lead < iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_exo_lead = iLag;
|
||||||
|
}
|
||||||
|
else if (-ModelParameters::max_exo_lag > iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_exo_lag = -iLag;
|
||||||
|
}
|
||||||
|
case eExogenousDet:
|
||||||
|
if (ModelParameters::max_exo_det_lead < iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_exo_det_lead = iLag;
|
||||||
|
}
|
||||||
|
else if (-ModelParameters::max_exo_det_lag > iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_exo_det_lag = -iLag;
|
||||||
|
}
|
||||||
|
case eRecursiveVariable:
|
||||||
|
if (ModelParameters::max_recur_lead < iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_recur_lead = iLag;
|
||||||
|
}
|
||||||
|
else if (-ModelParameters::max_recur_lag > iLag)
|
||||||
|
{
|
||||||
|
ModelParameters::max_recur_lag = -iLag;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
return mVariableIndex.size()-1;
|
return mVariableIndex.size()-1;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
|
@ -49,6 +49,15 @@ class ModelParameters
|
||||||
|
|
||||||
static int max_lag;
|
static int max_lag;
|
||||||
static int max_lead;
|
static int max_lead;
|
||||||
|
static int max_endo_lag;
|
||||||
|
static int max_endo_lead;
|
||||||
|
static int max_exo_lag;
|
||||||
|
static int max_exo_lead;
|
||||||
|
static int max_exo_det_lag;
|
||||||
|
static int max_exo_det_lead;
|
||||||
|
static int max_recur_lag;
|
||||||
|
static int max_recur_lead;
|
||||||
|
|
||||||
/*! Minimum lag for endogenous variables */
|
/*! Minimum lag for endogenous variables */
|
||||||
//static int endo_min_lag;
|
//static int endo_min_lag;
|
||||||
/*! Maximum lag for endogenous variables*/
|
/*! Maximum lag for endogenous variables*/
|
||||||
|
|
Loading…
Reference in New Issue