-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfit_pcnn.py
More file actions
103 lines (79 loc) · 4.35 KB
/
Copy pathfit_pcnn.py
File metadata and controls
103 lines (79 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import time
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from tqdm import tqdm
import lightning as L
from pathlib import Path
import pickle
import torch
from bems.helpers.data import load_simulation_results
from error_compensation.models import Features as F
from bems.config import EMSConfig, AdaptedSimXEMSConfig
from bems.helpers.data import prepare_pcnn_training_data
from model_fitting.pcnn import S_PCNN_MLP, train_pcnn, setup_pcnn_residual_estimator
from model_fitting.interfaces import Topology
from model_fitting.utility import build_state_space_model, get_parameters_from_bems_config, default_bems_topology
#%%
# results_path = Path(r"C:\Users\re902174\workspaces\Hierarchical MPC\robustification\bems-cosimos\analysis\journal_publication_study\final_results\year_monolithic_dt_240412_163803")
results_path = Path(r"C:\Users\re902174\workspaces\Hierarchical MPC\robustification\bems-cosimos\simulations\model_fitting\results\year_2021_simple_rbc_dt_fixed_windows_240925_100119")
parameter_directory = Path(r"C:\Users\re902174\workspaces\Hierarchical MPC\robustification\bems-cosimos\data\fitted_models\simple_rbc_fixed_windows")
compensator_directory = Path(r"C:\Users\re902174\workspaces\Hierarchical MPC\robustification\bems-cosimos\data\compensators\fitted_models\simple_rbc_fixed_windows")
# linear_parameter_source = r"C:\Users\re902174\workspaces\Hierarchical MPC\robustification\bems-cosimos\data\fitted_models\fitted_parameters_exact_other_2021.pkl"
linear_parameter_sources = [
parameter_directory.joinpath("fitted_parameters_simple_rbc_fixed_windows_other__2021.pkl"),
parameter_directory.joinpath("fitted_parameters_simple_rbc_fixed_windows_other_internal__2021.pkl"),
parameter_directory.joinpath("fitted_parameters_simple_rbc_fixed_windows_other_internal_summer__2021.pkl"),
parameter_directory.joinpath("fitted_parameters_simple_rbc_fixed_windows_other_summer__2021.pkl"),
]
state_space_models = {
"exact": EMSConfig(),
"exact_adapted": AdaptedSimXEMSConfig()
}
dump = True
experiment_name = "pcnn"
data = load_simulation_results(results_path)
features, labels = prepare_pcnn_training_data(data)
# define system and topology
Q_total_cols = [f"Q_total_{i}" for i in default_bems_topology.room_numbers]
nn_feature_columns = F.base_features + F.cyclic_tod_features + F.cyclic_dow_features + F.pv_feature + F.server_load
#%%
parameter_set = {}
for linear_parameter_source in linear_parameter_sources:
with open(linear_parameter_source, "rb") as fh:
initial_fitted_parameters = pickle.load(fh)
parameterization = (
linear_parameter_source.name
.replace("fitted_parameters_", "")
.replace(".pkl", "")
)
parameter_set[parameterization] = initial_fitted_parameters
for label, config in state_space_models.items():
exact_linear_parameters = get_parameters_from_bems_config(config)
parameter_set[label] = exact_linear_parameters
for parameterization, initial_fitted_parameters in (pbar := tqdm(parameter_set.items())):
pbar.set_postfix_str(parameterization)
pcnn, training_features, scaler_x, scaler_y = train_pcnn(
topology=default_bems_topology,
features=features,
labels=labels,
temperature_columns=F.interior_temp,
power_columns=Q_total_cols,
ambient_temperature_column=F.ambient_temp[0],
nn_feature_columns=nn_feature_columns,
initial_parameter_values=initial_fitted_parameters,
)
fitted_state_space_model = build_state_space_model(default_bems_topology, pcnn.linear_parameters)
fitted_parameters = pcnn.linear_parameters
pcnn_residual_compensator = setup_pcnn_residual_estimator(pcnn, scaler_x, scaler_y)
if dump:
parameter_directory.mkdir(parents=True, exist_ok=True)
compensator_directory.mkdir(parents=True, exist_ok=True)
parametrization_string = f"{experiment_name}_{parameterization}"
# file_name = f"fitted_state_space_{parametrization_string}.pkl"
# with open(dump_directory.joinpath(file_name), "wb") as fh:
# pickle.dump(fitted_state_space_model, fh)
file_name = f"fitted_parameters_{parametrization_string}.pkl"
with open(parameter_directory.joinpath(file_name), "wb") as fh:
pickle.dump(fitted_parameters, fh)
pcnn_residual_compensator.dump(compensator_directory.joinpath(f"pcnn_res_{parametrization_string}.pkl"))