0

我想在 gurobi 中找到一个具有绝对值的表达式作为目标函数。具体来说,就是 ∑_j ∈ J | 等表达式。∑_i ∈ P x_ij-d_i *t_i |。

变量为x_ij,其他为常量。我用 abs() 尝试并错误地使用了这个公式,但我最终无法弄清楚。如果你能告诉我,我将不胜感激。

model.setObjective(quicksum(quicksum((x[i,j] for i in P)-d[i]*t[i]) for j in W),GRB.MINIMIZE) 
#objectfunction

我应该怎么改变这个?

4

1 回答 1

0

您可以添加其他辅助变量,然后使用 Gurobi 的一般 abs 约束

import gurobipy as gp
from gurobipy import quicksum, GRB

# ...your model and sets W, P, J...

helper1 = model.addVars(W, lb=GRB.INFINITY, vtype="C")
helper2 = model.addVars(W, vtype="C")

for j in W:
    model.addConstr(helper1[j] == quicksum(x[i,j]-d[i]*t[i] for i in P))
    model.addConstr(helper2[j] == gp.abs_(helper1[j]))

model.setObjective(quicksum(helper2[j] for j in W), GRB.MINIMIZE)
于 2022-01-14T20:50:18.353 回答