我正在尝试使用scipy来运行最小化,而不使用nelder mead。
我的目标函数是:
def obj (self, x):
return self.fitn(x[:4], x[4],x[5],x[6])
def fitn(self, a, b,c,d):
'some utility function using a,b,c,d'
p = scipy.optimize.minimize(self.obj,np.array(a),args=(b,c,d),
method='nelder-mead')
其中,
a =[0.25,0.25,0.25,0.25]
b = scalar value
c = 4 x 4 matrix
d = 1 x 4 matrix
我正面对这样的信息:
obj() takes 2 positional arguments but 5 were given
答案 0 :(得分:0)
正如Pierre de Buyl所说,
minimize(self.obj, np.array(a), args=(b,c,d), ...
导致传递给obj的5个位置参数:self,a,b,c,d。 minimize
方法不会将所有参数打包到x
中。
由于方法obj
是使用两个参数def obj (self, x)
声明的,因此存在错误。写一致是
def obj (self, x, b, c, d):
我认为这也消除了你的obj
现在正在进行的列表解包的必要性;因此obj
失去了目的,可以替换为fitn
。