我有这样的目标函数:
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语言编写代码。
你能帮我解决这个话题吗?
您确实应该发布更多代码...至少显示代码中的所有元素。
我会假设
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)