有没有办法将Pyomo中的Set索引从1索引更改为0索引?当您处理多个对象(Pyomo被引用为1,Python的其他所有内容被引用为0)时,要使所有内容保持一致是非常困难的。
这样做的原因是为多个电路设备生成模型拟合例程。我不想一遍又一遍地创建整个模型,而是想使用AbstractModel对其进行一次定义。然后,我可以重新加载数据并为每个设备解析。
在我的目标函数中,我正在使用列表推导定义中间值。一旦生成这些中间值,它们现在将被引用为0。下面是我正在做的一个例子。如您所见,我必须使用[i]声明一些参数,而使用[i-1]声明其他参数。当功能变大时,这变得困难和混乱。如果所有内容都仅被引用为0,那么它与标准Python代码保持一致,那将会更加有意义。我希望有一些简单的选项或设置来声明Set是引用的0还是1。
y11intre = [1 / m.Ra[1] + 1 / m.Rb[1] for i in m.n]
y11intim = [m.w[i] * (m.Ca[1] + m.Cb[1]) for i in m.n]
y12intre = ...
...
z11intre = [-y22intim[i-1] * ... for i in m.n]
...
z11re = [m.Rae[1] + z11intre[i-1] for i in m.n]
z11im = [m.w[i] * m.Lae[1] + z11intim[i-1] for i in m.n]
答案 0 :(得分:0)
您可以为RangeSet
提供起点和终点,以提供所需的值:
m.r = RangeSet(0,5) # [0,1,2,3,4,5]
m.s = RangeSet(0,4) # [0,1,2,3,4]