как определить числовое значение для объектива в gurobi - PullRequest
0 голосов
/ 27 августа 2018

Я использую gurobi и в моем объекте я хочу максимально увеличить разницу между двумя переменными

X1 - X2

Но не важно, какая переменная больше, поэтому я хочу использовать числовое значение этой разницы:

|X1 - X2|

Как я могу определить этот тип цели в gurobi.

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()   

1 Ответ

0 голосов
/ 27 августа 2018

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() - общее ограничение.

...