我想在gurobi中找到一个具有绝对值的表达式作为目标函数。具体地说,它是一个表达式,如∑_j∈j|∑_i∈Px_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
我该怎么改?
您可以添加额外的辅助变量,然后使用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)