![]() |
Object-oriented Scientific Computing Library: Version 0.910
|
Multidimensional minimization by the Simplex method (v2) (GSL) More...
#include <gsl_mmin_simp2.h>
This class minimizes a function using Nelder and Mead's Simplex algorithm. A simplex in a N-dimensional space is defined as a set of N+1 points which describe an N-dimensional volume surrounding the minimum. The algorithm proceeds by shifting the simplex points until the simplex is sufficiently small and thus the minimum is known with sufficient accuracy.
For the earlier method used in GSL, see gsl_mmin_simp .
This class has a high-level interface using mmin(), mmin_twovec() or mmin_simplex() which automatically performs the memory allocation and minimization, or a GSL-like interface using allocate(), free(), interate() and set() or set_simplex().
The simplex can be completely specified by the user (see mmin_simplex() and set_simplex()). Alternatively, the simplex is automatically specified given initial guess and a step size vector
for
. The simplex
with
and
is chosen with
and
for . The step size vector
is set by the set_step() member function. The prsence of
in the recipe above just indicates that elements of the step size vector are automatically re-used if there are less step sizes than dimensions in the minimization problem.
See an example for the usage of this class in Multidimensional minimizer .
Default template arguments
param_t
- no defaultfunc_t
- multi_funct<param_t>vec_t
- ovector_basealloc_vec_t
- ovectoralloc_t
- ovector_allocBased on Nelder65 .
A variable count
originally defined in the GSL simplex state is not present here, because it was unused.
Definition at line 120 of file gsl_mmin_simp2.h.
Public Member Functions | |
template<class vec2_t > | |
int | set_step (size_t nv, vec2_t &step) |
Set the step sizes for each independent variable. | |
virtual int | mmin (size_t nn, vec_t &xx, double &fmin, func_t &ufunc) |
Calculate the minimum min of func w.r.t the array x of size nvar . | |
virtual int | mmin_twovec (size_t nn, vec_t &xx, vec_t &xx2, double &fmin, func_t &ufunc) |
Calculate the minimum min of func w.r.t the array x of size nvar , using xx and xx2 to specify the simplex. | |
template<class mat_t > | |
int | mmin_simplex (size_t nn, mat_t &sx, double &fmin, func_t &ufunc) |
Calculate the minimum min of func w.r.t the array x of size nvar , given an initial simplex. | |
virtual int | allocate (size_t n) |
Allocate the memory. | |
virtual int | free () |
Free the allocated memory. | |
virtual int | set (func_t &ufunc, size_t n, vec_t &ax, vec_t &step_size) |
Set the function and initial guess. | |
template<class mat_t > | |
int | set_simplex (func_t &ufunc, mat_t &sx) |
Set the function and initial simplex. | |
virtual int | iterate () |
Perform an iteration. | |
virtual int | print_iter (size_t nv, vec_t &xx, alloc_vec_t *simp, double y, int iter, double value, double limit, std::string comment) |
Print out iteration information. | |
virtual const char * | type () |
Return string denoting type("gsl_mmin_simp2") | |
Data Fields | |
double | size |
Size of current simplex computed by iterate() | |
alloc_vec_t | x |
Present minimum vector computed by iterate() | |
double | fval |
Function value at minimum computed by iterate() | |
int | print_simplex |
Print simplex information in print_iter() (default 0) | |
Protected Member Functions | |
int | compute_center () |
Compute the center of the simplex. | |
double | compute_size () |
Compute the size of the simplex. | |
virtual int | try_corner_move (const double coeff, size_t corner, vec_t &xc, func_t &f, size_t nvar, double &newval) |
Move a corner of a simplex. | |
virtual int | update_point (size_t i, vec_t &xx, double val) |
Update point i in the simplex with values xx . | |
virtual int | contract_by_best (size_t best, func_t &f, size_t nvar) |
Contract the simplex towards the best point. | |
Protected Attributes | |
alloc_vec_t * | x1 |
An array of n+1 vectors containing the simplex. | |
ovector | y1 |
The n+1 function values at the simplex points. | |
alloc_vec_t | ws1 |
Workspace vector 1. | |
alloc_vec_t | ws2 |
Workspace vector 2. | |
alloc_vec_t | ws3 |
Workspace vector 3. | |
alloc_vec_t | center |
Center of simplex. | |
alloc_vec_t | delta |
Desc. | |
alloc_vec_t | xmc |
Distance of vector from center. | |
double | S2 |
Squared simplex size. | |
size_t | dim |
Number of variables to be minimized over. | |
func_t * | func |
Function. | |
bool | set_called |
True if set() has been called. | |
ovector | step_vec |
Vector of step sizes. | |
alloc_t | ao |
Vector allocator. | |
bool | avoid_nonzero |
If true, try to automatically avoid regions where the function returns a non-zero value (default false) |
double gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::compute_size | ( | ) | [inline, protected] |
Calculates simplex size as average sum of length of vectors from simplex center to corner points:
Definition at line 183 of file gsl_mmin_simp2.h.
virtual int gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::try_corner_move | ( | const double | coeff, |
size_t | corner, | ||
vec_t & | xc, | ||
func_t & | f, | ||
size_t | nvar, | ||
double & | newval | ||
) | [inline, protected, virtual] |
Moves a simplex corner scaled by coeff (negative value represents mirroring by the middle point of the "other" corner points) and gives new corner in xc and function value at xc in newval
.
Definition at line 207 of file gsl_mmin_simp2.h.
virtual int gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::contract_by_best | ( | size_t | best, |
func_t & | f, | ||
size_t | nvar | ||
) | [inline, protected, virtual] |
Function contracts the simplex in respect to best valued corner. All corners besides the best corner are moved.
Definition at line 279 of file gsl_mmin_simp2.h.
virtual int gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::print_iter | ( | size_t | nv, |
vec_t & | xx, | ||
alloc_vec_t * | simp, | ||
double | y, | ||
int | iter, | ||
double | value, | ||
double | limit, | ||
std::string | comment | ||
) | [inline, virtual] |
Depending on the value of the variable verbose, this prints out the iteration information. If verbose=0, then no information is printed, while if verbose>1, then after each iteration, the present values of x and y are output to std::cout along with the iteration number. If verbose>=2 then each iteration waits for a character.
Definition at line 842 of file gsl_mmin_simp2.h.
ovector gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::y1 [protected] |
Definition at line 143 of file gsl_mmin_simp2.h.
bool gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::avoid_nonzero [protected] |
Definition at line 365 of file gsl_mmin_simp2.h.
int gsl_mmin_simp2< func_t, vec_t, alloc_vec_t, alloc_t >::print_simplex |
If this is 1 and verbose is greater than 0, then print_iter() will print the function values at all the simplex points. If this is 2 and verbose is greater than 0, then print_iter() will print the simplex coordinates in addition to the function values.
Definition at line 411 of file gsl_mmin_simp2.h.
Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).