让我举个例子:
请注意,我的模型是具体模型。对于抽象的我想你应该
将元素或值添加到您的 .dat 文件中?
假设我有一个显示所有站点的站点集和一个显示所有过程的专业集-可用-。 OFC 您需要更改 initialize 部分,因为您没有我的任何数据框(数据)。
m.sit = pyomo.Set(
initialize=data['site'].index.get_level_values(0).unique())
m.pro = pyomo.Set(
initialize=m.process.index.get_level_values('Process').unique())
看起来是这样的:(红色的是套装的元素)
(Pdb) master.sit.pprint()
sit : Set of sites
Dim=0, Dimen=1, Size=3, Domain=None, Ordered=False, Bounds=None
['Mid', 'North', 'South']
(Pdb) master.pro.pprint()
pro : Set of conversion processes
Dim=0, Dimen=1, Size=8, Domain=None, Ordered=False, Bounds=None
['Biomass plant', 'Coal plant', 'Gas plant', 'Hydro plant', 'Lignite plant', 'Photovoltaics', 'Slack powerplant', 'Wind park']
现在我想将它们合并成一个元组,它将所有的元素和坐在一起。
m.pro_tuples = pyomo.Set(
within=m.sit*m.pro,
initialize=m.process.index.remove_unused_levels())
OFC 你需要改变 init.部分。但是剩下的就是你如何声明一个元组(m.sit*m.pro),然后你可以给一个约束pro_tuples作为索引,然后你就会得到你的多级索引。
(Pdb) master.pro_tuples.pprint()
pro_tuples : Combinations of possible processes, e.g. (North,Coal plant)
Dim=0, Dimen=2, Size=21, Domain=pro_tuples_domain, Ordered=False, Bounds=None
[('Mid', 'Biomass plant'), ('Mid', 'Gas plant'), ('Mid', 'Hydro plant'), ('Mid', 'Lignite plant'), ('Mid', 'Photovoltaics'), ('Mid', 'Slack powerplant'), ('Mid', 'Wind park'), ('North', 'Biomass plant'), ('North', 'Coal plant'), ('North', 'Gas plant'), ('North', 'Hydro plant'), ('North', 'Photovoltaics'), ('North', 'Slack powerplant'), ('North', 'Wind park'), ('South', 'Biomass plant'), ('South', 'Coal plant'), ('South', 'Gas plant'), ('South', 'Hydro plant'), ('South', 'Photovoltaics'), ('South', 'Slack powerplant'), ('South', 'Wind park')]
例如:
m.def_process_capacity = pyomo.Constraint(
m.pro_tuples,
rule=def_process_capacity_rule,
doc='total process capacity = inst-cap + new capacity')