如何查询约束在回调函数?
回答你好,
有可能查询的约束,定义的用户或Gurobi补充道,在流程或满意的回调函数?
最好的,
Wissal
1
-
嗨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
请登录留下你的评论。
评论
1评论