For loop 如何使用“创建迭代约束”;for loop";在Python Pyomo中
我在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 (
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) )