我正在努力使用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.minUsePreA
,m.minUsePreB
,m.minUsePreC
和m.minUsePreD
来制定这四个限制。
答案 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) )
后一种方法对代码来说更复杂,但它会将约束分解为您可以使用的不同组。