多次解决Gurobi模型在Python(Solve Gurobi model repeatedly

2019-10-22 23:58发布

我需要反复解决gurobi模型(具有不同的变量值每次迭代)。 而不是重建模型每次迭代中,我试图建立模型,然后通过反复的优化循环,但变量值不会更新。 下面是一个简单的例子。

n = Model("Test")
a = n.addVar(lb=0,name = "a")
b = n.addVar(lb=0,name = "b")
a=1
b=1
x = n.addVar(lb=0,name = "x")
y = n.addVar(lb=0,name = "y")
n.update()
n.setObjective(a*x + b*y,GRB.MAXIMIZE)
n.addConstr(x + y <= 10)
n.addConstr(2*x + 3*y <= 20)
n.addConstr(y<=5)
n.update
n.optimize()
for v in n.getVars():
    print('%s %g' % (v.varName, v.x))

print('Obj: %g' % n.objVal)

for i in (1,10):
    n.update()
    a=i*2
    b=100/i
    n.optimize()
    for v in n.getVars():
        print('%s %g' % (v.varName, v.x))

如何一遍一遍使用现有的模式?

Answer 1:

想必你缺少n.setObjective()的调用中循环。 你只是更新局部变量,而无需实际触摸模式可言。



Answer 2:

只有A和B常数? 然后,你只需要添加行

x.obj = i*2
y.obj = 100/i

在循环中,你可以删除a和b完全地。

完整的例子,校正一些小问题,并把a=b=1的循环为i=0 -iteration:

from gurobipy import Model, GRB

n = Model('Test')
x = n.addVar(lb=0, name='x')
y = n.addVar(lb=0, name='y')
n.update()
n.ModelSense = GRB.MAXIMIZE
n.addConstr(x + y <= 10)
n.addConstr(2 * x + 3 * y <= 20)
n.addConstr(y <= 5)
n.update()

for i in range(10):
    x.Obj = i*2 if i else 1
    y.Obj = 100/i if i else 1
    n.optimize()
    for v in n.getVars():
        print('%s %g' % (v.varName, v.x))
    print('Obj: %g' % n.objVal)


文章来源: Solve Gurobi model repeatedly in Python