Optimize.Minimize将2个参数传递给1个参数的函数

时间:2019-09-23 08:50:27

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

我对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),))

有一个函数3vars,我试图遍历p和q的一些值(在for循环中定义),对于每个值,我都会有一个更简单的函数,就是C函数, p和q固定。然后,我将使用函数C(l)必须大于或等于2的约束来最小化此简单的1参数函数。(最终,我将添加将l的最小值附加到列表{{ 1}})

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

lMinVal

1 个答案:

答案 0 :(得分:1)

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

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