1
可調用在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(面向對象編程)錯誤的代碼,因爲我不擅長。對此有何建議?謝謝
請提及整個堆棧跟蹤。有了這個錯誤,我只能告訴你在你的代碼 –
什麼地方叫'list(n)'而不是'list [n]'什麼是'ad.gh'? – kilojoules