Как получить значения sulution для именованных выражений Pyomo? - PullRequest
0 голосов
/ 06 ноября 2019

Я определил абстрактную модель pyomo, используя именованные выражения (см. «M.ElecDemand_kW» в приведенном ниже коде). Интересно, как получить значение решения для именованных выражений. Они также называются Объектами выражений.

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)  

В данный момент я определяю после команды решения aновая функция

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. Есть ли простой способ получить значения sulution именованных выражений после решения проблемы?

Я только что узнал, что value(Epr_elecDemand_kW_rule(instance, b, sv, ts)) работает

1 Ответ

0 голосов
/ 06 ноября 2019

Лучший способ сделать это - использовать функцию value в самом компоненте Expression вместо правила:

value(instance.ElecDemand_kw[i,j,k])
...