首页 > 解决方案 > 如何在 pyomo 中添加到集合

问题描述

我正在尝试运行此代码(代码的一些重要部分在这里):

Master = AbstractModel()
Master.intIndices = Set(initialize=INTVARS)
Master.constraintSet = Set(initialize=CONS)
Master.conIndices = Set(initialize=CONVARS)
Master.intPartList = Set()

Master.dualVarSet = Master.constraintSet * Master.intPartList

Master.theta = Var(domain=Reals, bounds = (None, None))
Master.intVars = Var(Master.intIndices, domain=NonNegativeIntegers, bounds=(0, 10))
Master.dualVars = Var(Master.dualVarSet, domain=Reals, bounds = (None, None))
max_iters = 1000
opt = SolverFactory("couenne")
for i in range(max_iters):
    Master.intPartList.add(i)

但它在最后一行向我显示了这个错误:

RuntimeError: Cannot access add on AbstractOrderedSimpleSet 'intPartList' before it has been constructed (initialized).

有人可以帮助我吗?

标签: pyomo

解决方案


您没有Master.intPartList使用任何数据进行初始化,因此您不能那样更新它。但是,如果您将模型设为具体模型,并为您的集合提供初始化,您可以...

In [11]: from pyomo.environ import *                                            

In [12]: m2 = ConcreteModel()                                                   

In [13]: m2.X = Set(initialize=[1,])                                            

In [14]: m2.X.add(2)                                                            
Out[14]: 1

In [15]: m2.X.pprint()                                                          
X : Size=1, Index=None, Ordered=Insertion
    Key  : Dimen : Domain : Size : Members
    None :     1 :    Any :    2 : {1, 2}

In [16]:     

推荐阅读