[SciPy-user] fmin using spherical bounds
Thu May 21 10:41:06 CDT 2009
On Thu, May 21, 2009 at 11:19 AM, ElMickerino <email@example.com> wrote:
> Hello Fellow SciPythonistas,
> I have a seemingly simple task: minimize a function inside a (hyper)sphere
> in parameter space. Unfortunately, I can't seem to make fmin_cobyla do what
> I'd like it to do, and after reading some of the old messages posted to this
> forum, it seems that fmin_cobyla will actually wander outside of the allowed
> regions of parameter space as long as it smells a minimum there (with some
> appropriate hand-waving).
> The function I'd like to minimize is only defined in this hypersphere (well,
> hyperellipsoid, but I do some linear algebra), so ideally I'd use something
> like fmin_bounds to strictly limit where the search can occur, but it seems
> that fmin_bounds can only handle rectangular bounds. fmin_cobyla seems to
> be happy to simply ignore the constraints I give it (and yes, I've got print
> statements that make it clear that it is wandering far, far outside of the
> allowed region of parameter space). Is there a simple way to use
> fmin_bounds with a bound of the form:
> x^2 + y^2 + z^2 + .... <= 1.0 ?
> or more generally:
> transpose(x).M.x <= 1.0 where x is a column vector and M is a
> positive definite matrix?
> It seems very bizarre that fmin_cobyla is perfectly happy to wander very,
> very far outside of where it should be.
maybe you can give fmin_slsqp a try
It is very flexible for defining the constraints. I recently added the
example from the trac ticket to the tutorial.
Otherwise I would try to reparameterize, or extend the objective
function to all real numbers with a penalization term.
More information about the SciPy-user