chiark / gitweb /
Use trusty
[nlopt.git] / api / nlopt-internal.h
index 336f77efe84c2b6a8015dd83b07ef694555dde48..c4d13d11d20abd870eaf0191fdf969fa264d49ee 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2010 Massachusetts Institute of Technology
+/* Copyright (c) 2007-2014 Massachusetts Institute of Technology
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
@@ -38,6 +38,8 @@ struct nlopt_opt_s {
      unsigned n; /* the dimension of the problem (immutable) */
 
      nlopt_func f; void *f_data; /* objective function to minimize */
+     nlopt_precond pre; /* optional preconditioner for f (NULL if none) */
+     int maximize; /* nonzero if we are maximizing, not minimizing */
 
      double *lb, *ub; /* lower and upper bounds (length n) */
 
@@ -49,21 +51,34 @@ struct nlopt_opt_s {
      unsigned p_alloc; /* number of inequality constraints allocated */
      nlopt_constraint *h; /* equality constraints, length p_alloc */
 
+     nlopt_munge munge_on_destroy, munge_on_copy; /* hack for wrappers */
+
      /* stopping criteria */
-     double minf_max; /* stop when f < minf_max */
+     double stopval; /* stop when f reaches stopval or better */
      double ftol_rel, ftol_abs; /* relative/absolute f tolerances */
      double xtol_rel, *xtol_abs; /* rel/abs x tolerances */
      int maxeval; /* max # evaluations */
      double maxtime; /* max time (seconds) */
 
+     int force_stop; /* if nonzero, force a halt the next time we
+                       try to evaluate the objective during optimization */
+     /* when local optimization is used, we need a force_stop in the
+       parent object to force a stop in child optimizations */
+     struct nlopt_opt_s *force_stop_child;
+
      /* algorithm-specific parameters */
      nlopt_opt local_opt; /* local optimizer */
      unsigned stochastic_population; /* population size for stochastic algs */
      double *dx; /* initial step sizes (length n) for nonderivative algs */
+     unsigned vector_storage; /* max subspace dimension (0 for default) */
+
+     void *work; /* algorithm-specific workspace during optimization */
+
+     char *errmsg; /* description of most recent error */
 };
 
 /*********************************************************************/
-extern int nlopt_srand_called; /* whether the random seed is initialized */
+extern void nlopt_srand_time_default(void); /* init the rand. seed only if unset */
 
 /*********************************************************************/
 /* global defaults set by deprecated API: */
@@ -75,6 +90,20 @@ extern unsigned nlopt_stochastic_population;
 
 /*********************************************************************/
 
+#define RETURN_ERR(err, opt, msg) do {          \
+    nlopt_set_errmsg(opt, msg);                 \
+    return err;                                 \
+} while (0)
+
+extern const char *nlopt_set_errmsg(nlopt_opt opt, const char *format, ...)
+#ifdef __GNUC__
+__attribute__ ((format (printf, 2, 3)))
+#endif
+;
+extern void nlopt_unset_errmsg(nlopt_opt opt);
+
+/*********************************************************************/
+
 #ifdef __cplusplus
 }  /* extern "C" */
 #endif /* __cplusplus */