传递多个值为'nelder mead' scipy优化器

时间:2017-12-22 12:03:53

标签: python optimization scipy

我正在尝试使用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

1 个答案:

答案 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