【问题标题】:improve speed nested loops for pyomo constraint提高 pyomo 约束的速度嵌套循环
【发布时间】:2018-12-29 04:02:49
【问题描述】:

在给定参数 a(i,j) 的情况下,我正在尝试通过遍历大小为“n”的(对称)矩阵并执行检查,将这种类型的约束“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 )

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

谢谢

【问题讨论】:

    标签: constraints nested-loops pyomo computation


    【解决方案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
    

    【讨论】:

    • 目前还不是很清楚,为了运行它,我是否应该调用该函数。如果我只是按原样使用代码,它会运行得更快,但约束似乎被忽略了。
    • 您应该检查以确认model.triangular.display() 具有您期望的元素,并且model.con.pprint() 具有正确的形式。这应该与您的问题中的代码执行相同的操作,但我实际上并没有运行它来测试它。
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2020-11-19
    • 2020-07-20
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多