O2scl reimplements the Open Optimization Library (OOL) available at http://ool.sourceforge.net. The associated classes allow constrained minimization when the constraint can be expressed as a hyper-cubic constraint on all of the independent variables. The routines have been rewritten and reformatted for C++ in order to facilitate the use of member functions and user-defined vector types as arguments. The base class is mmin_constr and there are two different constrained minimzation algorithms implemented in o2scl::mmin_constr_pgrad, o2scl::mmin_constr_spg. (The o2scl::mmin_constr_gencan minimizer is not yet finished). The O2scl implementation should be essentially identical to the most recently released version of OOL.
The constrained minimization classes operate in a similar way to the other multi-dimensional minimization classes (which are derived from o2scl::mmin_base). The constraints are specified with the function
and the minimization can be performed by calling either o2scl::mmin_base::mmin() or o2scl::mmin_base::mmin_de() (if the gradient is provided by the user). The method in o2scl::mmin_constr_gencan requires a Hessian vector product and the user can specify this product for the minimization by using o2scl::mmin_constr::mmin_hess(). The Hessian product function can be specified as an object of type o2scl::ool_hfunct11 in a similar way to the other function objects in O2scl .
There are five error codes defined in o2scl::mmin_constr which are specific to the classes derived from OOL.
The class o2scl::anneal_gsl can handle some kinds of constraints by ignoring proposed steps which cause the user-specified function to return a non-zero value.
Also, a simple way of implementing constraints is to add a function to the original which increases the value outside of the allowed region. This can be done with the functions constraint() and o2scl::lower_bound(). There are two analogous functions, o2scl::cont_constraint() and o2scl::cont_lower_bound(), which continuous and differentiable versions. Where possible, it is better to use the constrained minimization routines described above.
This example minimizes the function
which is undefined for and
. The function is also minimized by o2scl::mmin_simp2, which goes outside the allowed region where the function is undefined.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).