26 #include "bonmin_nlp.hpp"
27 #include "bonmin_interface.hpp"
28 #include "casadi/core/timing.hpp"
33 : solver_(solver), mem_(mem) {
43 Index& nnz_h_lag, TNLP::IndexStyleEnum& index_style) {
47 index_style = TNLP::C_STYLE;
54 Index m, Number* g_l, Number* g_u) {
55 casadi_assert_dev(n==solver_.
nx_);
56 casadi_assert_dev(m==solver_.
ng_);
62 bool init_z, Number* z_L, Number* z_U,
63 Index m,
bool init_lambda,
65 casadi_assert_dev(n==solver_.
nx_);
66 casadi_assert_dev(m==solver_.
ng_);
67 return solver_.
get_starting_point(mem_, init_x, x, init_z, z_L, z_U, init_lambda, lambda);
74 mem_->
res[0] = &obj_value;
78 casadi_warning(
"KeyboardInterruptException");
80 }
catch (std::exception& ex) {
82 casadi_warning(
"BonminUserClass::nlp_f failed:" + std::string(ex.
what()));
92 mem_->
res[0] =
nullptr;
93 mem_->
res[1] = grad_f;
97 casadi_warning(
"KeyboardInterruptException");
99 }
catch (std::exception& ex) {
101 casadi_warning(
"BonminUserClass::eval_grad_f failed:" + std::string(ex.
what()));
115 casadi_warning(
"KeyboardInterruptException");
117 }
catch (std::exception& ex) {
119 casadi_warning(
"BonminUserClass::eval_g failed:" + std::string(ex.
what()));
127 Index m, Index nele_jac, Index* iRow, Index *jCol,
133 mem_->
res[0] =
nullptr;
134 mem_->
res[1] = values;
138 casadi_warning(
"KeyboardInterruptException");
140 }
catch (std::exception& ex) {
142 casadi_warning(
"BonminUserClass::eval_jac_g failed:" + std::string(ex.
what()));
151 if (nele_jac!=colind[ncol])
return false;
154 for (casadi_int cc=0; cc<ncol; ++cc) {
155 for (casadi_int el=colind[cc]; el<colind[cc+1]; ++el) {
166 Number obj_factor, Index m,
const Number* lambda,
167 bool new_lambda, Index nele_hess, Index* iRow,
168 Index* jCol, Number* values) {
173 mem_->
arg[2] = &obj_factor;
174 mem_->
arg[3] = lambda;
175 mem_->
res[0] = values;
179 casadi_warning(
"KeyboardInterruptException");
181 }
catch (std::exception& ex) {
183 casadi_warning(
"BonminUserClass::eval_h failed:" + std::string(ex.
what()));
194 for (casadi_int cc=0; cc<ncol; ++cc) {
195 for (casadi_int el=colind[cc]; el<colind[cc+1]; ++el) {
205 Ipopt::Index n,
const Ipopt::Number* x, Ipopt::Number obj_value) {
211 Number inf_pr, Number inf_du,
212 Number mu, Number d_norm,
213 Number regularization_size,
214 Number alpha_du, Number alpha_pr,
216 const IpoptData* ip_data,
217 IpoptCalculatedQuantities* ip_cq) {
226 bool full_callback =
false;
229 inf_pr, inf_du, mu, d_norm, regularization_size,
230 alpha_du, alpha_pr, ls_trials, full_callback);
238 Index* pos_nonlin_vars) {
246 if (solver_.
discrete_.size()!=n)
return false;
255 casadi_assert_dev(n==solver_.
nl_ex_.size());
256 for (casadi_int i=0; i<n; ++i)
257 var_types[i] = solver_.
nl_ex_[i] ? Ipopt::TNLP::NON_LINEAR : Ipopt::TNLP::LINEAR;
262 casadi_assert_dev(m==solver_.
nl_g_.size());
263 for (casadi_int i=0; i<m; ++i)
264 const_types[i] = solver_.
nl_g_[i] ? Ipopt::TNLP::NON_LINEAR : Ipopt::TNLP::LINEAR;
'bonmin' plugin for Nlpsol
std::vector< bool > nl_g_
bool get_list_of_nonlinear_variables(int num_nonlin_vars, int *pos_nonlin_vars) const
void finalize_solution(BonminMemory *m, Bonmin::TMINLP::SolverReturn status, const double *x, double obj_value) const
const Bonmin::TMINLP::SosInfo & sosConstraints(BonminMemory *m) const
bool get_starting_point(BonminMemory *m, bool init_x, double *x, bool init_z, double *z_L, double *z_U, bool init_lambda, double *lambda) const
int get_number_of_nonlinear_variables() const
std::vector< bool > nl_ex_
void get_nlp_info(BonminMemory *m, int &nx, int &ng, int &nnz_jac_g, int &nnz_h_lag) const
bool intermediate_callback(BonminMemory *m, const double *x, const double *z_L, const double *z_U, const double *g, const double *lambda, double obj_value, int iter, double inf_pr, double inf_du, double mu, double d_norm, double regularization_size, double alpha_du, double alpha_pr, int ls_trials, bool full_callback) const
bool get_bounds_info(BonminMemory *m, double *x_l, double *x_u, double *g_l, double *g_u) const
virtual bool intermediate_callback(AlgorithmMode mode, Index iter, Number obj_value, Number inf_pr, Number inf_du, Number mu, Number d_norm, Number regularization_size, Number alpha_du, Number alpha_pr, Index ls_trials, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
bool get_variables_linearity(Index n, Ipopt::TNLP::LinearityType *var_types) override
BonminUserClass(const BonminInterface &bonminInterface, BonminMemory *mem)
bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, TNLP::IndexStyleEnum &index_style) 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
bool get_variables_types(Index n, VariableType *var_types) override
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
virtual bool get_list_of_nonlinear_variables(Index num_nonlin_vars, Index *pos_nonlin_vars)
bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values) 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
const SosInfo * sosConstraints() const override
void finalize_solution(TMINLP::SolverReturn status, Index n, const Number *x, Number obj_value) override
~BonminUserClass() override
bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g) override
bool get_constraints_linearity(Index m, Ipopt::TNLP::LinearityType *const_types) override
virtual Index get_number_of_nonlinear_variables()
bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value) override
const char * what() const override
Display error.
casadi_int ng_
Number of constraints.
casadi_int callback_step_
Execute the callback function only after this amount of iterations.
std::vector< bool > discrete_
Options.
casadi_int nx_
Number of variables.
int calc_function(OracleMemory *m, const std::string &fcn, const double *const *arg=nullptr, int thread_id=0) const
bool show_eval_warnings_
Show evaluation warnings.
casadi_int size2() const
Get the number of columns.
const casadi_int * row() const
Get a reference to row-vector,.
const casadi_int * colind() const
Get a reference to the colindex of all column element (see class description)
casadi_nlpsol_data< double > d_nlp