# [SciPy-User] fmin_slsqp- Bounds are not obeyed

jagan prabhu jagan_cbe2003@yahoo.co...
Tue Nov 3 13:58:32 CST 2009

```Dear users,

Problem is " Bounded with inequality constrains", in slssqp often Bounds are not obeyed, its deviates the bounds. So if deviates i made it to come back with in the region(bounds). But i face a problem in execution. i get error like,

File "/usr/lib/python2.5/site-packages/scipy/optimize/slsqp.py", line 277, in fmin_slsqp
c_ieq = array([ ieqcons[i](x) for i in range(len(ieqcons)) ])
File "/usr/lib/python2.5/site-packages/scipy/optimize/optimize.py", line 97, in function_wrapper
return function(x, *args)
TypeError: <lambda>() takes exactly 1 argument (2 given)

program will look like,

#import os
#import scipy.optimize
from scipy import *
import numpy
from scipy import optimize
from numpy import asarray
from math import *

def cst(aParams,bounds):
aParams = numpy.asarray(aParams)
for par in range(len(aParams)):
if ((bounds[par][0]<= aParams[par]<= bounds[par][1])):
pass
else:
if (aParams[par]< bounds[par][0]): aParams[par] = bounds[par][0]
if (aParams[par]> bounds[par][1]): aParams[par] = bounds[par][1]

x = aParams[0]
y = aParams[1]
z = aParams[2]
# objective function
eqn = -cos(x)*cos(y)*cos(z)*log(-((x-pi)**2-(y-pi)**2-(z-pi)**2))
return eqn

#Initial guess
Init = numpy.array([5.0,15.0,17.0]) # parameters x,y,z
bounds = [(2.0, 20000.0),(4.0, 50000.0),(5.0, 60000.0)]
# inequality constraints x must be least,y larger than x smaller than z,and z the largest of all
con1 = lambda x:numpy.asarray(x[1]-x[0], x[2]-x[1])

opt = fmin_slsqp(cst,Init,ieqcons= [con1] , bounds=bounds, fprime = None, args=(bounds,), full_output=True, iter=20000, iprint=2, acc=0.001)

print '****************************************'

print opt[0]
print opt[1]
print opt[2]
print opt[4]

Problems are,
1, bounds i could not able to pass to the function as args( ).
2, Whether implementation of the ineq. constraints are correct? any better way?
3, How to avoid bounds deviation?