void CtrGenerator::visit(const P_OneConstraint& c) { int n=src_vars->size(); Array<const ExprSymbol> dest_vars(n); varcopy(*src_vars,dest_vars); const ExprNode& e=ExprGenerator(scopes.top()).generate(*src_vars, dest_vars, c.expr); ctrs->push_back(new NumConstraint(dest_vars, ExprCtr(e,c.op))); }
void BD_Factory::add_gaol(double f_RES) { Array<const ExprNode> new_args(sip.n_arg+sip.p_arg); int I=0; int J=0; for (int K=0; K<sip.n_arg+sip.p_arg; K++) { if (!sip.is_param[K]) new_args.set_ref(K,new_vars[I++]); else // necessary for applying goal function but ignored at the end // (there is no parameter in the goal function): new_args.set_ref(K,ExprConstant::new_(sip.p_domain[J++],true)); } const ExprNode* goal_node=&((*sip.sys.goal)(new_args)); if (problem==ORA) { const ExprConstant& f_RES_node=ExprConstant::new_scalar(f_RES); goal_node = &((*goal_node) - f_RES); add_ctr(ExprCtr(*goal_node,LEQ)); const ExprNode& minus_eta=-new_vars[sip.n_arg]; add_goal(minus_eta); delete &minus_eta; } else { add_goal(*goal_node); } // cleanup for (int K=0; K<sip.n_arg+sip.p_arg; K++) { if (sip.is_param[K]) { if (!new_args[K].fathers.is_empty()) ibex_error("parameters in the objective"); delete &new_args[K]; } } cleanup(*goal_node,false); f_ctrs_copy.clone.clean(); }