类型错误:名单'对象不是在数学规划
问题描述:
可调用在Python我有一类类型错误:名单'对象不是在数学规划
class someClass:
def objFunction(self, weights):
return [self.obj1(weights), self.obj2(weights), self.obj3(weights)]
def asf(self, f):
def obj(x):
return np.max(np.array(f(x[0],x[1],x[2])))+0.00001*np.sum(f(x[0],x[1],x[2]))
res=minimize(obj,
[0.3,0.3,0.4], method='SLSQP'
,jac=ad.gh(obj)[0],options = {'disp':True, 'ftol': 1e-20,
'maxiter': 1000})
return res
其中OBJ1,OBJ2和OBJ3一些目标函数优化的限定的funtion。我正在这种方法分别制作的对象:
newObj = SomeClass()
newObj.objFunction(weights)
这工作得很好,给预期的结果。但是当我在类中的另一个方法中使用相同的方法时,它会返回上述错误。这是我正在做的:
a = someClass()
a.asf(a.objFunction(weights)
它抛出这个:
Traceback (most recent call last):
File "D:/*******.py", line 332, in <module>
print(investment.asf(obj1(w),ref,ideal,nadir, rho))
File "*******.py", line 313, in asf
,options = {'disp':True, 'ftol': 1e-20, 'maxiter': 1000})
File "C:\Users\*****\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\site-packages\scipy\optimize\_minimize.py", line 455, in minimize
constraints, callback=callback, **options)
File "C:\Users\*****\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\site-packages\scipy\optimize\slsqp.py", line 363, in _minimize_slsqp
fx = func(x)
File "C:\Users\*******\Downloads\WinPython-64bit-3.5.1.2\python-3.5.1.amd64\lib\site-packages\scipy\optimize\optimize.py", line 289, in function_wrapper
return function(*(wrapper_args + args))
File "D:********.py", line 305, in obj
return np.max(np.array(f(x[0], x[1], x[2], x[3])))+rho*np.sum(f(x[0], x[1], x[2], x[3]))
TypeError: 'list' object is not callable
我想我做了一些OOP(面向对象编程)错误的代码,因为我不擅长。对此有何建议?谢谢
答
a.objFunction(weights)
返回list
,这是从定义中明确。
a.asf
预计称为f
一个参数,它的定义被使用,如:
f(x[0],x[1],x[2])
所以你给a.asf
列表,并试图把它像一个功能。
请提及整个堆栈跟踪。有了这个错误,我只能告诉你在你的代码 –
什么地方叫'list(n)'而不是'list [n]'什么是'ad.gh'? – kilojoules