python - 抽象pyomo模型中的Parameters和Sets如何操作?
问题描述
我想从抽象 Pyomo 模型中的另一个参数创建一个参数。让我们假设以下示例:
from pyomo.environ import AbstractModel, Param, minimize, Var, NonNegativeIntegers, \
NonNegativeReals, RangeSet, Objective, Constraint, SolverFactory, Set, summation
model = AbstractModel ()
model.S = Set()
model.F = Set()
model.a = Param(model.S)
model.b = Param(model.a * 3)
我希望索引参数 a 的每个值都乘以 3,以便它成为参数 b。另一个问题是:如何将集合 S 和 F 组合成集合 SF?
model.SF = Set(within= model.S + model.F)
因此,如果集合 S 由 1,2 组成,集合 F 由 3,4 组成,那么集合 SF 将由 1,2,3,4 组成。
谢谢你的支持!
解决方案
所以,事实证明你可以。
如果您已经尝试过,您会注意到pyomo
如果您在构建之前尝试对集合进行任何操作,则会出现抱怨。因此,加载数据(通过您愿意使用的任何方式),然后制作一个模型instance
。请注意,如果您检查此模型的类型,instance
您将看到它是一个ConcreteModel
. 因此,您现在可以根据需要添加/操作其中的一部分,ConcreteModel
只要您将其称为已构建的“实例”。这是一个例子......(数据文件没有显示,但很容易从打印输出中推断出来)
from pyomo.environ import *
model = AbstractModel()
### SETS
model.I = Set()
model.J = Set()
### PARAMS
model.P = Param(model.I)
data = DataPortal()
data.load(filename='data1.yaml')
instance = model.create_instance(data)
instance.IJ = Set(initialize=instance.I)
instance.IJ.update(instance.J) # make IJ the union of I, J
instance.P_times_3 = Param(instance.I, initialize={k:3*v for k,v in instance.P.items()})
instance.pprint()
产量
3 Set Declarations
I : Size=1, Index=None, Ordered=Insertion
Key : Dimen : Domain : Size : Members
None : 1 : Any : 4 : {1, 2, 3, 4}
IJ : Size=1, Index=None, Ordered=Insertion
Key : Dimen : Domain : Size : Members
None : 1 : Any : 6 : {1, 2, 3, 4, 5, 6}
J : Size=1, Index=None, Ordered=Insertion
Key : Dimen : Domain : Size : Members
None : 1 : Any : 2 : {5, 6}
2 Param Declarations
P : Size=4, Index=I, Domain=Any, Default=None, Mutable=False
Key : Value
1 : 100
2 : 200
3 : 250
4 : 300
P_times_3 : Size=4, Index=I, Domain=Any, Default=None, Mutable=False
Key : Value
1 : 300
2 : 600
3 : 750
4 : 900
推荐阅读
- javascript - Axios 获取请求返回承诺而不是 NodeJS 中的状态码
- python - python循环中的变量
- javascript - 我有一个关于显示带有选择 html 标记和 JS 的项目的问题
- python - 在 windows 上的 jupyter lab 中运行时,dash 服务器文件在哪里?
- android - Android - 片段内 BillingClient 的上下文
- amazon-web-services - EMR spark 应用程序中的 java.lang.OutOfMemoryError
- twilio - 控制设备音量 Twilio.Device
- ios - 我们应该使用 UIView 还是 UIViewController 来实现以下功能?
- javascript - 使用 Angular js 从 XLSX 将数据导出到多个表
- flutter - 开始拖动 NestedScrollView 主体时的瞬时跳转