【问题标题】:Gurobi: Get optimization runtimeGurobi:获取优化运行时
【发布时间】:2014-04-15 12:21:24
【问题描述】:

我想访问在 python 中运行 gurobi 中的数学优化问题时找到模型 m 的最优解所花费的时间

到目前为止我使用

runtime = m.Runtime
print("The run time is %f" % runtime)

不幸的是,返回的运行时间始终为 0.0,与求解模型所花费的时间无关,并且在达到任何时间限制之前。

    m.setParam("TimeLimit", timeLimit)

如何通过 gurobipy 在 gurobi 中访问实际运行时?我已经阅读了Gurobi reference manual,但没有成功。

【问题讨论】:

  • 正如this link 中提到的答案,您应该在model.optimize() 调用后立即查询Runtime 属性以获得正确的运行时间。

标签: python mathematical-optimization gurobi


【解决方案1】:

我刚刚尝试将以下行添加到 assignment.py 示例文件中,它似乎可以很好地打印出运行时。

print m.Runtime

您确定在 m.optimize() 之后调用它,但在调用 m.update() 或其他任何重置模型运行时间的方法之前调用它吗?尝试在 m.optimize() 之后立即打印运行时间。

编辑:我刚刚意识到 assignment.py 是我的问题之一,而不是示例问题。

from gurobipy import *
from numpy import *

numT = 300;
numC = 300;

Assignment = random.random((numT,numC))

m=Model("Assignment")

X = []
for t in range(numT):
    X.append([])
    for c in range(numC):
        X[t].append(m.addVar(vtype=GRB.BINARY,name="X%d%d"% (t, c)))
m.update()
m.modelSense = GRB.MAXIMIZE
constraintT = []
constraintC = []
for t in range(numT):
    constraintT.append(m.addConstr(quicksum(X[t][c] for c in range(numC)) == 1 ,'constraintT%d' % t))

for c in range(numC):
    constraintT.append(m.addConstr(quicksum(X[t][c] for t in range(numT)) == 1 ,'constraintC%d' % t))

m.setObjective(quicksum(quicksum([X[t][c]*Assignment[t][c] for c in range(numC)]) for t in range(numT)))

m.update()
m.optimize()

print 'runtime is',m.Runtime

【讨论】:

  • 谢谢@brugaltheelder。在您的帮助下,我现在可以访问运行时。问题是我在执行m.update() 之后访问了m。现在我之前在这样做,我可以轻松访问运行时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多