如何解决如何处理scipy最小化ValueError:没有足够的值要解压预期4,得到3?
I am trying to minimize the following function by use of the scipy library:
from scipy.optimize import minimize
def constraint1(bet):
a,b = bet
return 100 - a + b
con1 = {'type': 'ineq','fun': constraint1}
cons = [con1]
b0,b1 = (0,100),(0,100)
bnds = (b0,b1)
def f(bet,sign = -1,*args):
d0,d1,p0,p1 = args
a,b = bet
wins0 = a * (d0-1)
wins1 = b * (d1-1)
loss0 = b
loss1 = a
log0 = np.log(bank + wins0 - loss0)
log1 = np.log(bank + wins1 - loss1)
objective = (log0 * p0 + log1 * p1)
return sign * objective
bet = [0,0]
minimize(f,bet,args = (1,2,3,4,),method = 'trust-constr',bounds = bnds,constraints = cons)
但这会导致ValueError:
d0,p1 = args (Think this is where the error occurs)
ValueError: not enough values to unpack (expected 4,got 3)
试图省略,
,使其看起来像这样:(1,4)
,但这也不起作用。
有什么用!
解决方法
您无法minimize
使用可选参数。该功能必须如下所示:
fun(x,*args)
没有位置放置可选参数。因此,您要做的就是调用您的函数,以显式提供-1
作为args
之一:
minimize(f,bet,args = (-1,1,2,3,4,),method = 'trust-constr',bounds = bnds,constraints = cons)
这是documentation的链接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。