[SciPy-User] Inequality constrains definition and violation in slsqp
jagan prabhu
jagan_cbe2003 at yahoo.co.in
Fri Dec 11 11:37:26 EST 2009
My function is a simple least square, it look like,
func = sum((observeddata[ ] - calculated[ ] )**2) or sum(abs(observed[ ] - calculated[ ] ))
The slsqp optimization code is coupled to a third part software, beginning from the initial values for each function evaluation my optimization code passes 8 parameters to the software. Based on these 8 parameters software calculates the data and its is stored in calculated[ ] array and observeddata[ ] is a constant data through out the process, aim is to minimize the error between the observedata[ ] and calculated[ ] by choosing the proper parameter. Basically i want to do a inverse process identification.
observeddata[ ] and calculated[ ] will be an array of 200 to 400 entries.
My software is very sensitive to the constraints, if it violates is stops execution and the entire process stops.
End of the process i don't know whether it is violated or not, because once in between the process constrains are violated the coupling software stops execution and my optimization process stops.
So i am forced to search of a better way to define my constraints so that it will not violated during function evaluation.
--- On Fri, 11/12/09, josef.pktd at gmail.com <josef.pktd at gmail.com> wrote:
From: josef.pktd at gmail.com <josef.pktd at gmail.com>
Subject: Re: [SciPy-User] Inequality constrains definition and violation in slsqp
To: "SciPy Users List" <scipy-user at scipy.org>
Date: Friday, 11 December, 2009, 8:41 PM
On Fri, Dec 11, 2009 at 9:39 AM, jagan prabhu <jagan_cbe2003 at yahoo.co.in> wrote:
my objective function is a simple least square function, i have 8 parameters and 3 inequality constraints, i used fmin_slsqp optimization algorithm for my problem, but often my constraints are violated while execution. My
code looks like,
######### begin #####################################
Init = [8.0, 14.0, 16.0, 7.0, 13.0, 50.0, 9.0, 4.0] #
[a,b,c,d,e,f,g,h]
# constraints (c > d, g > h & e>=a)
bounds = [(3.0, 4000.0), (1.0, 6000.0), (2.0, 10000.0), (1.0,
4000.0), (4.0, 6000.0), (1.0, 5000.0), (2.0, 10000.0), (1.0, 4000.0)]
# constraints
con1 = lambda x: x[2]-x[3]
con2 = lambda x: x[6]-x[7]
con3 = lambda x: x[4]-x[0]
cons = [con1, con2, con3]
###
# gradient function for my problem
def grad(s,*args):
f = func
step = 1.e-3
fini = f(*((s,)+args))
grad = numpy.zeros((len(s),), float)
st = numpy.zeros((len(s),), float)
for i in range(len(s)):
st[i] = step*s[i]
grad[i] = (f(*((s+st,)+args)) - fini)/st[i]
st[i] = 0.0
return grad
opt = fmin_slsqp(func, Init, ieqcons=cons, bounds= bounds, fprime =
grad, iter=50000,iprint=2, acc=0.01)
############## end of the code #############################
Here the major problem i face is the constraints (c > d, g > h & e>=a) are violated frequently during execution, is there any error with my constrain definition method or any better way to avoid constrain violations?
What's your func?
I don't see anything obviously wrong.
With "violated frequently during execution", do you mean during optimization but not at the final result?
If yes, your numerical gradient calculation doesn't check whether the parameters for the functions f(*((s+st,)+args))
are satisfying the constraints, and your stepsizes are pretty big. I don't know if slsqp itself only evaluates at points that statisfy the constraints.
If that's not the point, then I would need more information to understand what's going on.
Josef
The INTERNET now has a personality. YOURS! See your Yahoo! Homepage.
_______________________________________________
SciPy-User mailing list
SciPy-User at scipy.org
http://mail.scipy.org/mailman/listinfo/scipy-user
-----Inline Attachment Follows-----
_______________________________________________
SciPy-User mailing list
SciPy-User at scipy.org
http://mail.scipy.org/mailman/listinfo/scipy-user
The INTERNET now has a personality. YOURS! See your Yahoo! Homepage. http://in.yahoo.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20091211/f7918061/attachment.html>
More information about the SciPy-User
mailing list