如何获得Pyomo命名表达式的求和值?

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

我使用命名表达式定义了一个抽象的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))作品

expression pyomo
1个回答
0
投票

执行此操作的最佳方法是在表达式组件本身上使用value函数而不是规则:

value(instance.ElecDemand_kw[i,j,k])
© www.soinside.com 2019 - 2024. All rights reserved.