【问题标题】:How to handle scipy minimize ValueError: not enough values to unpack (expected 4, got 3)?如何处理 scipy minimize ValueError: no enough values to unpack (expected 4, got 3)?
【发布时间】:2020-12-16 18:48:12
【问题描述】:
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, d1, p0, p1 = args (Think this is where the error occurs)
 ValueError: not enough values to unpack (expected 4, got 3)

尝试省略 , 使其看起来像这样 :(1,2,3,4) ,但这也不起作用。

一切都会有帮助!

【问题讨论】:

    标签: python optimization scipy valueerror


    【解决方案1】:

    你不能minimize 函数带有可选参数。该函数必须如下所示:

    fun(x, *args)
    

    没有可选参数的位置。所以你想要做的是调用你的函数明确地提供-1作为args之一:

    minimize(f, bet, args = (-1, 1, 2, 3, 4,),method = 'trust-constr',
             bounds = bnds, constraints = cons)
    

    这是documentation的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2020-10-10
      • 1970-01-01
      • 2020-10-26
      • 2017-12-23
      • 2022-07-22
      • 2020-11-19
      相关资源
      最近更新 更多