1

我需要反复求解 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))

如何一遍又一遍地使用现有模型?

4

2 回答 2

1

大概你在循环中错过了对 n.setObjective() 的调用。您只是在更新局部变量而根本没有实际接触模型。

于 2015-05-05T18:40:13.257 回答
0

只有 a 和 b 常数吗?然后,您只需要添加行

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

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

完整示例,更正了一些小问题并将-iteration放入a=b=1循环中:i=0

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)
于 2015-05-13T06:51:30.853 回答