2016-11-30 7 views
1

Я изо всех сил пытаюсь сделать несколько ограничений с помощью цикла for в Python Pyomo.Как сделать итерационные ограничения, используя «for loop» в 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.minUsePreA, m.minUsePreB, m.minUsePreC и m.minUsePreD.

ответ

2

Наверное, самый простой способ сделать это, чтобы создать единый компонент Constraint проиндексированы 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) 

Если вам действительно нужно иметь отдельные компоненты принужденно, вы можете также использовать функцию 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)) 

Последний подход является более сложным для кода, но он вспыхивает ограничения на различные группы, которые можно использовать.

 Смежные вопросы

  • Нет связанных вопросов^_^