48 uno_constraints_jacobian_callback
jac_cb;
77 uno_int casadi_uno_obj_wrapper(uno_int n,
const T1* x, T1* fval,
void* user_data) {
81 d_oracle->
arg[1] = d->
nlp.p;
82 d_oracle->
res[0] = fval;
83 return calc_function(&d->
prob->nlp_f, d_oracle) == 0 ? 0 : 1;
89 uno_int casadi_uno_obj_grad_wrapper(uno_int n,
const T1* x, T1* grad,
void* user_data) {
93 d_oracle->
arg[1] = d->
nlp.p;
94 d_oracle->
res[0] = grad;
95 return calc_function(&d->
prob->nlp_grad_f, d_oracle) == 0 ? 0 : 1;
100 template<
typename T1>
101 uno_int casadi_uno_constr_wrapper(uno_int n, uno_int ng,
const T1* x, T1* gval,
void* user_data) {
104 d_oracle->
arg[0] = x;
105 d_oracle->
arg[1] = d->
nlp.p;
106 d_oracle->
res[0] = gval;
107 return calc_function(&d->
prob->nlp_g, d_oracle) == 0 ? 0 : 1;
112 template<
typename T1>
113 uno_int casadi_uno_jac_wrapper(uno_int n, uno_int nnz,
const T1* x, T1* jvals,
void* user_data) {
116 d_oracle->
arg[0] = x;
117 d_oracle->
arg[1] = d->
nlp.p;
118 d_oracle->
res[0] = jvals;
119 return calc_function(&d->
prob->nlp_jac_g, d_oracle) == 0 ? 0 : 1;
124 template<
typename T1>
125 uno_int casadi_uno_hess_wrapper(uno_int n, uno_int ng, uno_int nnz,
126 const T1* x, T1 obj_mult,
const T1* mults, T1* hvals,
void* user_data) {
129 d_oracle->
arg[0] = x;
130 d_oracle->
arg[1] = d->
nlp.p;
131 d_oracle->
arg[2] = &obj_mult;
132 d_oracle->
arg[3] = mults;
133 d_oracle->
res[0] = hvals;
134 return calc_function(&d->
prob->nlp_hess_l, d_oracle) == 0 ? 0 : 1;
139 template<
typename T1>
140 uno_int casadi_uno_hess_prod_wrapper(uno_int n, uno_int ng,
const T1* x,
141 bool evaluate_at_x, T1 obj_mult,
const T1* mults,
const T1* vec,
142 T1* result,
void* user_data) {
145 d_oracle->
arg[0] = x;
146 d_oracle->
arg[1] = d->
nlp.p;
147 d_oracle->
arg[2] = &obj_mult;
148 d_oracle->
arg[3] = mults;
149 d_oracle->
arg[4] = 0;
150 d_oracle->
arg[5] = vec;
151 d_oracle->
arg[6] = 0;
152 d_oracle->
arg[7] = 0;
153 d_oracle->
arg[8] = 0;
154 d_oracle->
res[0] = result;
155 return calc_function(&d->
prob->fwd1_nlp_grad_l, d_oracle) == 0 ? 0 : 1;
160 template<
typename T1>
161 uno_int casadi_uno_term_cb(uno_int n, uno_int ng,
const T1* primals,
162 const T1* lower_mult,
const T1* upper_mult,
const T1* constr_mult,
163 T1 obj_mult, T1 inf_pr, T1 inf_du, T1 compl_res,
void* user_data) {
169 template<
typename T1>
171 d->
solver = uno_create_solver();
172 uno_set_solver_callbacks(d->
solver, 0, &casadi_uno_term_cb<T1>, d);
180 template<
typename T1>
182 const T1* lb_g,
const T1* ub_g) {
184 uno_int nx =
static_cast<uno_int
>(p->
nlp.nx);
185 uno_int ng =
static_cast<uno_int
>(p->
nlp.ng);
187 d->
model = uno_create_unconstrained_model(UNO_PROBLEM_NONLINEAR, nx, UNO_ZERO_BASED_INDEXING);
188 uno_set_user_data(d->
model, d);
194 uno_set_lagrangian_hessian(d->
model, p->
n_hess, UNO_UPPER_TRIANGLE,
196 uno_set_lagrangian_sign_convention(d->
model, UNO_MULTIPLIER_POSITIVE);
201 template<
typename T1>
210 template<
typename T1>
212 casadi_int** iw, T1** w) {
220 template<
typename T1>
224 uno_int nx =
static_cast<uno_int
>(p->
nlp.nx);
225 uno_int ng =
static_cast<uno_int
>(p->
nlp.ng);
231 casadi_uno_init_model(d, d_nlp->
lbz + nx, d_nlp->
ubz + nx);
234 uno_set_variables_lower_bounds(d->
model, d_nlp->
lbz);
235 uno_set_variables_upper_bounds(d->
model, d_nlp->
ubz);
237 uno_set_constraints_lower_bounds(d->
model, d_nlp->
lbz + nx);
238 uno_set_constraints_upper_bounds(d->
model, d_nlp->
ubz + nx);
240 uno_set_initial_primal_iterate(d->
model, d_nlp->
x0);
244 uno_get_primal_solution(d->
solver, d_nlp->
z);
245 uno_get_constraint_dual_solution(d->
solver, d_nlp->
lam + nx);
246 for (i = 0; i < nx; ++i) {
248 d_nlp->
lam[i] = uno_get_lower_bound_dual_solution_component(d->
solver, i)
249 + uno_get_upper_bound_dual_solution_component(d->
solver, i);
257 uno_int opt = uno_get_optimization_status(d->
solver);
258 uno_int sol = uno_get_solution_status(d->
solver);
259 d->
success = (opt == UNO_SUCCESS && sol == UNO_FEASIBLE_KKT_POINT) ? 1 : 0;
const casadi_uno_prob< T1 > * prob
casadi_nlpsol_data< T1 > nlp
int unified_return_status
casadi_oracle_data< T1 > d_oracle
uno_lagrangian_hessian_operator_callback hess_prod_cb
OracleCallback nlp_grad_f
uno_lagrangian_hessian_callback hess_cb
OracleCallback nlp_hess_l
uno_constraints_callback constr_cb
casadi_nlpsol_prob< T1 > nlp
uno_objective_callback obj_cb
OracleCallback fwd1_nlp_grad_l
uno_constraints_jacobian_callback jac_cb
uno_objective_gradient_callback obj_grad_cb