Python 使用pyomo';s组

Python 使用pyomo';s组,python,matrix,pyomo,evaluate,Python,Matrix,Pyomo,Evaluate,我得到了一个pyomo确定性优化模型,我使用随机共定位方法将其转化为一个随机模型 但是,我在保存输出时遇到了问题。我已经定义了随机节点的数量(状态变量值的数量) 在此之后,模型定义了一系列长度为m.n的列表,即评估模型的点数。这里有一个例子 position_phi = list(range(0,value(m.n)+1)) 我需要将这些1D列表转换为m.K维度。我试着写 position_phi = list(range(0,value(m.n)+1), range(0,va

我得到了一个pyomo确定性优化模型,我使用随机共定位方法将其转化为一个随机模型

但是,我在保存输出时遇到了问题。我已经定义了随机节点的数量(状态变量值的数量)

在此之后,模型定义了一系列长度为m.n的列表,即评估模型的点数。这里有一个例子

position_phi     = list(range(0,value(m.n)+1))
我需要将这些1D列表转换为
m.K
维度。我试着写

position_phi     = list(range(0,value(m.n)+1), range(0,value(m.K)+1))
相反。但是,我得到以下错误:

TypeError:无法计算未知类型为SimpleSet的对象


有人能给我解释一下为什么我不能构造一个大小为m.n*m.k的矩阵吗?

我不完全清楚你的模型试图做什么,但是你可以在Pyomo中通过将两个集合相乘来创建两个集合的叉积

将pyomo.environ作为pe导入
m=pe.ConcreteModel()
m、 K=pe.Set(初始化=[1,2,3])
m、 n=pe.Set(初始化=[4,5,6,7])
m、 位置φ=m.K*m.n
这将使
m.position_phi
的元素为[(1,4)、(1,5),…]

然后,您可以按如下方式使用此集合:

m.whatever=pe.Param(m.position_phi,initialize={(1,4):4,(3,6):6},默认值=0)
然后,当您调用
m.pprint()
时,您将看到如下内容:

3集声明
K:Dim=0,Dimen=1,Size=3,Domain=None,Ordered=False,Bounds=(1,3)
[1, 2, 3]
n:Dim=0,Dimen=1,Size=4,Domain=None,Ordered=False,Bounds=(4,7)
[4, 5, 6, 7]
位置φ:Dim=0,Dimen=2,Size=12,Domain=None,Ordered=False,Bounds=None
事实上的
1参数声明
无论什么:大小=12,索引=position_phi,域=Any,默认值=0,可变值=False
关键词:价值
(1, 4) :     4
(3, 6) :     6
4声明:KN位置_phi任意
此外,在Python中使用超过1个参数调用
list()
,应该会引发类型错误

position_phi     = list(range(0,value(m.n)+1), range(0,value(m.K)+1))