[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