我使用命名表达式定义了一个抽象的pyomo模型(请参见下面的代码中的“ m.ElecDemand_kW”)。我想知道如何获取named expressions.的解值,它们也称为Expression Objects.
from pyomo.environ import *
m = AbstractModel('TEST')
...
code
...
def Epr_elecDemand_kW_rule(m, b, sv, ts):
return (sum(m.Elec_Heater_kW_elec[b, sv, em, ts] for em in m.ELEC_HeaterModes)
+ sum(m.Hp_kW_elec[b, sv, hm, ts] for hm in m.HP_ALL))
m.ElecDemand_kW= Expression(m.BUILDtype, m.STOR_LiterVar, m.TS, rule=Epr_elecDemand_kW_rule)
def Obj_Funct_rule(m):
return sum(m.ElecDemand_kW[b, sv,ts] * m.t_step_seconds[ts] / 3600 / 1000 * m.ts_data["spotPrice_EpMWh",ts]
for b in m.BUILDtype
for sv in m.STOR_LiterVar
for ts in m.TS)
m.ObjectFunction = Objective(rule=Obj_Funct_rule)
instance = m.create_instance('GebaeudeV8.dat')
opt_results = opt.solve(instance, symbolic_solver_labels=True, keepfiles = True,
tee=True)
instance.solutions.store_to(opt_results)
目前,我在solve命令之后定义了一个新函数
def Epr_elecDemand_kW_calc(m, b, sv, ts):
return (sum(instance.Elec_Heater_kW_elec[b, sv, em, ts].value
for em in instance.ELEC_HeaterModes.data())
+ sum(instance.Hp_kW_elec[b, sv, hm, ts]
for hm in instance.HP_ALL.data()))
计算所需的解决方案值,然后将其复制到pandas数据框,然后将其保存到Excel。解决问题后,有没有一种简单的方法来获取命名表达式的求和值?
我刚刚发现value(Epr_elecDemand_kW_rule(instance, b, sv, ts))
作品
执行此操作的最佳方法是在表达式组件本身上使用value
函数而不是规则:
value(instance.ElecDemand_kw[i,j,k])