2016-11-11 50 views
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(面向對象編程)錯誤的代碼,因爲我不擅長。對此有何建議?謝謝

+1

請提及整個堆棧跟蹤。有了這個錯誤,我只能告訴你在你的代碼 –

+0

什麼地方叫'list(n)'而不是'list [n]'什麼是'ad.gh'? – kilojoules

回答

1

a.objFunction(weights)返回list,這是從定義中明確。

a.asf預計稱爲f一個參數,它的定義被使用,如:

f(x[0],x[1],x[2]) 

所以你給a.asf列表,並試圖把它像一個功能。

相關問題