改善pyomo约束的嵌套循环速度

时间:2018-07-20 19:40:27

标签: constraints nested-loops pyomo computation

我试图通过遍历大小为“ n”的(对称)矩阵并执行检查(给定参数a(i,j))来将这种类型的约束“ constraint1”添加到我的Pyomo模型中:

model.con1=ConstraintList()
for i in range(1,n):
    for j in range(1,i):
        if model.a[i,j]==1:
            model.con1.add((model.x[i] + model.x[j] )  <= 1 )

代码似乎可以正常工作,但是我想知道是否有一种计算效率更高的方式来编写相同代码。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法,看看效果是否更好:

model.n = RangeSet(n)
model.triangular = Set(within=model.n * model.n, filter=lambda i, j: j < i)

@model.Constraint(model.triangular)
def con(m, i, j):
    if model.a[i, j] == 1:
        return model.x[i] + model.x[j] <= 1
    else:
        return Constraint.Skip