如何在 gurobi 中定义 objective 的数值
how to define the numerical value for objective in gurobi
我正在使用 gurobi,在我的对象中我想最大化两个变量之间的差异
X1 - X2
但是哪个变量更大并不重要,所以我想使用这个差异的数值:
|X1 - X2|
如何在gurobi中定义这种objective
Blow是我想做的一个实现的半代码:
m = Model("mip1")
Edges = tuplelist([(1,2),(1,3),(3,4),(3,5),(3,6),(5,6),(6,7),
(8,9),(9,10),(11,12),(12,10),(12,13),(14,10),
])
x = m.addVars(Edges, lb=0.0, ub=1.0, name = "x")
m.setObjectiveN(quicksum(x[w,s] for w,s in Edges),0)
-------my second variables and objective----
y = m.addVars(2, vtype=GRB.BINARY, name="y")
y[0] = quicksum(x.select(1,'*'))
y[1] = quicksum(x.select(8,'*'))
m.setObjectiveN(|y[0]-y[1]|,1)
m.optimize()
Gurobi 只接受约束中的绝对值,所以你可以这样做:
# Define two helper variables
z = m.addVar(name="z")
h = m.addVar(name="h")
m.addConstr(h == y[0]-y[1]) # h = y[0]-y[1]
m.addConstr(z == abs_(h)) # z == |h| == | y[0] - y[1] |
m.setObjectiveN(z, 1) # Maximize z = |h| = |y[0]-y[1]|
其中 _abs()
是一般约束。
我正在使用 gurobi,在我的对象中我想最大化两个变量之间的差异
X1 - X2
但是哪个变量更大并不重要,所以我想使用这个差异的数值:
|X1 - X2|
如何在gurobi中定义这种objective
Blow是我想做的一个实现的半代码:
m = Model("mip1")
Edges = tuplelist([(1,2),(1,3),(3,4),(3,5),(3,6),(5,6),(6,7),
(8,9),(9,10),(11,12),(12,10),(12,13),(14,10),
])
x = m.addVars(Edges, lb=0.0, ub=1.0, name = "x")
m.setObjectiveN(quicksum(x[w,s] for w,s in Edges),0)
-------my second variables and objective----
y = m.addVars(2, vtype=GRB.BINARY, name="y")
y[0] = quicksum(x.select(1,'*'))
y[1] = quicksum(x.select(8,'*'))
m.setObjectiveN(|y[0]-y[1]|,1)
m.optimize()
Gurobi 只接受约束中的绝对值,所以你可以这样做:
# Define two helper variables
z = m.addVar(name="z")
h = m.addVar(name="h")
m.addConstr(h == y[0]-y[1]) # h = y[0]-y[1]
m.addConstr(z == abs_(h)) # z == |h| == | y[0] - y[1] |
m.setObjectiveN(z, 1) # Maximize z = |h| = |y[0]-y[1]|
其中 _abs()
是一般约束。