Pyomo无法迭代抽象集和约束索引错误

时间:2017-06-14 16:20:37

标签: 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:无法迭​​代抽象Set' 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个)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要为约束提供索引集以声明索引约束

model.Local1 = Constraint(model.Generators, rule=WECC1)