跳转到主要内容

如何查询约束在回调函数?

回答

评论

1评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    嗨Wissal,

    这是不可能的。

    然而,一些黑客和使用回调函数就可以实现。您可以创建一个复制你的模式你修复的上下界限可行点值获得通过cbGetSolution,发现MIPSOL回调。然后优化这个副本(这是一个简单的解决,因为所有的变量是固定的),最后检索所需的信息。请注意,您不能访问用户削减/懒惰的约束。

    一个示例代码

    进口gurobipy全科医生
    从gurobipy进口伽马线暴

    def mycallback(模型):
    如果在哪里= = GRB.Callback.MIPSOL:
    #得到可行的点值
    瓦尔斯= model.cbGetSolution (model._vars)
    #获取复制模型的变量并修复它们
    var = model._copy.getVars ()
    因为我在范围(len (var)):
    vars[我]。磅= vals[我]
    vars[我]。乌兰巴托= vals[我]
    #运行一个简单的复制模型的优化和访问约束值
    model._copy.optimize ()
    在model._copy.getConstrs c ():
    打印(“约束% s: % % s = % f”% (c.ConstrName, model._copy.getRow (c) .getValue (), c.Sense, c.RHS))
    #重置所有复制模型边界(非必要)
    model._copy.reset ()

    #读例子模型
    模型= gp.read(" /图书馆/ gurobi912 / mac64 /例子/数据/ glass4.mps”)
    #保存原始var在回调访问它们
    模型。_vars = model.getVars ()
    #创建副本的原始模型和抑制输出
    模型。_copy = model.copy ()
    model._copy.setParam (“OutputFlag”, 0)
    model.optimize (mycallback)

    最好的问候,
    Jaromił

    0

登录留下你的评论。