[SciPy-user] constrained optimization

Robert Kern robert.kern at gmail.com
Mon Apr 28 14:57:41 EDT 2008


On Mon, Apr 28, 2008 at 1:34 PM, John Hunter <jdh2358 at gmail.com> wrote:
> I need to do a N dimensional constrained optimization over a weight w
>  vector with the constraints:
>
>   * w[i] >=0
>
>   * w.sum() == 1.0
>
>  Scanning through the scipy.optimize docs, I see a number of examples
>  where parameters can be bounded by a bracketing interval, but none
>  where constraints can be placed on combinations of the parameters, eg
>  the sum of them.  One approach I am considering is doing a bracketed
>  [0,1] constrained optimization over N-1 weights (assigning the last
>  weight to be 1-sum others) and modifying my cost function to punish
>  the optimizer when the N-1 input weights sum  to more than one.
>
>  Is there a better approach?

Transform the coordinates to an unconstrained N-1-dimensional space.
One such transformation is the Aitchison (or "additive log-ratio")
transform:

  y = log(x[:-1] / x[-1])

And to go back:

  tmp = hstack([exp(y), 1.0])
  x = tmp / tmp.sum()

Searching for "compositional data analysis" should yield similar
transformations, but this one should be sufficient for maintaining
constraints. For doing statistics, the other have better properties.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco



More information about the SciPy-User mailing list