def addVar (self, ve):
assert(isinstance(ve, tft_expr.VariableExpr))
if (ve.label().startswith(tft_expr.GROUP_ERR_VAR_PREFIX) or ve.label().startswith(tft_expr.ERR_VAR_PREFIX)):
assert(ve.type() == int)
if (ve in self.var_expr_2_gurobi_var.keys()):
return
# add variable
var = ""
if (ve.type() == int):
var = self.solver.addVar(vtype=GRB.INTEGER, name=ve.label())
elif (ve.type() == Fraction):
var = self.solver.addVar(name=ve.label())
else:
sys.exit("ERROR: invalid type of VariableExpr found when asking gurobi for OptimizeExpr")
self.var_expr_2_gurobi_var[ve] = var
self.solver.update()
# write range
if (ve.hasBounds()):
# check lower bound
if (ve.lb().value() < Fraction(0, 1)):
sys.exit("ERROR: variable's (" + ve.label() +") lower bound must be greater than 0")
# add constraint
self.addConstraint("linear", "<=", ve.lb(), ve)
self.addConstraint("linear", "<=", ve, ve.ub())
评论列表
文章目录