Pyomo не может перебирать абстрактный набор и ошибку индекса ограничения

Я новичок в Pyomo, так что это может быть глупый вопрос. Я пытаюсь построить 4-зонную модель UC / ED с множеством генераторов в каждой зоне. Итак, я настроил модель следующим образом:

model.Zone1Generators = Set()

model.Zone2Generators = Set()

model.Zone3Generators = Set()

model.Zone4Generators = Set()


model.Generators = model.Zone1Generators | model.Zone2Generators | model.Zone3Generators | model.Zone4Generators

При запуске модели я получил следующее сообщение об ошибке:

ОШИБКА: сбой правила при создании выражения для ограничения Local1: RuntimeError: невозможно выполнить итерацию по абстрактному набору «Zone1Generators» до его создания (инициализации).

Соответствующее ограничение размещено ниже:

def WECC1(i): 
if i > 0:
    seg1 = sum(model.mwh_1[j,i] for j in model.Zone1Generators) 
    seg2 = sum(model.mwh_2[j,i] for j in model.Zone1Generators) 
    seg3 = sum(model.mwh_3[j,i] for j in model.Zone1Generators) 
    renew = model.hydro[model.zones[0],i] + model.solar[model.zones[0],i]\
    + model.wind[model.zones[0],i] + model.pumpstorage[model.zones[0],i]
    return seg1 + seg2 + seg3 + renew >=  0.25*model.HorizonDemand[model.zones[0],i]
else:
    return Constraint.Skip
model.Local1= Constraint(rule=WECC1)

Думаю, это может быть вызвано тем, что я не передал всю информацию о модели. Поэтому я изменил ограничение с def WECC1(i) на WECC1(model,i). Это дает мне новое сообщение об ошибке:

ОШИБКА: непредвиденное исключение при работе модели: WECC1 () принимает ровно 2 аргумента (1 задан)

Любая помощь будет очень признательна.


person Yufei Su    schedule 14.06.2017    source источник


Ответы (1)


Вам необходимо предоставить набор индексирования для ограничения, чтобы объявить индексированное ограничение.

model.Local1 = Constraint(model.Generators, rule=WECC1)
person Bethany Nicholson    schedule 19.06.2017