46 n = _problem->getParameterDimension();
49 m = _problem->getEqualityDimension() + _problem->getInequalityDimension();
52 nnz_jac_g = _solver->_nnz_jac_constraints;
54 if (_solver->_cache_first_order_derivatives)
56 _solver->_grad_f_cache.resize(n);
57 _solver->_jac_constr_cache.resize(nnz_jac_g);
64 nnz_h_lag = _solver->_nnz_h_lagrangian;
67 index_style = TNLP::C_STYLE;
77 assert(n == _problem->getParameterDimension());
78 assert(m == _problem->getEqualityDimension() + _problem->getInequalityDimension());
83 _problem->getBounds(x_l_map, x_u_map);
90 g_l_map.head(_problem->getEqualityDimension()).fill(0);
91 g_u_map.head(_problem->getEqualityDimension()).fill(0);
92 g_l_map.tail(_problem->getInequalityDimension()).fill(-
CORBO_INF_DBL);
93 g_u_map.tail(_problem->getInequalityDimension()).fill(0);
104 assert(init_x ==
true);
108 _problem->getParameterVector(x_map);
113 lambda_map = _solver->_lambda_cache;
119 zl_map = _solver->_zl_cache;
121 zu_map = _solver->_zu_cache;
130 assert(n == _problem->getParameterDimension());
137 _problem->setParameterVector(x_map);
139 if (_solver->_cache_first_order_derivatives) precompute1stOrderDerivatives();
142 obj_value = _problem->computeValueObjective();
149 assert(n == _problem->getParameterDimension());
156 _problem->setParameterVector(x_map);
158 if (_solver->_cache_first_order_derivatives) precompute1stOrderDerivatives();
162 if (_solver->_cache_first_order_derivatives)
163 grad_f_map = _solver->_grad_f_cache;
165 _problem->computeGradientObjective(grad_f_map);
173 assert(n == _problem->getParameterDimension());
174 assert(m == _problem->getEqualityDimension() + _problem->getInequalityDimension());
181 _problem->setParameterVector(x_map);
183 if (_solver->_cache_first_order_derivatives) precompute1stOrderDerivatives();
187 _problem->computeValuesEquality(g_map.head(_problem->getEqualityDimension()));
188 _problem->computeValuesInequality(g_map.tail(_problem->getInequalityDimension()));
196 assert(nele_jac == _solver->_nnz_jac_constraints);
203 _problem->computeCombinedSparseJacobiansStructure(i_row_map, j_col_map,
false,
true,
true);
214 _problem->setParameterVector(x_map);
216 if (_solver->_cache_first_order_derivatives) precompute1stOrderDerivatives();
219 if (_solver->_cache_first_order_derivatives)
220 values_map = _solver->_jac_constr_cache;
222 _problem->computeCombinedSparseJacobiansValues(values_map,
false,
true,
true);
235 assert(nele_hess == _solver->_nnz_h_lagrangian);
236 assert(nele_hess = _solver->_nnz_hes_obj + _solver->_nnz_hes_eq + _solver->_nnz_hes_ineq);
249 _problem->computeSparseHessiansStructure(i_row_map_obj, j_col_map_obj, i_row_map_eq, j_col_map_eq, i_row_map_ineq, j_col_map_ineq,
true);
261 _problem->setParameterVector(x_map);
263 if (_solver->_cache_first_order_derivatives) precompute1stOrderDerivatives();
270 _problem->computeSparseHessiansValues(values_obj_map, values_eq_map, values_ineq_map, obj_factor, lambda,
271 lambda + _problem->getEqualityDimension(),
true);
279 const Number* lambda, Number obj_value,
const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq)
282 _problem->setParameterVector(x_map);
284 _solver->_last_obj_value = obj_value;
287 _solver->_lambda_cache = lambda_map;
290 _solver->_zl_cache = zl_map;
293 _solver->_zu_cache = zu_map;
298 _problem->computeGradientObjectiveAndCombinedSparseJacobiansValues(_solver->_grad_f_cache, _solver->_jac_constr_cache,
true,
true);
A matrix or vector expression mapping an existing array of data.
bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style) override
IpoptWrapper(SolverIpopt *solver)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u) override
bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f) override
constexpr const double CORBO_INF_DBL
Representation for infinity (double version)
void precompute1stOrderDerivatives()
bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value) override
bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g) override
bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values) override
void finalize_solution(SolverReturn status, Index n, const Number *x, const Number *z_L, const Number *z_U, Index m, const Number *g, const Number *lambda, Number obj_value, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq) override
bool get_starting_point(Index n, bool init_x, Number *x, bool init_z, Number *z_L, Number *z_U, Index m, bool init_lambda, Number *lambda) override
bool eval_h(Index n, const Number *x, bool new_x, Number obj_factor, Index m, const Number *lambda, bool new_lambda, Index nele_hess, Index *iRow, Index *jCol, Number *values) override