【问题标题】:Solve Gurobi model repeatedly in Python在 Python 中反复求解 Gurobi 模型
【发布时间】:2015-05-13 14:51:30
【问题描述】:

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

如何反复使用现有模型?

【问题讨论】:

    标签: python optimization iteration gurobi


    【解决方案1】:

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 2017-11-10
        • 2019-06-06
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多