2014-04-15 7 views
2

시간에 액세스하고 싶습니다. 파이썬에서 gurobi의 수학 최적화 문제를 실행할 때 m 모델의 최적 솔루션을 찾았습니다.Gurobi : 최적화 런타임 얻기

은 지금까지 나는

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

불행하게도, 반환 된 런타임은 항상 모델을 해결하는 데 걸린 시간의 독립적 인 0.0이며, 어떤 timelimit을 도달하기 전에 사용합니다.

m.setParam("TimeLimit", timeLimit) 

gurobi를 통해 어떻게 실제 런타임에 액세스 할 수 있습니까? 나는 Gurobi reference manual을 읽었지만 성공을 거두지 못했습니다.

답변

1

나는 다음과 같은 줄을 assignment.py 예제 파일에 추가하려고 시도했지만, 런타임을 잘 인쇄하는 것처럼 보였다.

print m.Runtime 

당신은 당신이 m.optimize() 이후 있지만 모델 실행 시간을 재설정 m.update() 또는 다른 작업을 호출하기 전에 호출하고 있는지 있습니까? m.optimize() 바로 뒤에 런타임을 인쇄 해보십시오.

편집 : 방금 문제가 아니라 내 과제 중 하나임을 깨달았습니다.

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 
+0

감사합니다. @brugaltheelder. 도움을 받으면 이제 런타임에 액세스 할 수 있습니다. 문제는'm.update()'를 수행 한 후에'm'에 액세스했다는 것입니다. 이제 이전에이 작업을 수행하고 있으며 런타임에 쉽게 액세스 할 수 있습니다. –