Callback for nonconvex QCP/MIQCP
回答済みHi folks,
Does gurobi support callback for QCP/MIQCP. I tried the following small example in python and it does not seem to work?
Thanks in advance.
from gurobipy import *
model = Model("NewModel")
model.setParam("nonConvex", 2)
x = model.addVar(name="x")
y = model.addVar(name="y")
z = model.addVar(name="z")
# Set objective: maximize x
model.setObjective(1.0*x, GRB.MAXIMIZE)
# Add linear constraint: x + y + z <= 10
model.addConstr(x + y + z <= 10, "c0")
# Add bilinear inequality constraint: x * y <= 2
model.addConstr(x*y <= 2, "bilinear0")
# Add bilinear equality constraint: x * z + y * z == 1
model.addConstr(x*z + y*z == 1, "bilinear1")
def mycallback(model, where):
if where == GRB.Callback.MIPSOL:
sol = model.cbGetSolution([model._vars[0], model._vars[1]])
if sol[0] + sol[1] > 1.1:
model.cbLazy(model._vars[0] + model._vars[1] <= 1)
model._vars = model.getVars()
model.optimize(mycallback)
0
-
正式なコメント
This post is more than three years old. Some information may not be up to date. For current information, please check the Gurobi Documentation or Knowledge Base. If you need more help, please create a new post in the community forum. Or why not try our AI Gurobot?. -
Hi,
There are two issues with your code:
Firstly, because of Gurobi's lazy update approach, model.getVars() returns an empty list at this point. This is one of the rare occasions where you need to call model.update() first.
Secondly, if you want to add lazy constraints through a callback, you need to set the LazyConstraints parameter to 1.
1 -
Thanks. It works
0
投稿コメントは受け付けていません。
コメント
3件のコメント