J'ai un funtion défini dans une classeTypeError: objet « liste » est pas appelable en Python dans la programmation mathématique
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
où obj1, obj2 et obj3 sont des fonctions objectives optimisées. Je cours cette méthode en faisant un objet séparément:
newObj = SomeClass()
newObj.objFunction(weights)
Cela fonctionne bien et donne des résultats attendus. Mais quand j'ai utilisé la même méthode dans une autre méthode de la classe, elle renvoie l'erreur mentionnée ci-dessus. Voici comment je fais:
a = someClass()
a.asf(a.objFunction(weights)
Il jette ceci:
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
Je pense que je suis en train de POO (programmation orientée objet) erreur de codage parce que je ne suis pas bon. Des suggestions pour cela? Merci
Veuillez mentionner toute la pile-trace. Avec cette erreur, je pourrais seulement dire que vous appelez la liste comme 'list (n)' au lieu de 'list [n]' quelque part dans votre code –
qu'est-ce que 'ad.gh'? – kilojoules