github.com/andrew-torda/simplex (go): Package simplex implements the Nelder-Mead simplex optimizer. It follows the original paper  but some of the nomenclature comes from  and a tiny bit from  The name of the amotry() function comes from numerical recipes, but the formulae for moving the highest point around are taken from the primary references.  It has a couple of frills.  There are two ways to initialise. You can use the classic version as in numerical recipes. Works well on my very artificial examples which have some funny symmetries. This is the default. Alternatively, you can the initial points in each dimension spread evenly over the allowed values and surrounding the initial parameter values. To do this, call  s.IniType (simplex.IniPntSpread)  When `s` has the type splxctrl.  It allows a vector of minimum and maximum values. It will reject moves if they go beyond these boundaries. This is done by wrapping the cost function. If you do not exceed the bounds, the wrapper just returns the original cost function. If a point exceeds a bound in any dimension, the cost function is set to NaN, so the point will be rejected.  Could be improved  Package seq provides a simplex (Nelder and Mead) optimizer.  Example_manyOpt exercises many options.
Keywords: simplex