1 /* Copyright (c) 2007-2014 Massachusetts Institute of Technology 2 * 3 * Permission is hereby granted, free of charge, to any person obtaining 4 * a copy of this software and associated documentation files (the 5 * "Software"), to deal in the Software without restriction, including 6 * without limitation the rights to use, copy, modify, merge, publish, 7 * distribute, sublicense, and/or sell copies of the Software, and to 8 * permit persons to whom the Software is furnished to do so, subject to 9 * the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be 12 * included in all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 23 #ifndef NLOPT_INTERNAL_H 24 #define NLOPT_INTERNAL_H 25 26 #include "nlopt.h" 27 #include "nlopt-util.h" 28 29 #ifdef __cplusplus 30 extern "C" 31 { 32 #endif /* __cplusplus */ 33 34 /*********************************************************************/ 35 36 struct nlopt_opt_s { 37 nlopt_algorithm algorithm; /* the optimization algorithm (immutable) */ 38 unsigned n; /* the dimension of the problem (immutable) */ 39 40 nlopt_func f; void *f_data; /* objective function to minimize */ 41 nlopt_precond pre; /* optional preconditioner for f (NULL if none) */ 42 int maximize; /* nonzero if we are maximizing, not minimizing */ 43 44 double *lb, *ub; /* lower and upper bounds (length n) */ 45 46 unsigned m; /* number of inequality constraints */ 47 unsigned m_alloc; /* number of inequality constraints allocated */ 48 nlopt_constraint *fc; /* inequality constraints, length m_alloc */ 49 50 unsigned p; /* number of equality constraints */ 51 unsigned p_alloc; /* number of inequality constraints allocated */ 52 nlopt_constraint *h; /* equality constraints, length p_alloc */ 53 54 nlopt_munge munge_on_destroy, munge_on_copy; /* hack for wrappers */ 55 56 /* stopping criteria */ 57 double stopval; /* stop when f reaches stopval or better */ 58 double ftol_rel, ftol_abs; /* relative/absolute f tolerances */ 59 double xtol_rel, *xtol_abs; /* rel/abs x tolerances */ 60 int maxeval; /* max # evaluations */ 61 double maxtime; /* max time (seconds) */ 62 63 int force_stop; /* if nonzero, force a halt the next time we 64 try to evaluate the objective during optimization */ 65 /* when local optimization is used, we need a force_stop in the 66 parent object to force a stop in child optimizations */ 67 struct nlopt_opt_s *force_stop_child; 68 69 /* algorithm-specific parameters */ 70 nlopt_opt local_opt; /* local optimizer */ 71 unsigned stochastic_population; /* population size for stochastic algs */ 72 double *dx; /* initial step sizes (length n) for nonderivative algs */ 73 unsigned vector_storage; /* max subspace dimension (0 for default) */ 74 75 void *work; /* algorithm-specific workspace during optimization */ 76 }; 77 78 /*********************************************************************/ 79 extern void nlopt_srand_time_default(void); /* init the rand. seed only if unset */ 80 81 /*********************************************************************/ 82 /* global defaults set by deprecated API: */ 83 84 extern nlopt_algorithm nlopt_local_search_alg_deriv; 85 extern nlopt_algorithm nlopt_local_search_alg_nonderiv; 86 extern int nlopt_local_search_maxeval; 87 extern unsigned nlopt_stochastic_population; 88 89 /*********************************************************************/ 90 91 #ifdef __cplusplus 92 } /* extern "C" */ 93 #endif /* __cplusplus */ 94 95 #endif /* NLOPT_INTERNAL_H */ 96