使用pyomo集定义矩阵的正确方法

问题描述 投票:0回答:1

我获得了一个pyomo确定性优化模型,该模型已使用随机共置方法转换为随机模型。

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

m.particle_number = Param(initialize = count)
m.K = Set(initialize = range(1,value(m.particle_number)+1))  

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

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

我需要将这些一维列表转换为m.K尺寸。我试图写

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

相反。但是,出现以下错误:

TypeError:无法评估类型未知的对象:SimpleSet

有人可以向我解释为什么我不能构造大小为m.n * m.k的矩阵吗?

python matrix pyomo evaluate
1个回答
1
投票

我尚不清楚您的模型正在尝试做什么,但是您可以通过将两者相乘来在Pyomo中创建两个集合的叉积。

import pyomo.environ as pe
m = pe.ConcreteModel()
m.K = pe.Set(initialize=[1, 2, 3])
m.n = pe.Set(initialize=[4, 5, 6, 7])
m.position_phi = m.K * m.n

这将使m.position_phi的元素为[(1,4),(1,5),...]

然后您可以如下使用此设置:

m.whatever = pe.Param(m.position_phi, intitialize={(1, 4):4, (3, 6):6}, default=0)

然后,当您呼叫m.pprint()时,您会看到类似以下的内容:

3 Set Declarations
    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]
    position_phi : Dim=0, Dimen=2, Size=12, Domain=None, Ordered=False, Bounds=None
        Virtual

1 Param Declarations
    whatever : Size=12, Index=position_phi, Domain=Any, Default=0, Mutable=False
        Key    : Value
        (1, 4) :     4
        (3, 6) :     6

4 Declarations: K n position_phi whatever

此外,在Python中使用超过1个参数调用list()应该引发TypeError。

© www.soinside.com 2019 - 2024. All rights reserved.