For loop 如何使用“创建迭代约束”;for loop";在Python Pyomo中

For loop 如何使用“创建迭代约束”;for loop";在Python Pyomo中,for-loop,optimization,constraints,pyomo,For Loop,Optimization,Constraints,Pyomo,我在Python-Pyomo中使用for循环进行多个约束 下面是我的代码概念,应该可以很好地工作(这不起作用) 我想通过使用for循环、m.minUsePreA、m.minUsePreB、m.minUsePreC、和m.minUsePreD来进行这四个约束,最简单的方法可能是创建一个由贝氏字母索引的约束组件: bay_Alphabet=['A', 'B', 'C', 'D'] def minUsePre_rule(m,u,v,n): return sum( m.X[u,v] for (

我在Python-Pyomo中使用
for
循环进行多个约束

下面是我的代码概念,应该可以很好地工作(这不起作用)


我想通过使用
for
循环、
m.minUsePreA
m.minUsePreB
m.minUsePreC
、和
m.minUsePreD
来进行这四个约束,最简单的方法可能是创建一个由贝氏字母索引的约束组件:

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)
如果确实需要单独的约束组件,还可以使用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) )
后一种方法的代码更复杂,但它将约束分解为您可以使用的不同组

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