在scipy optimize.minimize目标函数中传递参数(获取关于参数数量的错误)

5

我正在尝试使用scipy的optimizer.minimize函数,但我无法弄清楚如何精确地将参数传递给目标函数。我有以下代码,根据我的理解应该可以正常工作,但它在参数数量上给我错误。

result = minimize(compute_cost, x0, args=(parameter), method='COBYLA',constraints=cons, options={'maxiter':10000,'rhobeg':20})

这是目标函数的函数签名: def compute_cost(x,parameter)

parameter是一个包含51个键值对的字典。

这导致了以下错误:

capi_return is NULL 调用回调函数cb_calcfc_in__cobyla__user__routines 失败。 Traceback (most recent call last): File "C:\..\resource_optimizer.py", line 138,in <module> result = minimize(compute_cost,x0,args=(parameter),method='COBYLA',constraints=cons,options={'maxiter':10000,'rhobeg':20}) File "C:\Python27\lib\site-packages\scipy\optimize\_minimize.py",line 432,in minimize return _minimize_cobyla(fun,x0,args,constraints,**options) File "C:\Python27\lib\site-packages\scipy\optimize\cobyla.py",line 246,in _minimize_cobyla dinfo=info) File "C:\Python27\lib\site-packages\scipy\optimize\cobyla.py",line 238,in calcfc f = fun(x,*args) TypeError:compute_cost()需要2个参数,但给了52个参数

有人能帮我解决这个问题吗?

1个回答

12

args=(parameter) 改为 args=(parameter,),这样 args 就会是包含单个元素的元组。

args=(parameter) 等价于 args=parameter。当您这样做时,parameter 的每个元素都作为单独的参数传递到您的目标函数中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接