20 #ifndef LIBMESH_NLOPT_OPTIMIZATION_SOLVER_H    21 #define LIBMESH_NLOPT_OPTIMIZATION_SOLVER_H    23 #include "libmesh/libmesh_config.h"    26 #if defined(LIBMESH_HAVE_NLOPT) && !defined(LIBMESH_USE_COMPLEX_NUMBERS)    29 #include "libmesh/optimization_solver.h"    93   virtual void clear () 
override;
    98   virtual void init () 
override;
   108   virtual void solve () 
override;
   182   static std::map<std::string, nlopt_algorithm> 
build_map()
   184     std::map<std::string, nlopt_algorithm> ret;
   185     ret[
"LD_SLSQP"]                   = NLOPT_LD_SLSQP;
   186     ret[
"LD_MMA"]                     = NLOPT_LD_MMA;
   187     ret[
"LD_CCSAQ"]                   = NLOPT_LD_CCSAQ;
   188     ret[
"LD_LBFGS"]                   = NLOPT_LD_LBFGS;
   189     ret[
"LD_LBFGS_NOCEDAL"]           = NLOPT_LD_LBFGS_NOCEDAL;
   190     ret[
"LD_TNEWTON"]                 = NLOPT_LD_TNEWTON;
   191     ret[
"LD_TNEWTON_RESTART"]         = NLOPT_LD_TNEWTON_RESTART;
   192     ret[
"LD_TNEWTON_PRECOND"]         = NLOPT_LD_TNEWTON_PRECOND;
   193     ret[
"LD_TNEWTON_PRECOND_RESTART"] = NLOPT_LD_TNEWTON_PRECOND_RESTART;
   194     ret[
"LD_AUGLAG"]                  = NLOPT_LD_AUGLAG;
   195     ret[
"LD_VAR1"]                    = NLOPT_LD_VAR1;
   196     ret[
"LD_VAR2"]                    = NLOPT_LD_VAR2;
   197     ret[
"LN_COBYLA"]                  = NLOPT_LN_COBYLA;
   198     ret[
"LN_BOBYQA"]                  = NLOPT_LN_BOBYQA;
   199     ret[
"LN_PRAXIS"]                  = NLOPT_LN_PRAXIS;
   200     ret[
"LN_NELDERMEAD"]              = NLOPT_LN_NELDERMEAD;
   201     ret[
"LN_SBPLX"]                   = NLOPT_LN_SBPLX;
   202     ret[
"GN_ISRES"]                   = NLOPT_GN_ISRES;
   212 template <
typename T>
   213 std::map<std::string, nlopt_algorithm>
   219 #endif // #if defined(LIBMESH_HAVE_NLOPT) && !defined(LIBMESH_USE_COMPLEX_NUMBERS)   220 #endif // LIBMESH_NLOPT_OPTIMIZATION_SOLVER_H ~NloptOptimizationSolver()
Destructor. 
double _constraints_tolerance
NLopt requires us to specify a tolerance for the constraints. 
virtual void init() override
Initialize data structures if not done so already. 
nlopt_opt _opt
Optimization solver context. 
This class provides an interface to the NLopt optimization solvers. 
nlopt_result _result
Store the result (i.e. 
friend void __libmesh_nlopt_equality_constraints(unsigned m, double *result, unsigned n, const double *x, double *gradient, void *data)
friend void __libmesh_nlopt_inequality_constraints(unsigned m, double *result, unsigned n, const double *x, double *gradient, void *data)
The libMesh namespace provides an interface to certain functionality in the library. 
unsigned _iteration_count
Stores the current iteration index (incremented at each call of __libmesh_nlopt_objective). 
OptimizationSystem sys_type
The type of system that we use in conjunction with this solver. 
virtual void solve() override
Call the NLopt solver. 
friend double __libmesh_nlopt_objective(unsigned n, const double *x, double *gradient, void *data)
This System subclass enables us to assemble an objective function, gradient, Hessian and bounds for o...
NloptOptimizationSolver(sys_type &system)
Constructor. 
virtual void clear() override
Release all memory and clear data structures. 
void __libmesh_nlopt_inequality_constraints(unsigned m, double *result, unsigned n, const double *x, double *gradient, void *data)
const sys_type & system() const
virtual void print_converged_reason() override
Prints a useful message about why the latest optimization solve con(di)verged. 
unsigned & get_iteration_count()
This base class can be inherited from to provide interfaces to optimization solvers from different pa...
nlopt_opt get_nlopt_object()
double __libmesh_nlopt_objective(unsigned n, const double *x, double *gradient, void *data)
static std::map< std::string, nlopt_algorithm > build_map()
virtual int get_converged_reason() override
static std::map< std::string, nlopt_algorithm > _nlopt_algorithms
void __libmesh_nlopt_equality_constraints(unsigned m, double *result, unsigned n, const double *x, double *gradient, void *data)