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

问题描述 投票:0回答:1

我试图使用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
python optimization scipy
1个回答
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取代。

© www.soinside.com 2019 - 2024. All rights reserved.