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::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()
{ {

View File

@ -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()

View File

@ -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;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View File

@ -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*/