1

我正在努力for在 Python Pyomo 中使用循环来制作多个约束。

我应该可以正常工作的代码概念如下(这是行不通的)。

bay_Alphabet={'A', 'B', 'C', 'D'}
for n in bay_Alphabet:
    def minUsePre_rule(m,u,v):
        return sum( m.X[u,v] for (u,v) in bay_setPre[n] ) == 1.0
    m.minUsePre+'n'=pe.Constraint(m.arc_set, rule=minUsePre_rule)

我想通过使用for循环、m.minUsePreAm.minUsePreBm.minUsePreC和来制作这四个约束m.minUsePreD

4

1 回答 1

2

可能最简单的方法是创建一个由bay_Alphabet索引的单个约束组件:

bay_Alphabet=['A', 'B', 'C', 'D']

def minUsePre_rule(m,u,v,n):
    return sum( m.X[u,v] for (u,v) in bay_setPre[n] ) == 1.0
m.minUsePre = pe.Constraint(m.arc_set, bay_Alphabet, rule=minUsePre_rule)

如果确实需要单独的 Constraint 组件,还可以使用 setattr() 函数显式添加组件。例如:

bay_Alphabet=['A', 'B', 'C', 'D']
for n in bay_Alphabet:
    def minUsePre_rule(m,u,v):
        return sum( m.X[u,v] for (u,v) in bay_setPre[n] ) == 1.0
    setattr(m, "minUsePre"+n, pe.Constraint(m.arc_set, rule=minUsePre_rule) )

后一种方法的代码更复杂,但它将约束分解为您可以使用的不同组。

于 2016-11-30T05:18:02.803 回答