Получить и сравнить значения переменных в Gurobi/Python

Я хотел бы сравнить значение оптимальной переменной gurobi с числом, чтобы определить дальнейшие шаги для модели.

from gurobipy import *
m=Model("flow_model")   
arcs = [(0,1),(1,2),(3,4),(0,3), (1,4)]
f= m.addVars((a for a in arcs), vtype=GRB.CONTINUOUS, name = "flow")
d = [0,2,4,0,8]     
G = [10,0,0,4,0]

for i,j in arcs:
    m.addConstr(f.sum(i,'*') + d[i] == f.sum('*',i) + G[i], "node%d" %i) 

m.setObjective((quicksum(f[i,j] for i,j in arcs)), GRB.MAXIMIZE)

m.optimize()

for i,j in f:
    if f[(i,j)] > 1 :
        print('built a line')

Я получаю сообщение об ошибке "Неупорядоченные типы: Var() > int()". Я также попробовал следующий вариант:

var_ref = m.getVarByName("flow")
for i,j in var_ref:
    if var_ref[(i,j)] > 1 :
        print('built a line')

Но эта ошибка заявляет, что это "объект NoneType", поэтому в var_ref ничего не сохраняется

1 ответ

Решение

f[(i,j)] это не числовой тип, распознаваемый python, это объект Gurobi Var.

Вы должны спросить gurobi для его значения:

if f[(i,j)].X > 1:  # attribute! No function!
    ...

Это объясняется в документации:

Variable value in the current solution.

Обзор поддерживаемых атрибутов переменных

Другие вопросы по тегам