[SciPy-user] fmin using spherical bounds

josef.pktd@gmai... josef.pktd@gmai...
Thu May 21 10:41:06 CDT 2009


On Thu, May 21, 2009 at 11:19 AM, ElMickerino <elmickerino@hotmail.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
http://docs.scipy.org/scipy/docs/scipy.optimize.slsqp.fmin_slsqp/#scipy-optimize-fmin-slsqp

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.

Josef


More information about the SciPy-user mailing list