preprocessor: issue error when exogenous included in planner_objective. closes #1264
parent
726ad1b84c
commit
7680749130
|
@ -1254,6 +1254,13 @@ void
|
||||||
PlannerObjectiveStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
|
PlannerObjectiveStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings)
|
||||||
{
|
{
|
||||||
assert(model_tree->equation_number() == 1);
|
assert(model_tree->equation_number() == 1);
|
||||||
|
if (model_tree->exoPresentInEqs())
|
||||||
|
{
|
||||||
|
cerr << "ERROR: You cannot include exogenous variables in the planner objective. Please "
|
||||||
|
<< "define an auxiliary endogenous variable like eps_aux=epsilon and use it instead "
|
||||||
|
<< "of the varexo." << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
mod_file_struct.planner_objective_present = true;
|
mod_file_struct.planner_objective_present = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -478,6 +478,12 @@ NumConstNode::containsEndogenous(void) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
NumConstNode::containsExogenous() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
NumConstNode::replaceTrendVar() const
|
NumConstNode::replaceTrendVar() const
|
||||||
{
|
{
|
||||||
|
@ -1406,6 +1412,12 @@ VariableNode::containsEndogenous(void) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
VariableNode::containsExogenous() const
|
||||||
|
{
|
||||||
|
return (type == eExogenous || type == eExogenousDet);
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
VariableNode::replaceTrendVar() const
|
VariableNode::replaceTrendVar() const
|
||||||
{
|
{
|
||||||
|
@ -2525,6 +2537,12 @@ UnaryOpNode::containsEndogenous(void) const
|
||||||
return arg->containsEndogenous();
|
return arg->containsEndogenous();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
UnaryOpNode::containsExogenous() const
|
||||||
|
{
|
||||||
|
return arg->containsExogenous();
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
UnaryOpNode::replaceTrendVar() const
|
UnaryOpNode::replaceTrendVar() const
|
||||||
{
|
{
|
||||||
|
@ -3824,6 +3842,12 @@ BinaryOpNode::containsEndogenous(void) const
|
||||||
return (arg1->containsEndogenous() || arg2->containsEndogenous());
|
return (arg1->containsEndogenous() || arg2->containsEndogenous());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
BinaryOpNode::containsExogenous() const
|
||||||
|
{
|
||||||
|
return (arg1->containsExogenous() || arg2->containsExogenous());
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
BinaryOpNode::replaceTrendVar() const
|
BinaryOpNode::replaceTrendVar() const
|
||||||
{
|
{
|
||||||
|
@ -4487,6 +4511,12 @@ TrinaryOpNode::containsEndogenous(void) const
|
||||||
return (arg1->containsEndogenous() || arg2->containsEndogenous() || arg3->containsEndogenous());
|
return (arg1->containsEndogenous() || arg2->containsEndogenous() || arg3->containsEndogenous());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
TrinaryOpNode::containsExogenous() const
|
||||||
|
{
|
||||||
|
return (arg1->containsExogenous() || arg2->containsExogenous() || arg3->containsExogenous());
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
TrinaryOpNode::replaceTrendVar() const
|
TrinaryOpNode::replaceTrendVar() const
|
||||||
{
|
{
|
||||||
|
@ -4781,6 +4811,16 @@ AbstractExternalFunctionNode::containsEndogenous(void) const
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
AbstractExternalFunctionNode::containsExogenous() const
|
||||||
|
{
|
||||||
|
for (vector<expr_t>::const_iterator it = arguments.begin();
|
||||||
|
it != arguments.end(); it++)
|
||||||
|
if ((*it)->containsExogenous())
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
AbstractExternalFunctionNode::replaceTrendVar() const
|
AbstractExternalFunctionNode::replaceTrendVar() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -416,6 +416,9 @@ public:
|
||||||
//! Returns true if the expression contains one or several endogenous variable
|
//! Returns true if the expression contains one or several endogenous variable
|
||||||
virtual bool containsEndogenous(void) const = 0;
|
virtual bool containsEndogenous(void) const = 0;
|
||||||
|
|
||||||
|
//! Returns true if the expression contains one or several exogenous variable
|
||||||
|
virtual bool containsExogenous() const = 0;
|
||||||
|
|
||||||
//! Return true if the nodeID is a variable withe a type equal to type_arg, a specific variable id aqual to varfiable_id and a lag equal to lag_arg and false otherwise
|
//! Return true if the nodeID is a variable withe a type equal to type_arg, a specific variable id aqual to varfiable_id and a lag equal to lag_arg and false otherwise
|
||||||
/*!
|
/*!
|
||||||
\param[in] the type (type_arg), specifique variable id (variable_id and the lag (lag_arg)
|
\param[in] the type (type_arg), specifique variable id (variable_id and the lag (lag_arg)
|
||||||
|
@ -499,6 +502,7 @@ public:
|
||||||
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
||||||
virtual bool isNumConstNodeEqualTo(double value) const;
|
virtual bool isNumConstNodeEqualTo(double value) const;
|
||||||
virtual bool containsEndogenous(void) const;
|
virtual bool containsEndogenous(void) const;
|
||||||
|
virtual bool containsExogenous() const;
|
||||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
|
@ -564,6 +568,7 @@ public:
|
||||||
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
||||||
virtual bool isNumConstNodeEqualTo(double value) const;
|
virtual bool isNumConstNodeEqualTo(double value) const;
|
||||||
virtual bool containsEndogenous(void) const;
|
virtual bool containsEndogenous(void) const;
|
||||||
|
virtual bool containsExogenous() const;
|
||||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
|
@ -649,6 +654,7 @@ public:
|
||||||
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
||||||
virtual bool isNumConstNodeEqualTo(double value) const;
|
virtual bool isNumConstNodeEqualTo(double value) const;
|
||||||
virtual bool containsEndogenous(void) const;
|
virtual bool containsEndogenous(void) const;
|
||||||
|
virtual bool containsExogenous() const;
|
||||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
|
@ -747,6 +753,7 @@ public:
|
||||||
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
||||||
virtual bool isNumConstNodeEqualTo(double value) const;
|
virtual bool isNumConstNodeEqualTo(double value) const;
|
||||||
virtual bool containsEndogenous(void) const;
|
virtual bool containsEndogenous(void) const;
|
||||||
|
virtual bool containsExogenous() const;
|
||||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
|
@ -827,6 +834,7 @@ public:
|
||||||
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
||||||
virtual bool isNumConstNodeEqualTo(double value) const;
|
virtual bool isNumConstNodeEqualTo(double value) const;
|
||||||
virtual bool containsEndogenous(void) const;
|
virtual bool containsEndogenous(void) const;
|
||||||
|
virtual bool containsExogenous() const;
|
||||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
|
@ -907,6 +915,7 @@ public:
|
||||||
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const;
|
||||||
virtual bool isNumConstNodeEqualTo(double value) const;
|
virtual bool isNumConstNodeEqualTo(double value) const;
|
||||||
virtual bool containsEndogenous(void) const;
|
virtual bool containsEndogenous(void) const;
|
||||||
|
virtual bool containsExogenous() const;
|
||||||
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
virtual bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const;
|
||||||
virtual void writePrhs(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const string &ending) const;
|
virtual void writePrhs(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms, const string &ending) const;
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
|
|
|
@ -1747,6 +1747,15 @@ StaticModel::writeStaticFile(const string &basename, bool block, bool bytecode,
|
||||||
writeSetAuxiliaryVariables(basename, julia);
|
writeSetAuxiliaryVariables(basename, julia);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
StaticModel::exoPresentInEqs() const
|
||||||
|
{
|
||||||
|
for (int i = 0; i < (int) equations.size(); i++)
|
||||||
|
if (equations[i]->containsExogenous())
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StaticModel::writeStaticBlockMFSFile(const string &basename) const
|
StaticModel::writeStaticBlockMFSFile(const string &basename) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -186,6 +186,10 @@ public:
|
||||||
void writeSetAuxiliaryVariables(const string &basename, const bool julia) const;
|
void writeSetAuxiliaryVariables(const string &basename, const bool julia) const;
|
||||||
void writeAuxVarRecursiveDefinitions(ostream &output, ExprNodeOutputType output_type) const;
|
void writeAuxVarRecursiveDefinitions(ostream &output, ExprNodeOutputType output_type) const;
|
||||||
|
|
||||||
|
//! To ensure that no exogenous is present in the planner objective
|
||||||
|
//! See #1264
|
||||||
|
bool exoPresentInEqs() const;
|
||||||
|
|
||||||
virtual int getDerivID(int symb_id, int lag) const throw (UnknownDerivIDException);
|
virtual int getDerivID(int symb_id, int lag) const throw (UnknownDerivIDException);
|
||||||
virtual void addAllParamDerivId(set<int> &deriv_id_set);
|
virtual void addAllParamDerivId(set<int> &deriv_id_set);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue