如何在 gurobipy 和 pyomo 中使用 abs?

问题描述 投票:0回答:1

我有这样的目标函数:

    def obj_expression(m):
        return sum(sum((m.xr[i,j] - m.x[i, j]) + m.gamma * abs(m.v[i, j] - m.v0[i, j]) 
                    for j in m.J if m.xr[i,j] != 0) 
                for i in m.I)

    #Assigning objective function
    model.OBJ = pyo.Objective(rule=obj_expression)

abs() 无法工作。我尝试了 gp.abs_(),但没有成功。我尝试乘以平方,然后乘以平方根。没成功。

我想将“m.v[i, j] - m.v0[i, j]”定义为变量并给出“应该大于0”之类的限制/约束,但我无法用pyomo语言编写代码。

你能帮我解决这个话题吗?

python math optimization pyomo gurobi
1个回答
0
投票

您确实应该发布更多代码...至少显示代码中的所有元素。

我会假设

m.v
m.v0
都是变量,而不是参数/常量。

因此,要捕获

abs(m.v - m.v0)
,其中两者都由
(i, j)
索引,您只需引入一个由相同索引索引的伴随变量,然后将其限制为大于链接答案中所示的正/负值...

m.v_abs[i, j] as a variable indexed similar to v

然后是 2 个约束,两个 对于每个 i, j

m.v_abs >= m.v - m.v0

m.v_abs >= -(m.v -m.v0)
© www.soinside.com 2019 - 2024. All rights reserved.