Lines Matching refs:opt

32 #define ERR(err, opt, msg) (nlopt_set_errmsg(opt, msg) ? err : err)  argument
36 void NLOPT_STDCALL nlopt_destroy(nlopt_opt opt) in nlopt_destroy() argument
38 if (opt) { in nlopt_destroy()
40 if (opt->munge_on_destroy) { in nlopt_destroy()
41 nlopt_munge munge = opt->munge_on_destroy; in nlopt_destroy()
42 munge(opt->f_data); in nlopt_destroy()
43 for (i = 0; i < opt->m; ++i) in nlopt_destroy()
44 munge(opt->fc[i].f_data); in nlopt_destroy()
45 for (i = 0; i < opt->p; ++i) in nlopt_destroy()
46 munge(opt->h[i].f_data); in nlopt_destroy()
48 for (i = 0; i < opt->m; ++i) in nlopt_destroy()
49 free(opt->fc[i].tol); in nlopt_destroy()
50 for (i = 0; i < opt->p; ++i) in nlopt_destroy()
51 free(opt->h[i].tol); in nlopt_destroy()
52 for (i = 0; i < opt->nparams; ++i) in nlopt_destroy()
53 free(opt->params[i].name); in nlopt_destroy()
54 free(opt->params); in nlopt_destroy()
55 free(opt->lb); in nlopt_destroy()
56 free(opt->ub); in nlopt_destroy()
57 free(opt->xtol_abs); in nlopt_destroy()
58 free(opt->x_weights); in nlopt_destroy()
59 free(opt->fc); in nlopt_destroy()
60 free(opt->h); in nlopt_destroy()
61 nlopt_destroy(opt->local_opt); in nlopt_destroy()
62 free(opt->dx); in nlopt_destroy()
63 free(opt->work); in nlopt_destroy()
64 free(opt->errmsg); in nlopt_destroy()
65 free(opt); in nlopt_destroy()
71 nlopt_opt opt; in nlopt_create() local
76 opt = (nlopt_opt) malloc(sizeof(struct nlopt_opt_s)); in nlopt_create()
77 if (opt) { in nlopt_create()
78 opt->algorithm = algorithm; in nlopt_create()
79 opt->n = n; in nlopt_create()
80 opt->f = NULL; in nlopt_create()
81 opt->f_data = NULL; in nlopt_create()
82 opt->pre = NULL; in nlopt_create()
83 opt->maximize = 0; in nlopt_create()
84 opt->munge_on_destroy = opt->munge_on_copy = NULL; in nlopt_create()
86 opt->lb = opt->ub = NULL; in nlopt_create()
87 opt->m = opt->m_alloc = 0; in nlopt_create()
88 opt->fc = NULL; in nlopt_create()
89 opt->p = opt->p_alloc = 0; in nlopt_create()
90 opt->h = NULL; in nlopt_create()
91 opt->params = NULL; in nlopt_create()
92 opt->nparams = 0; in nlopt_create()
94 opt->stopval = -HUGE_VAL; in nlopt_create()
95 opt->ftol_rel = opt->ftol_abs = 0; in nlopt_create()
96 opt->xtol_rel = 0; in nlopt_create()
97 opt->x_weights = NULL; in nlopt_create()
98 opt->xtol_abs = NULL; in nlopt_create()
99 opt->maxeval = 0; in nlopt_create()
100 opt->numevals = 0; in nlopt_create()
101 opt->maxtime = 0; in nlopt_create()
102 opt->force_stop = 0; in nlopt_create()
103 opt->force_stop_child = NULL; in nlopt_create()
105 opt->local_opt = NULL; in nlopt_create()
106 opt->stochastic_population = 0; in nlopt_create()
107 opt->vector_storage = 0; in nlopt_create()
108 opt->dx = NULL; in nlopt_create()
109 opt->work = NULL; in nlopt_create()
110 opt->errmsg = NULL; in nlopt_create()
113 opt->lb = (double *) calloc(n, sizeof(double)); in nlopt_create()
114 if (!opt->lb) in nlopt_create()
116 opt->ub = (double *) calloc(n, sizeof(double)); in nlopt_create()
117 if (!opt->ub) in nlopt_create()
119 nlopt_set_lower_bounds1(opt, -HUGE_VAL); in nlopt_create()
120 nlopt_set_upper_bounds1(opt, +HUGE_VAL); in nlopt_create()
124 return opt; in nlopt_create()
127 nlopt_destroy(opt); in nlopt_create()
131 nlopt_opt NLOPT_STDCALL nlopt_copy(const nlopt_opt opt) in nlopt_copy() argument
135 if (opt) { in nlopt_copy()
138 *nopt = *opt; in nlopt_copy()
155 if (opt->n > 0) { in nlopt_copy()
156 nopt->lb = (double *) malloc(sizeof(double) * (opt->n)); in nlopt_copy()
157 if (!opt->lb) in nlopt_copy()
159 nopt->ub = (double *) malloc(sizeof(double) * (opt->n)); in nlopt_copy()
160 if (!opt->ub) in nlopt_copy()
162 if (opt->xtol_abs) { in nlopt_copy()
163 nopt->xtol_abs = (double *) malloc(sizeof(double) * (opt->n)); in nlopt_copy()
164 if (!opt->xtol_abs) in nlopt_copy()
167 if (opt->x_weights) { in nlopt_copy()
168 nopt->x_weights = (double *) malloc(sizeof(double) * (opt->n)); in nlopt_copy()
169 if (!opt->x_weights) in nlopt_copy()
171 memcpy(nopt->x_weights, opt->x_weights, sizeof(double) * (opt->n)); in nlopt_copy()
174 memcpy(nopt->lb, opt->lb, sizeof(double) * (opt->n)); in nlopt_copy()
175 memcpy(nopt->ub, opt->ub, sizeof(double) * (opt->n)); in nlopt_copy()
176 if (opt->xtol_abs) { in nlopt_copy()
177 memcpy(nopt->xtol_abs, opt->xtol_abs, sizeof(double) * (opt->n)); in nlopt_copy()
181 if (opt->m) { in nlopt_copy()
182 nopt->m_alloc = opt->m; in nlopt_copy()
184 * (opt->m)); in nlopt_copy()
187 memcpy(nopt->fc, opt->fc, sizeof(nlopt_constraint) * (opt->m)); in nlopt_copy()
188 for (i = 0; i < opt->m; ++i) in nlopt_copy()
191 for (i = 0; i < opt->m; ++i) in nlopt_copy()
194 for (i = 0; i < opt->m; ++i) in nlopt_copy()
195 if (opt->fc[i].tol) { in nlopt_copy()
200 memcpy(nopt->fc[i].tol, opt->fc[i].tol, sizeof(double) * nopt->fc[i].m); in nlopt_copy()
204 if (opt->p) { in nlopt_copy()
205 nopt->p_alloc = opt->p; in nlopt_copy()
207 * (opt->p)); in nlopt_copy()
210 memcpy(nopt->h, opt->h, sizeof(nlopt_constraint) * (opt->p)); in nlopt_copy()
211 for (i = 0; i < opt->p; ++i) in nlopt_copy()
214 for (i = 0; i < opt->p; ++i) in nlopt_copy()
217 for (i = 0; i < opt->p; ++i) in nlopt_copy()
218 if (opt->h[i].tol) { in nlopt_copy()
223 memcpy(nopt->h[i].tol, opt->h[i].tol, sizeof(double) * nopt->h[i].m); in nlopt_copy()
227 if (opt->nparams) { in nlopt_copy()
228 nopt->nparams = opt->nparams; in nlopt_copy()
229 nopt->params = (nlopt_opt_param *) calloc(opt->nparams, sizeof(nlopt_opt_param)); in nlopt_copy()
231 for (i = 0; i < opt->nparams; ++i) { in nlopt_copy()
232 size_t len = strlen(opt->params[i].name) + 1; in nlopt_copy()
235 memcpy(nopt->params[i].name, opt->params[i].name, len); in nlopt_copy()
236 nopt->params[i].val = opt->params[i].val; in nlopt_copy()
240 if (opt->local_opt) { in nlopt_copy()
241 nopt->local_opt = nlopt_copy(opt->local_opt); in nlopt_copy()
246 if (opt->dx) { in nlopt_copy()
247 nopt->dx = (double *) malloc(sizeof(double) * (opt->n)); in nlopt_copy()
250 memcpy(nopt->dx, opt->dx, sizeof(double) * (opt->n)); in nlopt_copy()
268 nlopt_result nlopt_set_param(nlopt_opt opt, const char *name, double val) { in nlopt_set_param() argument
271 if (!opt) RETURN_ERR(NLOPT_INVALID_ARGS, opt, "invalid NULL opt"); in nlopt_set_param()
272 if (!name) RETURN_ERR(NLOPT_INVALID_ARGS, opt, "invalid NULL parameter name"); in nlopt_set_param()
274 if (len > 1024) RETURN_ERR(NLOPT_INVALID_ARGS, opt, "parameter name must be < 1024 bytes"); in nlopt_set_param()
275 for (i = 0; i < opt->nparams; ++i) in nlopt_set_param()
276 if (!strcmp(name, opt->params[i].name)) in nlopt_set_param()
278 if (i == opt->nparams) { /* allocate new parameter */ in nlopt_set_param()
279 opt->nparams++; in nlopt_set_param()
280opt->params = (nlopt_opt_param *) realloc(opt->params, sizeof(nlopt_opt_param) * opt->nparams); in nlopt_set_param()
281 if (!opt->params) return NLOPT_OUT_OF_MEMORY; in nlopt_set_param()
282 opt->params[i].name = (char *) malloc(len); in nlopt_set_param()
283 if (!opt->params[i].name) return NLOPT_OUT_OF_MEMORY; in nlopt_set_param()
284 memcpy(opt->params[i].name, name, len); in nlopt_set_param()
286 opt->params[i].val = val; in nlopt_set_param()
290 double nlopt_get_param(const nlopt_opt opt, const char *name, double defaultval) in nlopt_get_param() argument
293 if (!opt || !name || strnlen(name, 1024) == 1024) return defaultval; in nlopt_get_param()
294 for (i = 0; i < opt->nparams; ++i) in nlopt_get_param()
295 if (!strcmp(name, opt->params[i].name)) in nlopt_get_param()
296 return opt->params[i].val; in nlopt_get_param()
300 int nlopt_has_param(const nlopt_opt opt, const char *name) in nlopt_has_param() argument
303 if (!opt || !name || strnlen(name, 1024) == 1024) return 0; in nlopt_has_param()
304 for (i = 0; i < opt->nparams; ++i) in nlopt_has_param()
305 if (!strcmp(name, opt->params[i].name)) in nlopt_has_param()
310 unsigned nlopt_num_params(const nlopt_opt opt) in nlopt_num_params() argument
312 return opt ? opt->nparams : 0; in nlopt_num_params()
315 const char *nlopt_nth_param(const nlopt_opt opt, unsigned n) in nlopt_nth_param() argument
317 return opt && n < opt->nparams ? opt->params[n].name : NULL; in nlopt_nth_param()
322 nlopt_result NLOPT_STDCALL nlopt_set_precond_min_objective(nlopt_opt opt, nlopt_func f, nlopt_preco… in nlopt_set_precond_min_objective() argument
324 if (opt) { in nlopt_set_precond_min_objective()
325 nlopt_unset_errmsg(opt); in nlopt_set_precond_min_objective()
326 if (opt->munge_on_destroy) in nlopt_set_precond_min_objective()
327 opt->munge_on_destroy(opt->f_data); in nlopt_set_precond_min_objective()
328 opt->f = f; in nlopt_set_precond_min_objective()
329 opt->f_data = f_data; in nlopt_set_precond_min_objective()
330 opt->pre = pre; in nlopt_set_precond_min_objective()
331 opt->maximize = 0; in nlopt_set_precond_min_objective()
332 if (nlopt_isinf(opt->stopval) && opt->stopval > 0) in nlopt_set_precond_min_objective()
333 opt->stopval = -HUGE_VAL; /* switch default from max to min */ in nlopt_set_precond_min_objective()
339 nlopt_result NLOPT_STDCALL nlopt_set_min_objective(nlopt_opt opt, nlopt_func f, void *f_data) in nlopt_set_min_objective() argument
341 return nlopt_set_precond_min_objective(opt, f, NULL, f_data); in nlopt_set_min_objective()
344 nlopt_result NLOPT_STDCALL nlopt_set_precond_max_objective(nlopt_opt opt, nlopt_func f, nlopt_preco… in nlopt_set_precond_max_objective() argument
346 if (opt) { in nlopt_set_precond_max_objective()
347 nlopt_unset_errmsg(opt); in nlopt_set_precond_max_objective()
348 if (opt->munge_on_destroy) in nlopt_set_precond_max_objective()
349 opt->munge_on_destroy(opt->f_data); in nlopt_set_precond_max_objective()
350 opt->f = f; in nlopt_set_precond_max_objective()
351 opt->f_data = f_data; in nlopt_set_precond_max_objective()
352 opt->pre = pre; in nlopt_set_precond_max_objective()
353 opt->maximize = 1; in nlopt_set_precond_max_objective()
354 if (nlopt_isinf(opt->stopval) && opt->stopval < 0) in nlopt_set_precond_max_objective()
355 opt->stopval = +HUGE_VAL; /* switch default from min to max */ in nlopt_set_precond_max_objective()
361 nlopt_result NLOPT_STDCALL nlopt_set_max_objective(nlopt_opt opt, nlopt_func f, void *f_data) in nlopt_set_max_objective() argument
363 return nlopt_set_precond_max_objective(opt, f, NULL, f_data); in nlopt_set_max_objective()
368 nlopt_result NLOPT_STDCALL nlopt_set_lower_bounds(nlopt_opt opt, const double *lb) in nlopt_set_lower_bounds() argument
370 nlopt_unset_errmsg(opt); in nlopt_set_lower_bounds()
371 if (opt && (opt->n == 0 || lb)) { in nlopt_set_lower_bounds()
373 if (opt->n > 0) in nlopt_set_lower_bounds()
374 memcpy(opt->lb, lb, sizeof(double) * (opt->n)); in nlopt_set_lower_bounds()
375 for (i = 0; i < opt->n; ++i) in nlopt_set_lower_bounds()
376 if (opt->lb[i] < opt->ub[i] && nlopt_istiny(opt->ub[i] - opt->lb[i])) in nlopt_set_lower_bounds()
377 opt->lb[i] = opt->ub[i]; in nlopt_set_lower_bounds()
383 nlopt_result NLOPT_STDCALL nlopt_set_lower_bounds1(nlopt_opt opt, double lb) in nlopt_set_lower_bounds1() argument
385 nlopt_unset_errmsg(opt); in nlopt_set_lower_bounds1()
386 if (opt) { in nlopt_set_lower_bounds1()
388 for (i = 0; i < opt->n; ++i) { in nlopt_set_lower_bounds1()
389 opt->lb[i] = lb; in nlopt_set_lower_bounds1()
390 if (opt->lb[i] < opt->ub[i] && nlopt_istiny(opt->ub[i] - opt->lb[i])) in nlopt_set_lower_bounds1()
391 opt->lb[i] = opt->ub[i]; in nlopt_set_lower_bounds1()
398 nlopt_result NLOPT_STDCALL nlopt_set_lower_bound(nlopt_opt opt, int i, double lb) in nlopt_set_lower_bound() argument
400 nlopt_unset_errmsg(opt); in nlopt_set_lower_bound()
401 if (opt) { in nlopt_set_lower_bound()
402 if (i < 0 || i >= (int) opt->n) in nlopt_set_lower_bound()
403 return ERR(NLOPT_INVALID_ARGS, opt, "invalid bound index"); in nlopt_set_lower_bound()
404 opt->lb[i] = lb; in nlopt_set_lower_bound()
405 if (opt->lb[i] < opt->ub[i] && nlopt_istiny(opt->ub[i] - opt->lb[i])) in nlopt_set_lower_bound()
406 opt->lb[i] = opt->ub[i]; in nlopt_set_lower_bound()
412 nlopt_result NLOPT_STDCALL nlopt_get_lower_bounds(const nlopt_opt opt, double *lb) in nlopt_get_lower_bounds() argument
414 nlopt_unset_errmsg(opt); in nlopt_get_lower_bounds()
415 if (opt && (opt->n == 0 || lb)) { in nlopt_get_lower_bounds()
416 memcpy(lb, opt->lb, sizeof(double) * (opt->n)); in nlopt_get_lower_bounds()
422 nlopt_result NLOPT_STDCALL nlopt_set_upper_bounds(nlopt_opt opt, const double *ub) in nlopt_set_upper_bounds() argument
424 nlopt_unset_errmsg(opt); in nlopt_set_upper_bounds()
425 if (opt && (opt->n == 0 || ub)) { in nlopt_set_upper_bounds()
427 if (opt->n > 0) in nlopt_set_upper_bounds()
428 memcpy(opt->ub, ub, sizeof(double) * (opt->n)); in nlopt_set_upper_bounds()
429 for (i = 0; i < opt->n; ++i) in nlopt_set_upper_bounds()
430 if (opt->lb[i] < opt->ub[i] && nlopt_istiny(opt->ub[i] - opt->lb[i])) in nlopt_set_upper_bounds()
431 opt->ub[i] = opt->lb[i]; in nlopt_set_upper_bounds()
437 nlopt_result NLOPT_STDCALL nlopt_set_upper_bounds1(nlopt_opt opt, double ub) in nlopt_set_upper_bounds1() argument
439 nlopt_unset_errmsg(opt); in nlopt_set_upper_bounds1()
440 if (opt) { in nlopt_set_upper_bounds1()
442 for (i = 0; i < opt->n; ++i) { in nlopt_set_upper_bounds1()
443 opt->ub[i] = ub; in nlopt_set_upper_bounds1()
444 if (opt->lb[i] < opt->ub[i] && nlopt_istiny(opt->ub[i] - opt->lb[i])) in nlopt_set_upper_bounds1()
445 opt->ub[i] = opt->lb[i]; in nlopt_set_upper_bounds1()
452 nlopt_result NLOPT_STDCALL nlopt_set_upper_bound(nlopt_opt opt, int i, double ub) in nlopt_set_upper_bound() argument
454 nlopt_unset_errmsg(opt); in nlopt_set_upper_bound()
455 if (opt) { in nlopt_set_upper_bound()
456 if (i < 0 || i >= (int) opt->n) in nlopt_set_upper_bound()
457 return ERR(NLOPT_INVALID_ARGS, opt, "invalid bound index"); in nlopt_set_upper_bound()
458 opt->ub[i] = ub; in nlopt_set_upper_bound()
459 if (opt->lb[i] < opt->ub[i] && nlopt_istiny(opt->ub[i] - opt->lb[i])) in nlopt_set_upper_bound()
460 opt->ub[i] = opt->lb[i]; in nlopt_set_upper_bound()
466 nlopt_result NLOPT_STDCALL nlopt_get_upper_bounds(const nlopt_opt opt, double *ub) in nlopt_get_upper_bounds() argument
468 nlopt_unset_errmsg(opt); in nlopt_get_upper_bounds()
469 if (opt && (opt->n == 0 || ub)) { in nlopt_get_upper_bounds()
470 memcpy(ub, opt->ub, sizeof(double) * (opt->n)); in nlopt_get_upper_bounds()
485 nlopt_result NLOPT_STDCALL nlopt_remove_inequality_constraints(nlopt_opt opt) in nlopt_remove_inequality_constraints() argument
488 nlopt_unset_errmsg(opt); in nlopt_remove_inequality_constraints()
489 if (!opt) in nlopt_remove_inequality_constraints()
491 if (opt->munge_on_destroy) { in nlopt_remove_inequality_constraints()
492 nlopt_munge munge = opt->munge_on_destroy; in nlopt_remove_inequality_constraints()
493 for (i = 0; i < opt->m; ++i) in nlopt_remove_inequality_constraints()
494 munge(opt->fc[i].f_data); in nlopt_remove_inequality_constraints()
496 for (i = 0; i < opt->m; ++i) in nlopt_remove_inequality_constraints()
497 free(opt->fc[i].tol); in nlopt_remove_inequality_constraints()
498 free(opt->fc); in nlopt_remove_inequality_constraints()
499 opt->fc = NULL; in nlopt_remove_inequality_constraints()
500 opt->m = opt->m_alloc = 0; in nlopt_remove_inequality_constraints()
504 static nlopt_result add_constraint(nlopt_opt opt, in add_constraint() argument
515 return ERR(NLOPT_INVALID_ARGS, opt, "negative constraint tolerance"); in add_constraint()
556 nlopt_result NLOPT_STDCALL nlopt_add_inequality_mconstraint(nlopt_opt opt, unsigned m, nlopt_mfunc … in nlopt_add_inequality_mconstraint() argument
559 nlopt_unset_errmsg(opt); in nlopt_add_inequality_mconstraint()
561 if (opt && opt->munge_on_destroy) in nlopt_add_inequality_mconstraint()
562 opt->munge_on_destroy(fc_data); in nlopt_add_inequality_mconstraint()
565 if (!opt) in nlopt_add_inequality_mconstraint()
567 else if (!inequality_ok(opt->algorithm)) in nlopt_add_inequality_mconstraint()
568 ret = ERR(NLOPT_INVALID_ARGS, opt, "invalid algorithm for constraints"); in nlopt_add_inequality_mconstraint()
570 … ret = add_constraint(opt, &opt->m, &opt->m_alloc, &opt->fc, m, NULL, fc, NULL, fc_data, tol); in nlopt_add_inequality_mconstraint()
571 if (ret < 0 && opt && opt->munge_on_destroy) in nlopt_add_inequality_mconstraint()
572 opt->munge_on_destroy(fc_data); in nlopt_add_inequality_mconstraint()
576 nlopt_result NLOPT_STDCALL nlopt_add_precond_inequality_constraint(nlopt_opt opt, nlopt_func fc, nl… in nlopt_add_precond_inequality_constraint() argument
579 nlopt_unset_errmsg(opt); in nlopt_add_precond_inequality_constraint()
580 if (!opt) in nlopt_add_precond_inequality_constraint()
582 else if (!inequality_ok(opt->algorithm)) in nlopt_add_precond_inequality_constraint()
583 ret = ERR(NLOPT_INVALID_ARGS, opt, "invalid algorithm for constraints"); in nlopt_add_precond_inequality_constraint()
585 … ret = add_constraint(opt, &opt->m, &opt->m_alloc, &opt->fc, 1, fc, NULL, pre, fc_data, &tol); in nlopt_add_precond_inequality_constraint()
586 if (ret < 0 && opt && opt->munge_on_destroy) in nlopt_add_precond_inequality_constraint()
587 opt->munge_on_destroy(fc_data); in nlopt_add_precond_inequality_constraint()
591 nlopt_result NLOPT_STDCALL nlopt_add_inequality_constraint(nlopt_opt opt, nlopt_func fc, void *fc_d… in nlopt_add_inequality_constraint() argument
593 return nlopt_add_precond_inequality_constraint(opt, fc, NULL, fc_data, tol); in nlopt_add_inequality_constraint()
596 nlopt_result NLOPT_STDCALL nlopt_remove_equality_constraints(nlopt_opt opt) in nlopt_remove_equality_constraints() argument
599 nlopt_unset_errmsg(opt); in nlopt_remove_equality_constraints()
600 if (!opt) in nlopt_remove_equality_constraints()
602 if (opt->munge_on_destroy) { in nlopt_remove_equality_constraints()
603 nlopt_munge munge = opt->munge_on_destroy; in nlopt_remove_equality_constraints()
604 for (i = 0; i < opt->p; ++i) in nlopt_remove_equality_constraints()
605 munge(opt->h[i].f_data); in nlopt_remove_equality_constraints()
607 for (i = 0; i < opt->p; ++i) in nlopt_remove_equality_constraints()
608 free(opt->h[i].tol); in nlopt_remove_equality_constraints()
609 free(opt->h); in nlopt_remove_equality_constraints()
610 opt->h = NULL; in nlopt_remove_equality_constraints()
611 opt->p = opt->p_alloc = 0; in nlopt_remove_equality_constraints()
622 nlopt_result NLOPT_STDCALL nlopt_add_equality_mconstraint(nlopt_opt opt, unsigned m, nlopt_mfunc fc… in nlopt_add_equality_mconstraint() argument
625 nlopt_unset_errmsg(opt); in nlopt_add_equality_mconstraint()
627 if (opt && opt->munge_on_destroy) in nlopt_add_equality_mconstraint()
628 opt->munge_on_destroy(fc_data); in nlopt_add_equality_mconstraint()
631 if (!opt) in nlopt_add_equality_mconstraint()
633 else if (!equality_ok(opt->algorithm)) in nlopt_add_equality_mconstraint()
634 ret = ERR(NLOPT_INVALID_ARGS, opt, "invalid algorithm for constraints"); in nlopt_add_equality_mconstraint()
635 else if (nlopt_count_constraints(opt->p, opt->h) + m > opt->n) in nlopt_add_equality_mconstraint()
636 ret = ERR(NLOPT_INVALID_ARGS, opt, "too many equality constraints"); in nlopt_add_equality_mconstraint()
638 ret = add_constraint(opt, &opt->p, &opt->p_alloc, &opt->h, m, NULL, fc, NULL, fc_data, tol); in nlopt_add_equality_mconstraint()
639 if (ret < 0 && opt && opt->munge_on_destroy) in nlopt_add_equality_mconstraint()
640 opt->munge_on_destroy(fc_data); in nlopt_add_equality_mconstraint()
644 nlopt_result NLOPT_STDCALL nlopt_add_precond_equality_constraint(nlopt_opt opt, nlopt_func fc, nlop… in nlopt_add_precond_equality_constraint() argument
647 nlopt_unset_errmsg(opt); in nlopt_add_precond_equality_constraint()
648 if (!opt) in nlopt_add_precond_equality_constraint()
650 else if (!equality_ok(opt->algorithm)) in nlopt_add_precond_equality_constraint()
651 ret = ERR(NLOPT_INVALID_ARGS, opt, "invalid algorithm for constraints"); in nlopt_add_precond_equality_constraint()
652 else if (nlopt_count_constraints(opt->p, opt->h) + 1 > opt->n) in nlopt_add_precond_equality_constraint()
653 ret = ERR(NLOPT_INVALID_ARGS, opt, "too many equality constraints"); in nlopt_add_precond_equality_constraint()
655 ret = add_constraint(opt, &opt->p, &opt->p_alloc, &opt->h, 1, fc, NULL, pre, fc_data, &tol); in nlopt_add_precond_equality_constraint()
656 if (ret < 0 && opt && opt->munge_on_destroy) in nlopt_add_precond_equality_constraint()
657 opt->munge_on_destroy(fc_data); in nlopt_add_precond_equality_constraint()
661 nlopt_result NLOPT_STDCALL nlopt_add_equality_constraint(nlopt_opt opt, nlopt_func fc, void *fc_dat… in nlopt_add_equality_constraint() argument
663 return nlopt_add_precond_equality_constraint(opt, fc, NULL, fc_data, tol); in nlopt_add_equality_constraint()
669 nlopt_result NLOPT_STDCALL nlopt_set_##param(nlopt_opt opt, T arg) \
671 if (opt) { \
672 nlopt_unset_errmsg(opt); \
673 opt->arg = arg; \
681 nlopt_get_##param(const nlopt_opt opt) { \
682 return opt->arg; \
690 nlopt_result NLOPT_STDCALL nlopt_set_xtol_abs(nlopt_opt opt, const double *xtol_abs) in GETSET()
692 if (opt) { in GETSET()
693 nlopt_unset_errmsg(opt); in GETSET()
694 if (!opt->xtol_abs && opt->n > 0) { in GETSET()
695 opt->xtol_abs = (double *) calloc(opt->n, sizeof(double)); in GETSET()
696 if (!opt->xtol_abs) return NLOPT_OUT_OF_MEMORY; in GETSET()
698 memcpy(opt->xtol_abs, xtol_abs, opt->n * sizeof(double)); in GETSET()
704 nlopt_result NLOPT_STDCALL nlopt_set_xtol_abs1(nlopt_opt opt, double xtol_abs) in nlopt_set_xtol_abs1() argument
706 if (opt) { in nlopt_set_xtol_abs1()
708 nlopt_unset_errmsg(opt); in nlopt_set_xtol_abs1()
709 if (!opt->xtol_abs && opt->n > 0) { in nlopt_set_xtol_abs1()
710 opt->xtol_abs = (double *) calloc(opt->n, sizeof(double)); in nlopt_set_xtol_abs1()
711 if (!opt->xtol_abs) return NLOPT_OUT_OF_MEMORY; in nlopt_set_xtol_abs1()
713 for (i = 0; i < opt->n; ++i) in nlopt_set_xtol_abs1()
714 opt->xtol_abs[i] = xtol_abs; in nlopt_set_xtol_abs1()
720 nlopt_result NLOPT_STDCALL nlopt_get_xtol_abs(const nlopt_opt opt, double *xtol_abs) in nlopt_get_xtol_abs() argument
722 nlopt_unset_errmsg(opt); in nlopt_get_xtol_abs()
723 if (opt && (opt->n == 0 || xtol_abs)) { in nlopt_get_xtol_abs()
724 if (opt->xtol_abs) { in nlopt_get_xtol_abs()
725 memcpy(xtol_abs, opt->xtol_abs, sizeof(double) * (opt->n)); in nlopt_get_xtol_abs()
728 for (i = 0; i < opt->n; ++i) in nlopt_get_xtol_abs()
736 nlopt_result NLOPT_STDCALL nlopt_set_x_weights(nlopt_opt opt, const double *x_weights) in nlopt_set_x_weights() argument
738 if (opt) { in nlopt_set_x_weights()
740 nlopt_unset_errmsg(opt); in nlopt_set_x_weights()
741 for (i = 0; i < opt->n; i++) in nlopt_set_x_weights()
743 return ERR(NLOPT_INVALID_ARGS, opt, "invalid negative weight"); in nlopt_set_x_weights()
744 if (!opt->x_weights && opt->n > 0) { in nlopt_set_x_weights()
745 opt->x_weights = (double *) calloc(opt->n, sizeof(double)); in nlopt_set_x_weights()
746 if (!opt->x_weights) return NLOPT_OUT_OF_MEMORY; in nlopt_set_x_weights()
748 if (opt->n > 0) memcpy(opt->x_weights, x_weights, opt->n * sizeof(double)); in nlopt_set_x_weights()
754 nlopt_result NLOPT_STDCALL nlopt_set_x_weights1(nlopt_opt opt, double x_weight) in nlopt_set_x_weights1() argument
756 if (opt) { in nlopt_set_x_weights1()
758 if (x_weight < 0) return ERR(NLOPT_INVALID_ARGS, opt, "invalid negative weight"); in nlopt_set_x_weights1()
759 nlopt_unset_errmsg(opt); in nlopt_set_x_weights1()
760 if (!opt->x_weights && opt->n > 0) { in nlopt_set_x_weights1()
761 opt->x_weights = (double *) calloc(opt->n, sizeof(double)); in nlopt_set_x_weights1()
762 if (!opt->x_weights) return NLOPT_OUT_OF_MEMORY; in nlopt_set_x_weights1()
764 for (i = 0; i < opt->n; ++i) in nlopt_set_x_weights1()
765 opt->x_weights[i] = x_weight; in nlopt_set_x_weights1()
771 nlopt_result NLOPT_STDCALL nlopt_get_x_weights(const nlopt_opt opt, double *x_weights) in nlopt_get_x_weights() argument
773 if (opt) { in nlopt_get_x_weights()
774 if (opt->n > 0 && !x_weights) return ERR(NLOPT_INVALID_ARGS, opt, "invalid NULL weights"); in nlopt_get_x_weights()
775 nlopt_unset_errmsg(opt); in nlopt_get_x_weights()
776 if (opt->x_weights) { in nlopt_get_x_weights()
777 memcpy(x_weights, opt->x_weights, sizeof(double) * (opt->n)); in nlopt_get_x_weights()
780 for (i = 0; i < opt->n; ++i) in nlopt_get_x_weights()
794 nlopt_result NLOPT_STDCALL nlopt_set_force_stop(nlopt_opt opt, int force_stop) in GETSET()
796 if (opt) { in GETSET()
797 nlopt_unset_errmsg(opt); in GETSET()
798 opt->force_stop = force_stop; in GETSET()
799 if (opt->force_stop_child) in GETSET()
800 return nlopt_set_force_stop(opt->force_stop_child, force_stop); in GETSET()
807 nlopt_result NLOPT_STDCALL nlopt_force_stop(nlopt_opt opt) in GET()
809 return nlopt_set_force_stop(opt, 1); in GET()
818 nlopt_result NLOPT_STDCALL nlopt_set_local_optimizer(nlopt_opt opt, const nlopt_opt local_opt) in GET()
820 if (opt) { in GET()
821 nlopt_unset_errmsg(opt); in GET()
822 if (local_opt && local_opt->n != opt->n) in GET()
823 return ERR(NLOPT_INVALID_ARGS, opt, "dimension mismatch in local optimizer"); in GET()
824 nlopt_destroy(opt->local_opt); in GET()
825 opt->local_opt = nlopt_copy(local_opt); in GET()
827 if (!opt->local_opt) in GET()
829 nlopt_set_lower_bounds(opt->local_opt, opt->lb); in GET()
830 nlopt_set_upper_bounds(opt->local_opt, opt->ub); in GET()
831 nlopt_remove_inequality_constraints(opt->local_opt); in GET()
832 nlopt_remove_equality_constraints(opt->local_opt); in GET()
833 nlopt_set_min_objective(opt->local_opt, NULL, NULL); in GET()
834 nlopt_set_munge(opt->local_opt, NULL, NULL); in GET()
835 opt->local_opt->force_stop = 0; in GET()
848 nlopt_result NLOPT_STDCALL nlopt_set_initial_step1(nlopt_opt opt, double dx) in GETSET()
851 if (!opt) in GETSET()
853 nlopt_unset_errmsg(opt); in GETSET()
855 return ERR(NLOPT_INVALID_ARGS, opt, "zero step size"); in GETSET()
856 if (!opt->dx && opt->n > 0) { in GETSET()
857 opt->dx = (double *) malloc(sizeof(double) * (opt->n)); in GETSET()
858 if (!opt->dx) in GETSET()
861 for (i = 0; i < opt->n; ++i) in GETSET()
862 opt->dx[i] = dx; in GETSET()
866 nlopt_result NLOPT_STDCALL nlopt_set_initial_step(nlopt_opt opt, const double *dx) in nlopt_set_initial_step() argument
869 if (!opt) in nlopt_set_initial_step()
871 nlopt_unset_errmsg(opt); in nlopt_set_initial_step()
873 free(opt->dx); in nlopt_set_initial_step()
874 opt->dx = NULL; in nlopt_set_initial_step()
877 for (i = 0; i < opt->n; ++i) in nlopt_set_initial_step()
879 return ERR(NLOPT_INVALID_ARGS, opt, "zero step size"); in nlopt_set_initial_step()
880 if (!opt->dx && nlopt_set_initial_step1(opt, 1) == NLOPT_OUT_OF_MEMORY) in nlopt_set_initial_step()
882 memcpy(opt->dx, dx, sizeof(double) * (opt->n)); in nlopt_set_initial_step()
886 nlopt_result NLOPT_STDCALL nlopt_get_initial_step(const nlopt_opt opt, const double *x, double *dx) in nlopt_get_initial_step() argument
888 if (!opt) in nlopt_get_initial_step()
890 nlopt_unset_errmsg(opt); in nlopt_get_initial_step()
891 if (!opt->n) in nlopt_get_initial_step()
893 if (!opt->dx) { in nlopt_get_initial_step()
894 nlopt_opt o = (nlopt_opt) opt; /* discard const temporarily */ in nlopt_get_initial_step()
898 memcpy(dx, o->dx, sizeof(double) * (opt->n)); in nlopt_get_initial_step()
902 memcpy(dx, opt->dx, sizeof(double) * (opt->n)); in nlopt_get_initial_step()
906 nlopt_result NLOPT_STDCALL nlopt_set_default_initial_step(nlopt_opt opt, const double *x) in nlopt_set_default_initial_step() argument
911 nlopt_unset_errmsg(opt); in nlopt_set_default_initial_step()
912 if (!opt || !x) in nlopt_set_default_initial_step()
914 lb = opt->lb; in nlopt_set_default_initial_step()
915 ub = opt->ub; in nlopt_set_default_initial_step()
917 if (!opt->dx && nlopt_set_initial_step1(opt, 1) == NLOPT_OUT_OF_MEMORY) in nlopt_set_default_initial_step()
921 for (i = 0; i < opt->n; ++i) { in nlopt_set_default_initial_step()
948 opt->dx[i] = step; in nlopt_set_default_initial_step()
955 void NLOPT_STDCALL nlopt_set_munge(nlopt_opt opt, nlopt_munge munge_on_destroy, nlopt_munge munge_o… in nlopt_set_munge() argument
957 if (opt) { in nlopt_set_munge()
958 opt->munge_on_destroy = munge_on_destroy; in nlopt_set_munge()
959 opt->munge_on_copy = munge_on_copy; in nlopt_set_munge()
963 void NLOPT_STDCALL nlopt_munge_data(nlopt_opt opt, nlopt_munge2 munge, void *data) in nlopt_munge_data() argument
965 if (opt && munge) { in nlopt_munge_data()
967 opt->f_data = munge(opt->f_data, data); in nlopt_munge_data()
968 for (i = 0; i < opt->m; ++i) in nlopt_munge_data()
969 opt->fc[i].f_data = munge(opt->fc[i].f_data, data); in nlopt_munge_data()
970 for (i = 0; i < opt->p; ++i) in nlopt_munge_data()
971 opt->h[i].f_data = munge(opt->h[i].f_data, data); in nlopt_munge_data()
977 const char *nlopt_set_errmsg(nlopt_opt opt, const char *format, ...) in nlopt_set_errmsg() argument
981 opt->errmsg = nlopt_vsprintf(opt->errmsg, format, ap); in nlopt_set_errmsg()
983 return opt->errmsg; in nlopt_set_errmsg()
986 void nlopt_unset_errmsg(nlopt_opt opt) in nlopt_unset_errmsg() argument
988 if (opt) { in nlopt_unset_errmsg()
989 free(opt->errmsg); in nlopt_unset_errmsg()
990 opt->errmsg = NULL; in nlopt_unset_errmsg()
994 const char *nlopt_get_errmsg(nlopt_opt opt) in nlopt_get_errmsg() argument
996 return opt->errmsg; in nlopt_get_errmsg()