[SciPy-User] fmin_slsqp constraint problem

Moore, Eric (NIH/NIDDK) [F] eric.moore2 at nih.gov
Fri Oct 26 11:22:22 EDT 2012


> -----Original Message-----
> From: Neal Becker [mailto:ndbecker2 at gmail.com]
> Sent: Friday, October 26, 2012 11:08 AM
> To: scipy-user at scipy.org
> Subject: Re: [SciPy-User] fmin_slsqp constraint problem
> 
> The obj_fnc is much too complicated to include here, but does return a
> single
> value.  I think the problem is ieqcons returns an array, while
> fmin_slsqp
> expects a single value.
> 
> Oleksandr Huziy wrote:
> 
> > What is your obj_fnc, I know it is naive, bu still, is it possible
> that it
> > returns a list?
> >
> > Cheers
> > --
> > Oleksandr (Sasha) Huziy
> >
> > 2012/10/26 Neal Becker <ndbecker2 at gmail.com>
> >
> >> I have a ineq constraint:
> >>
> >>     ## constrain poles to be inside unit circle
> >>     def c(coef, len_z, len_p, dz, dp):
> >>         p = compose ((coef/opt.scale)[len_z:-1], dp)
> >>         return np.abs(p) - 1
> >>
> >> So this will return a 1D array where each value should satisfy the
> >> constraint.
> >> fmin_slsqp will not accept this directly:
> >>
> >>     e = fmin_slsqp (obj_fnc, coef*opt.scale, ieqcons=[lambda coef,
> len_z,
> >> len_p,
> >> dz, dp: -c(coef, len_z, len_p, dz, dp)], args=(len(lz), len(lp), dz,
> dp),
> >> eqcons=[lambda coef, len_z, len_p, dz, dp: h(coef, len_z, len_p, dz,
> dp)],
> >> full_output=True)
> >>
> >> Traceback (most recent call last):
> >>   File "./optimize_pll5.3.2.py", line 519, in <module>
> >>     run_line (sys.argv)
> >>   File "./optimize_pll5.3.2.py", line 498, in run_line
> >>     e = fmin_slsqp (obj_fnc, coef*opt.scale, ieqcons=[lambda coef,
> len_z,
> >> len_p,
> >> dz, dp: -c(coef, len_z, len_p, dz, dp)], args=(len(lz), len(lp), dz,
> dp),
> >> eqcons=[lambda coef, len_z, len_p, dz, dp: h(coef, len_z, len_p, dz,
> dp)],
> >> full_output=True)
> >>   File "/usr/lib64/python2.7/site-packages/scipy/optimize/slsqp.py",
> line
> >> 334,
> >> in fmin_slsqp
> >>     a_ieq[i] = ieqcons_prime[i](x)
> >>   File "/usr/lib64/python2.7/site-
> packages/scipy/optimize/optimize.py",
> >> line
> >> 176, in function_wrapper
> >>     return function(x, *args)
> >>   File "/usr/lib64/python2.7/site-
> packages/scipy/optimize/optimize.py",
> >> line
> >> 398, in approx_fprime
> >>     grad[k] = (f(*((xk+ei,)+args)) - f0)/epsilon
> >> ValueError: setting an array element with a sequence.
> >>
> >> Any ideas on this?
> >>

It looks like the difference between ieqcons and f_ieqcons is returning an array or an scalar. I've not used fmin_slsqp, this is based solely on the documentation.

Eric



More information about the SciPy-User mailing list