如何使用" for循环"进行迭代约束在Python Pyomo中

时间:2016-11-30 04:50:21

标签: for-loop optimization constraints pyomo

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

我应该运行良好的代码概念如下(这不起作用)。

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.minUsePreCm.minUsePreD来制定这四个限制。

1 个答案:

答案 0 :(得分:2)

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

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) )

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