【问题标题】:Optimize.Minimize passes 2 arguments to function of 1 argumentOptimize.Minimize 将 2 个参数传递给 1 个参数的函数
【发布时间】:2020-01-23 07:23:52
【问题描述】:

optimize.minimize 有问题。我把代码贴上来解释一下。

def getC(p,q):
    def C1D(l):

        firstTerm = 1/np.sqrt(-(-l + 2*p*(-1+l))*(2 - l + 2*p*(-1+l)))
        secondTerm = firstTerm = 1/np.sqrt(-(-l + 2*q*(-1+l))*(2 - l + 2*q*(-1+l)))

        return 2*l*(firstTerm + secondTerm)
    return C1D

pVal = []
qVal = []
lMinVal = []

for p in np.round(np.linspace(0,1,10,False),3):
    for q in np.round(np.linspace(0,1,10,False),3):
        pVal.append(p)
        qVal.append(q)

        C = getC(p,q)

        def cons_quantum(l):
            return C(l) - 2


        cons = {'type':'ineq', 'fun': cons_quantum}

        opt.minimize(C, 1, cons, bounds=((0,1),))

有这个函数,我试图检查 p 和 q 的一些值(在 for 循环中定义),对于每一个,我将有一个更简单的函数,它只是带有 p 和q 固定。然后,我将最小化这个更简单的 1 参数函数,其约束条件是函数 C(l) 必须大于或等于 2。(最终我将添加将 l 的最小值附加到列表 @987654324 的行@)

我的问题是,当我运行它时,我收到以下错误:

 File "C:\Users\*****\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 293, in function_wrapper
    return function(*(wrapper_args + args))

TypeError: C1D() takes 1 positional argument but 2 were given

【问题讨论】:

    标签: python optimization scipy scipy-optimize scipy-optimize-minimize


    【解决方案1】:

    scipy.optimize.optimize 的第三个参数是传递给函数的额外参数列表,而不是约束。你想要:

    opt.minimize(C, 1, constraints=cons, bounds=((0,1),))
    

    【讨论】:

    • 我正要发布这个。太感谢了!我应该删除这个吗?我不知道它是否对其他人有用。
    • @TheBosco 这是你的电话 ;) 如果你的版本来自特定的地方,也许值得一提,因为人们可能会发现它并犯同样的错误。
    • 我想出了这个例子来做一些研究,但我会留下它。谁知道它是否对以后的人有用。 (也许是我自己)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多