【问题标题】:Constraint of an unknown type passed to function传递给函数的未知类型的约束
【发布时间】:2019-08-31 19:14:36
【问题描述】:

您好,我正在做一个最小化问题,我想尝试使用 scipy 函数 optimize.minimize'trust-constr' 方法,将其与“SLSQP”结果进行比较。不幸的是,我不知道为什么当我将方法设置为 'trust-constr' 时,它告诉我:

ValueError:传递了未知类型的constraint

代码如下:

con1 = {'type':'eq', 'fun': eq2}
con2 =  {'type':'ineq', 'fun' : ieq_bck2}
con3 =  {'type':'ineq', 'fun' : ineq_rb2}
con4 =  {'type':'ineq', 'fun' : ls2}

con = ([con1, con2, con3, con4])

scipy.optimize.minimize(fitness2, opt, method = 'trust-constr', jac = 
'cs', hess = h1, constraints = con)

知道怎么解决吗?

【问题讨论】:

    标签: python scipy constraints minimize


    【解决方案1】:

    根据the Scipy documentation,您的变量con 必须是字典。还有一个例子,con一定是这样的:

    cons = ({'type': 'ineq', 'fun': lambda x:  x[0] - 2 * x[1] + 2},
            {'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] + 6},
            {'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2})
    

    所以在你的情况下,这样做:

    con = (con1, con2, con3, con4)
    

    【讨论】:

    • 即使我这样做仍然不起作用,出现相同的消息错误
    • 好的,那么,你能用我可以重现的最小代码示例更新你的问题吗?
    • 我发现了问题,对于'trust-constr'的情况,你必须通过同一模块的函数LinearConstraint创建约束,对于其他选项,这个问题没有遇到
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多