【问题标题】:What should I do abs in objectfunction在objectfunction中我应该怎么做abs
【发布时间】:2026-01-15 23:05:01
【问题描述】:

我想在 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

我应该怎么改?

【问题讨论】:

    标签: abstract gurobi objective-function


    【解决方案1】:

    您可以添加额外的辅助变量,然后使用 Gurobi 的 general abs constraints

    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)
    

    【讨论】: