pyomo - 如何使用 Pyomo DataPortal 导入具有 3 个 indizes 的参数?(抽象模型,Excel 导入)
问题描述
我有个问题。我想描述一个用于一般生产计划的抽象优化模型。我有一个巨大的 excel 数据框,其中包含很多参数值。我想导入它们,但是具有 3 个索引的参数存在构造错误。我不理解失败,因为值的预览是完美的。
仅供参考:如果我使用一个或两个索引导入参数,则没有错误消息。如果我在我的 jupyter 笔记本中初始化参数值(也有 3 个索引),也没有错误。但我的愿望是,数据框和 jupyter notebook 是分开的。
这是我的问题的一个简短的虚构示例:
m.K = Set(initialize=['Golf','eGolf'], doc='Produkte K')
m.T = Set(initialize=['1','2','3','4','5','6','7','8','9','10','11','12'], doc='Perioden T')
m.J = Set(initialize=['Seg1','Seg2'], doc='Produktionssegmente J')
m.W = Set(initialize=['WOB','Z','DD'], doc='Werke W')
m.bc = Param(m.W, m.K, doc='var. Fremdbezugskosten im Werk w für das Produkt k')
m.bmax = Param(m.W, m.K, m.T, doc='max. verfügbare Zusatzkapazität im Werk w für Produkt k in Periode t')
m.cmax = Param(m.W, m.J, m.T, doc='verfügbare Normalkapazität im Werk w für Segment J in Periode t')
m.d = Param(m.W, m.K, m.T, doc='Bedarf im Werkw für Produkt k in Periode t')
...
导入参数值:
...
data.load(filename='Dataframe.xlsx',range='A8:D80', param=m.bmax)
data.load(filename='Dataframe.xlsx',range='F8:I80', param='cmax', index=('W','K','T'))
...
错误:
Failed to set value for param=bmax, index=('WOB', 'Golf', 1.0), value=0.0.
source error message="Index '('WOB', 'Golf', 1.0)' is not valid for indexed component 'bmax'"
对于具有 3 个索引的每个参数,都会出现此错误。但是如果我直接在 jupyter notebook 中初始化这个表单,模型就会运行。我不明白逻辑:(
如果您对我的问题有解决方案,我真的很感激。最好的问候 PE
解决方案
欢迎来到该网站。
我相信您在上述模型中的问题是您将集合设置m.T
为strings
成员而不是整数。
这是一个我认为出错的例子,以 aConcreteModel
为例......
from pyomo.environ import *
m = ConcreteModel()
m.I = Set(initialize=[1,'5',10]) # mixed type set for demo only.
m.c = Param(m.I, within=NonNegativeReals, mutable=True)
m.c[1] = 2.4 # OK
m.c[5] = 3.2 # FAILS
m.pprint()
如果你要声明你的集合而不加载它们,我会这样声明集合:
m.T = Set(initialize=range(1, 13), doc='Perioden T')
推荐阅读
- javascript - JavaScript:从 JSON 数组中获取元素
- java - 为什么我需要转换 myCollection.toArray(new String[0]) 的结果
- windows - PowerShell 会话中的字符编码 (UTF-8)
- swift - Vapor 部署 -> 错误:找不到存储库
- c# - 将泛型类转换为其继承类
- javascript - JavaScript 函数以 JSON 形式返回对象
- python-3.x - 使用时间合并两个文件
- c# - 依赖注入到 Roslyn 分析器
- wordpress - 如何一次将多个网址替换为一个特定的网址?
- python - Python正则表达式多次重复相同的匹配