【问题标题】:Handle ConstraintList with persistent solver使用持久求解器处理 ConstraintList
【发布时间】:2018-11-12 20:51:51
【问题描述】:

我想尝试将持久求解器用于迭代地向问题添加新约束的算法,并希望避免在每次迭代之前完全重建提供给求解器的文件。

在使用https://pyomo.readthedocs.io/en/stable/solvers/persistent_solvers.html 中描述的持久求解器之前,我使用了ConstraintList 对象来迭代地添加我的新约束,而无需单独命名它们。我认为这是一个非常优雅的解决方案,我想看看是否有办法在将新约束添加到ConstraintList 时通知持久求解器。

在文档中是这样写的

m.c2 = pe.Constraint(expr=m.y >= m.x)  
opt.add_constraint(m.c2) 

其中m.c2是要添加到具有持久求解器的模型的约束。一旦在其中添加了约束,通知持久求解器对 ConstraintList 进行了更改的等效行是什么?

【问题讨论】:

    标签: pyomo


    【解决方案1】:

    这是创建约束列表的方法

    m.Cut_Defn = pyomo.ConstraintList(noruleinit=True)
    

    然后你可以在你的约束列表中添加约束:

    m.Cut_Defn.add(some_number >= your_variable + some_other_number)
    

    如果您在.add() 之前求解,那么您将找到另一种解决方案,而不是在.add() 之后求解。所以你可以这样想:它动态实现了新的约束,如果你希望这些约束在你的优化中,你必须解析你的模型。

    【讨论】:

    • 您能否确认/证明/向我展示约束列表中的方法 .add( 将更新先前在持久求解器实例中仅上传一次的模型?这非常重要,因为使用这些约束求解与没有这些约束的求解给出相同的结果(我可以确认它们会改变结果)。而且修改约束列表后也不忘解决。
    • 我无法真正证明它是否会更新,但您可以尝试以下操作:假设您的最小化目标是 x,并且您有一个约束,即 x>=10,如果您在约束列表中添加 x
    • 您可能会在 Pyomo 论坛上找到我的问题的有趣答案:groups.google.com/forum/#!topic/pyomo-forum/TI0bWesN62o 感谢您的时间和帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多