add optimal policy

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@457 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
michel 2005-09-20 16:16:19 +00:00
parent 1eb9483cc5
commit 6a200bfca0
4 changed files with 115 additions and 25 deletions

View File

@ -21,15 +21,17 @@ int ModelParameters::static_nbr = 0;
int ModelParameters::forward_nbr = 0;
int ModelParameters::both_nbr = 0;
int ModelParameters::recur_nbr = 0;
int ModelParameters::max_lag=INT_MIN;
int ModelParameters::max_lead=INT_MIN;
int ModelParameters::max_lag = 0;
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;
//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()
{

View File

@ -1012,6 +1012,7 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
stack_token.push(StartID);
int precedence_last_op = operator_table.precedence(StartID->op_code);
int last_op_code = 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
// of lesser precedence than previous one, insert '('
if ( precedence_current_op < precedence_last_op )
{
exp << "(";
}
if ( current_op_code == UMINUS)
if ( precedence_current_op < precedence_last_op ||
(last_op_code == MINUS &
precedence_current_op == precedence_last_op) ||
current_op_code == UMINUS)
{
exp << "(";
}
// set flag: left argument has been explored
current_token_ID->left_done = 1;
precedence_last_op = precedence_current_op;
last_op_code = current_op_code;
if ( offset == 0 && current_op_code == POWER)
{
exp << "pow(";
@ -1093,12 +1094,15 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy
{
if ( (offset == 0 && current_op_code == POWER) ||
( 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)
{
exp << ")";
}
precedence_last_op = precedence_current_op;
last_op_code = current_op_code;
current_token_ID->left_done=0;
current_token_ID->right_done=0;
stack_token.pop();
@ -1406,16 +1410,45 @@ void ModelTree::ModelInitialization(void)
output << "M_.exo_names_orig_ord = [1:" << ModelParameters::exo_nbr << "];\n";
output << "M_.maximum_lag = " << ModelParameters::max_lag << ";\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)
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)
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)
output << "M_.params = zeros(" << ModelParameters::parameter_nbr << ", 1);\n";
if (ModelParameters::exo_det_nbr)
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";
{
output << "M_.params = zeros(" << ModelParameters::parameter_nbr << ", 1);\n";
}
}
//------------------------------------------------------------------------------
string ModelTree::get()

View File

@ -62,10 +62,56 @@ int VariableTable::AddVariable(string iName, int iLag)
if (type == eEndogenous) ModelParameters::var_endo_nbr++;
if (type == eExogenous) ModelParameters::var_exo_nbr++;
// Setting Maximum and minimum lags
if (ModelParameters::max_lead < iLag && iLag >= 0)
ModelParameters::max_lead = iLag;
if (ModelParameters::max_lag < -iLag && iLag <= 0)
ModelParameters::max_lag = -iLag;
if (ModelParameters::max_lead < iLag)
{
ModelParameters::max_lead = 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;
}
//------------------------------------------------------------------------------

View File

@ -49,6 +49,15 @@ class ModelParameters
static int max_lag;
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 */
//static int endo_min_lag;
/*! Maximum lag for endogenous variables*/