FastModel against Buildings and IDEAS
The models of the FastModel library translate into a CasADi ODE: FastModel simulates the building in closed
loop with its own controllers, FastModelMPC takes the controls as inputs for optimal control. How close they stay
to the Buildings and IDEAS models of the same YAML file is measured by validation/mpc, in two ways:
--models FastModelreplays the controls of the reference through the runnableFastModelMPCmodel: the envelope, the zones and the systems are compared with the controls taken out of the comparison;--models FastModelClosedLoopsimulates the closed-loopFastModelmodel with its own controllers, as the reference runs with its own: nothing is replayed.
python -m validation.mpc compare 600FF residential_before --models FastModel FastModelClosedLoop
python -m validation.mpc compare residential_after --models FastModel FastModelClosedLoop --references Buildings IDEAS
python -m validation.mpc report
The same command compares the flat RC models of the mpc library (--models R1C1 R3C2 R4C3 ISO13790).
For each case the Buildings model (or the IDEAS model, --references IDEAS) is simulated with its own controls,
then the runnable model of the other library replays what its systems did:
- the heat of the ideal emitters of each zone, for the envelope cases;
- the flow of each radiator branch, the position of each three-way valve and the part load ratio of the boiler
(or the speed of the heat pump compressor), for the hydronic cases, and the air flow of the ventilation unit.
Everything else is simulated by the
FastModelmodel: the production, the water circuits, the radiators, the ventilation, the PV array and the zones.
Weather, solar irradiance (direct, Perez diffuse) and occupancy come from the same Buildings blocks in both models. The zone air temperatures are compared every 15 minutes; the radiator heat hour by hour (ASHRAE Guideline 14 CV(RMSE) and NMBE); the water temperatures of the circuits every 15 minutes. The thermostatic valves of the hydronic cases modulate the flows faster than that, so their Buildings reference is recorded every minute and the controls are replayed as means over 5 minutes, which conserves the heat the water carries.
Thresholds
| Stage | Compared outputs | Threshold |
|---|---|---|
| Envelope, single zone (BESTEST) | free-floating zone temperature | RMSE ≤ 1.0 K |
| Envelope, several zones | heated zone temperatures | RMSE ≤ 0.5 K |
| Emitters | radiator heat | CV(RMSE) ≤ 15 %, NMBE within ±5 % |
| Distribution and production | water temperatures, zone temperatures | RMSE ≤ 1 K, zone RMSE ≤ 0.5 K |
Results: replaying the controls
Generated by python -m validation.mpc report (28 days in January for the multi-zone cases, a year for
BESTEST). The water temperatures are compared while the water circulates (at least 10 % of the largest radiator
flow): the temperature a sensor reads in a pipe without flow is that of the water standing there, not of the
circuit. The reference models are generated with trano's default simulation performance options (actuators without
stroke time, sensors without dynamics).
| Case | Model | Reference | Zone | RMSE [K] | Bias [K] | Max error [K] | Mean reference [degC] | Heat [kWh] | Radiator heat CV(RMSE) | Radiator heat NMBE |
|---|---|---|---|---|---|---|---|---|---|---|
| 600FF | FastModel | Buildings | zone_001 | 0.39 | +0.09 | 1.64 | 24.66 | 0 | ||
| 900FF | FastModel | Buildings | zone_001 | 0.33 | -0.08 | 1.42 | 24.93 | 0 | ||
| 600 | FastModel | Buildings | zone_001 | 0.65 | -0.07 | 2.73 | 23.12 | -1523 | ||
| 900 | FastModel | Buildings | zone_001 | 0.41 | -0.11 | 1.76 | 24.04 | -677 | ||
| three_zones_ideal | FastModel | Buildings | space_001 | 0.18 | -0.03 | 0.77 | 18.46 | 1441 | ||
| three_zones_ideal | FastModel | Buildings | space_002 | 0.22 | -0.03 | 1.07 | 18.51 | 793 | ||
| three_zones_ideal | FastModel | Buildings | space_003 | 0.49 | -0.05 | 1.69 | 18.50 | 683 | ||
| heat_pump_house | FastModel | Buildings | bedroom_1_001 | 0.18 | +0.10 | 0.84 | 18.76 | 57 | 3.2 % | +0.6 % |
| heat_pump_house | FastModel | Buildings | livingroom_001 | 0.28 | +0.18 | 0.67 | 18.59 | 146 | 3.0 % | -0.2 % |
| heat_pump_house | FastModel | Buildings | kitchen_001 | 0.33 | +0.20 | 1.03 | 20.09 | 64 | 3.0 % | -0.2 % |
| heat_pump_house | FastModel | Buildings | bathroom_001 | 0.21 | +0.11 | 1.65 | 20.94 | 41 | 3.5 % | +0.1 % |
| heat_pump_house | FastModel | Buildings | bedroom_2_001 | 0.22 | +0.18 | 0.92 | 19.72 | 82 | 2.3 % | -0.6 % |
| heat_pump_house | FastModel | Buildings | bedroom_3_001 | 0.15 | +0.09 | 0.52 | 18.17 | 4 | 27.7 % | +2.3 % |
| residential_before | FastModel | Buildings | living_001 | 0.17 | -0.11 | 0.50 | 19.35 | 827 | 1.2 % | -0.2 % |
| residential_before | FastModel | Buildings | kitchen_001 | 0.14 | -0.07 | 0.53 | 19.35 | 414 | 1.1 % | -0.2 % |
| residential_before | FastModel | Buildings | bedroom_1_001 | 0.15 | -0.07 | 0.53 | 17.32 | 482 | 0.8 % | -0.3 % |
| residential_before | FastModel | Buildings | bedroom_2_001 | 0.14 | -0.07 | 0.71 | 17.31 | 544 | 0.7 % | -0.3 % |
| residential_before | FastModel | Buildings | bedroom_3_001 | 0.12 | -0.06 | 0.51 | 17.32 | 250 | 0.8 % | -0.3 % |
| residential_before | FastModel | Buildings | bathroom_001 | 0.20 | -0.05 | 1.35 | 17.58 | 239 | 2.8 % | -0.3 % |
| residential_after | FastModel | Buildings | living_001 | 0.17 | -0.13 | 0.56 | 20.16 | 201 | 1.8 % | -0.3 % |
| residential_after | FastModel | Buildings | kitchen_001 | 0.14 | -0.09 | 0.34 | 20.08 | 125 | 1.8 % | -0.6 % |
| residential_after | FastModel | Buildings | bedroom_1_001 | 0.13 | -0.08 | 0.38 | 18.14 | 23 | 2.9 % | -0.2 % |
| residential_after | FastModel | Buildings | bedroom_2_001 | 0.12 | -0.08 | 0.34 | 17.90 | 46 | 2.3 % | -0.3 % |
| residential_after | FastModel | Buildings | bedroom_3_001 | 0.12 | -0.06 | 0.36 | 18.02 | 15 | 2.2 % | -0.4 % |
| residential_after | FastModel | Buildings | bathroom_001 | 0.13 | -0.06 | 0.49 | 19.10 | 51 | 4.3 % | -0.6 % |
| residential_after | FastModel | IDEAS | living_001 | 0.36 | +0.25 | 0.98 | 20.14 | 215 | 1.8 % | -0.5 % |
| residential_after | FastModel | IDEAS | kitchen_001 | 0.36 | +0.25 | 1.01 | 20.08 | 129 | 1.6 % | -0.5 % |
| residential_after | FastModel | IDEAS | bedroom_1_001 | 0.32 | +0.14 | 0.84 | 18.11 | 21 | 3.3 % | +0.8 % |
| residential_after | FastModel | IDEAS | bedroom_2_001 | 0.31 | +0.16 | 0.83 | 17.88 | 45 | 2.2 % | +0.5 % |
| residential_after | FastModel | IDEAS | bedroom_3_001 | 0.33 | +0.18 | 0.86 | 17.99 | 14 | 2.4 % | +0.4 % |
| residential_after | FastModel | IDEAS | bathroom_001 | 0.39 | +0.23 | 1.16 | 19.05 | 52 | 4.1 % | -0.7 % |
| Case | Model | Reference | Water temperature | RMSE [K] | Bias [K] | Mean reference [degC] | Time compared (circulating) |
|---|---|---|---|---|---|---|---|
| heat_pump_house | FastModel | Buildings | boiler_001 supply | 0.66 | +0.09 | 37.8 | 64 % |
| heat_pump_house | FastModel | Buildings | boiler_001 return | 1.35 | +0.08 | 26.6 | 64 % |
| heat_pump_house | FastModel | Buildings | temperature_sensor_001 | 1.21 | +0.10 | 37.8 | 64 % |
| residential_before | FastModel | Buildings | generator_001 supply | 0.55 | -0.18 | 74.7 | 84 % |
| residential_before | FastModel | Buildings | generator_001 return | 1.40 | -0.30 | 39.6 | 84 % |
| residential_before | FastModel | Buildings | temperature_sensor_001 | 0.57 | -0.23 | 74.7 | 84 % |
| residential_after | FastModel | Buildings | generator_001 supply | 0.72 | -0.09 | 35.4 | 68 % |
| residential_after | FastModel | Buildings | generator_001 return | 1.75 | -0.49 | 29.3 | 68 % |
| residential_after | FastModel | Buildings | temperature_sensor_001 | 1.39 | -0.05 | 35.3 | 68 % |
| residential_after | FastModel | Buildings | ahu_001 supply air | 0.30 | +0.29 | 16.0 | 100 % |
| residential_after | FastModel | IDEAS | generator_001 supply | 0.80 | +0.28 | 35.4 | 69 % |
| residential_after | FastModel | IDEAS | generator_001 return | 1.68 | -0.11 | 29.6 | 69 % |
| residential_after | FastModel | IDEAS | temperature_sensor_001 | 1.41 | +0.32 | 35.4 | 69 % |
| residential_after | FastModel | IDEAS | ahu_001 supply air | 0.27 | +0.16 | 16.4 | 100 % |
| Case | Model | Reference | System | Energy | Reference [kWh] | Model [kWh] | Deviation |
|---|---|---|---|---|---|---|---|
| heat_pump_house | FastModel | Buildings | boiler_001 | electricity | 117.9 | 116.0 | -1.6 % |
| residential_before | FastModel | Buildings | generator_001 | fuel | 3387.0 | 3387.1 | +0.0 % |
| residential_after | FastModel | Buildings | generator_001 | electricity | 130.6 | 128.3 | -1.8 % |
| residential_after | FastModel | Buildings | ahu_001 | electricity | 17.2 | 17.0 | -0.6 % |
| residential_after | FastModel | Buildings | pv_001 | production | 139.3 | 139.3 | +0.0 % |
| residential_after | FastModel | IDEAS | generator_001 | electricity | 134.8 | 133.5 | -1.0 % |
| residential_after | FastModel | IDEAS | ahu_001 | electricity | 17.2 | 16.8 | -2.1 % |
| residential_after | FastModel | IDEAS | pv_001 | production | 139.3 | 139.3 | +0.0 % |
Results: closed loop
The closed-loop FastModel model of each case, with its own controllers and pressure-driven water circuits, against
the reference with its own controls (the column Heat is the heat of the reference):
| Case | Model | Reference | Zone | RMSE [K] | Bias [K] | Max error [K] | Mean reference [degC] | Heat [kWh] | Radiator heat CV(RMSE) | Radiator heat NMBE |
|---|---|---|---|---|---|---|---|---|---|---|
| 600FF | FastModelClosedLoop | Buildings | zone_001 | 0.39 | +0.08 | 1.63 | 24.66 | 0 | ||
| 900FF | FastModelClosedLoop | Buildings | zone_001 | 0.33 | -0.09 | 1.42 | 24.93 | 0 | ||
| 600 | FastModelClosedLoop | Buildings | zone_001 | 0.06 | -0.01 | 0.51 | 23.12 | -1523 | ||
| 900 | FastModelClosedLoop | Buildings | zone_001 | 0.14 | -0.02 | 0.74 | 24.04 | -677 | ||
| three_zones_ideal | FastModelClosedLoop | Buildings | space_001 | 0.06 | +0.01 | 0.95 | 18.46 | 1441 | ||
| three_zones_ideal | FastModelClosedLoop | Buildings | space_002 | 0.08 | +0.02 | 0.91 | 18.51 | 793 | ||
| three_zones_ideal | FastModelClosedLoop | Buildings | space_003 | 0.11 | +0.02 | 1.01 | 18.50 | 683 | ||
| heat_pump_house | FastModelClosedLoop | Buildings | bedroom_1_001 | 0.18 | +0.13 | 0.82 | 18.76 | 57 | 9.6 % | +0.5 % |
| heat_pump_house | FastModelClosedLoop | Buildings | livingroom_001 | 0.21 | +0.12 | 0.78 | 18.59 | 146 | 15.2 % | -1.8 % |
| heat_pump_house | FastModelClosedLoop | Buildings | kitchen_001 | 0.25 | +0.15 | 0.78 | 20.09 | 64 | 13.3 % | -2.0 % |
| heat_pump_house | FastModelClosedLoop | Buildings | bathroom_001 | 0.15 | +0.08 | 0.69 | 20.94 | 41 | 16.0 % | -4.1 % |
| heat_pump_house | FastModelClosedLoop | Buildings | bedroom_2_001 | 0.16 | +0.09 | 0.63 | 19.72 | 82 | 9.3 % | -3.1 % |
| heat_pump_house | FastModelClosedLoop | Buildings | bedroom_3_001 | 0.15 | +0.11 | 0.52 | 18.17 | 4 | 106.7 % | -9.6 % |
| residential_before | FastModelClosedLoop | Buildings | living_001 | 0.06 | +0.01 | 0.47 | 19.35 | 827 | 4.1 % | +1.9 % |
| residential_before | FastModelClosedLoop | Buildings | kitchen_001 | 0.07 | +0.02 | 0.43 | 19.35 | 414 | 2.7 % | +0.8 % |
| residential_before | FastModelClosedLoop | Buildings | bedroom_1_001 | 0.05 | +0.01 | 0.53 | 17.32 | 482 | 2.7 % | +0.3 % |
| residential_before | FastModelClosedLoop | Buildings | bedroom_2_001 | 0.05 | +0.01 | 0.51 | 17.31 | 544 | 1.9 % | +0.3 % |
| residential_before | FastModelClosedLoop | Buildings | bedroom_3_001 | 0.05 | +0.01 | 0.51 | 17.32 | 250 | 2.1 % | +0.0 % |
| residential_before | FastModelClosedLoop | Buildings | bathroom_001 | 0.11 | +0.01 | 0.69 | 17.58 | 239 | 4.4 % | +0.0 % |
| residential_after | FastModelClosedLoop | Buildings | living_001 | 0.10 | -0.03 | 0.61 | 20.16 | 201 | 10.7 % | +1.0 % |
| residential_after | FastModelClosedLoop | Buildings | kitchen_001 | 0.10 | -0.02 | 0.58 | 20.08 | 125 | 5.8 % | -0.9 % |
| residential_after | FastModelClosedLoop | Buildings | bedroom_1_001 | 0.07 | +0.02 | 0.41 | 18.14 | 23 | 14.6 % | +4.8 % |
| residential_after | FastModelClosedLoop | Buildings | bedroom_2_001 | 0.06 | +0.02 | 0.40 | 17.90 | 46 | 6.6 % | +2.1 % |
| residential_after | FastModelClosedLoop | Buildings | bedroom_3_001 | 0.07 | +0.03 | 0.40 | 18.02 | 15 | 9.1 % | +2.6 % |
| residential_after | FastModelClosedLoop | Buildings | bathroom_001 | 0.14 | -0.01 | 0.66 | 19.10 | 51 | 11.7 % | -3.7 % |
| residential_after | FastModelClosedLoop | IDEAS | living_001 | 0.14 | -0.02 | 0.88 | 20.14 | 215 | 14.7 % | -5.4 % |
| residential_after | FastModelClosedLoop | IDEAS | kitchen_001 | 0.14 | -0.02 | 0.88 | 20.08 | 129 | 10.3 % | -4.4 % |
| residential_after | FastModelClosedLoop | IDEAS | bedroom_1_001 | 0.20 | +0.05 | 0.96 | 18.11 | 21 | 24.6 % | +14.4 % |
| residential_after | FastModelClosedLoop | IDEAS | bedroom_2_001 | 0.19 | +0.05 | 0.95 | 17.88 | 45 | 11.5 % | +3.2 % |
| residential_after | FastModelClosedLoop | IDEAS | bedroom_3_001 | 0.20 | +0.06 | 0.94 | 17.99 | 14 | 17.6 % | +8.3 % |
| residential_after | FastModelClosedLoop | IDEAS | bathroom_001 | 0.23 | +0.03 | 1.05 | 19.05 | 52 | 16.9 % | -5.5 % |
| Case | Model | Reference | Water temperature | RMSE [K] | Bias [K] | Mean reference [degC] | Time compared (circulating) |
|---|---|---|---|---|---|---|---|
| heat_pump_house | FastModelClosedLoop | Buildings | boiler_001 supply | 2.02 | -0.10 | 37.8 | 64 % |
| heat_pump_house | FastModelClosedLoop | Buildings | boiler_001 return | 1.77 | -0.38 | 26.6 | 64 % |
| heat_pump_house | FastModelClosedLoop | Buildings | temperature_sensor_001 | 2.23 | -0.10 | 37.8 | 64 % |
| residential_before | FastModelClosedLoop | Buildings | generator_001 supply | 0.11 | -0.02 | 74.7 | 84 % |
| residential_before | FastModelClosedLoop | Buildings | generator_001 return | 1.82 | +0.02 | 39.6 | 84 % |
| residential_before | FastModelClosedLoop | Buildings | temperature_sensor_001 | 0.14 | -0.08 | 74.7 | 84 % |
| residential_after | FastModelClosedLoop | Buildings | generator_001 supply | 1.93 | -0.23 | 35.4 | 68 % |
| residential_after | FastModelClosedLoop | Buildings | generator_001 return | 2.07 | -0.48 | 29.3 | 68 % |
| residential_after | FastModelClosedLoop | Buildings | temperature_sensor_001 | 2.26 | -0.19 | 35.3 | 68 % |
| residential_after | FastModelClosedLoop | Buildings | ahu_001 supply air | 0.37 | +0.36 | 16.0 | 100 % |
| residential_after | FastModelClosedLoop | IDEAS | generator_001 supply | 1.96 | -0.28 | 35.4 | 69 % |
| residential_after | FastModelClosedLoop | IDEAS | generator_001 return | 2.12 | -0.76 | 29.6 | 69 % |
| residential_after | FastModelClosedLoop | IDEAS | temperature_sensor_001 | 2.27 | -0.24 | 35.4 | 69 % |
| residential_after | FastModelClosedLoop | IDEAS | ahu_001 supply air | 0.12 | +0.01 | 16.4 | 100 % |
| Case | Model | Reference | System | Energy | Reference [kWh] | Model [kWh] | Deviation |
|---|---|---|---|---|---|---|---|
| heat_pump_house | FastModelClosedLoop | Buildings | boiler_001 | electricity | 117.9 | 114.3 | -3.1 % |
| residential_before | FastModelClosedLoop | Buildings | generator_001 | fuel | 3387.0 | 3427.2 | +1.2 % |
| residential_after | FastModelClosedLoop | Buildings | generator_001 | electricity | 130.6 | 129.2 | -1.1 % |
| residential_after | FastModelClosedLoop | Buildings | ahu_001 | electricity | 17.2 | 16.8 | -2.1 % |
| residential_after | FastModelClosedLoop | Buildings | pv_001 | production | 139.3 | 139.3 | +0.0 % |
| residential_after | FastModelClosedLoop | IDEAS | generator_001 | electricity | 134.8 | 129.2 | -4.1 % |
| residential_after | FastModelClosedLoop | IDEAS | ahu_001 | electricity | 17.2 | 16.8 | -2.1 % |
| residential_after | FastModelClosedLoop | IDEAS | pv_001 | production | 139.3 | 139.3 | +0.0 % |
Reading the results
Envelope. The FastModel zone follows Buildings within 0.33–0.39 K (RMSE) in the free-floating BESTEST
cases, against 2.3–7.3 K for the RC models of the mpc library on the same YAML file: the RC models aggregate the envelope into one
to three capacities whose parameters come from the constructions, without calibration, and they lose the
fast exchanges between the window, the floor and the air that drive a free-floating zone. In the heated and
cooled BESTEST cases the replay of the Buildings heat is open loop, so that any difference accumulates until the
envelope removes it; the FastModel zone stays within 0.41–0.65 K.
Multi-zone envelope. With walls and floors shared between zones, the three-zone house stays within 0.18–0.49 K of Buildings (RC models: 1.2–2.8 K).
Hydronics. In the three hydronic houses (the residential house before renovation with its gas boiler, after
renovation with its heat pump, ventilation and PV, and the heat pump test house), only the branch flows, the three-way valve positions and the boiler part
load ratio or the heat pump compressor speed are replayed; the production, the water circuits, the radiators and
the zones are simulated by the FastModel model. The radiators deliver the heat of Buildings within 0.7–4.3 % CV(RMSE)
and a bias below 1 % (the 28 % of the nearly unheated bedroom 3 of the heat pump house is on 4 kWh in four
weeks); the zones follow within 0.12–0.33 K; the boiler supply and the heat pump buffer within 0.55–0.75 K. The
supply errors were 0.3–0.5 K before the Buildings models took trano's default performance options, with the same
zone temperatures and meters: most likely the Buildings sensors, now without dynamics, follow every start and stop
of the production that the 5-minute replay smooths. The meters of
the renovated house follow Buildings over the four weeks: heat pump electricity −1.8 % (−1.6 % in the heat pump
test house), fans −0.6 %, PV
production 0.0 %.
IDEAS. The renovated house is also replayed from its IDEAS simulation: FastModel stays within 0.31–0.39 K of the IDEAS zones, 0.14–0.25 K too warm on average, the radiators within 1.6–4.1 % CV(RMSE), the heat pump electricity within −1.0 % and the fans within −2.1 %. The envelope of FastModel is that of Buildings: the bias comes from the envelope models of the two libraries, above all the ground below the slab (ISO 13370 in IDEAS, a fixed temperature in Buildings and FastModel). See the FastModel reference for the figures.
Ventilation. The supply air of the renovated house's unit stays within 0.30 K of Buildings, 0.29 K too warm on
average: in Buildings the extract flow is 3 % below the supply flow (part of the supply leaves through the
infiltration paths of the zones, as the pressures set it), so that the heat exchanger recovers on a smaller
stream; the FastModel unit is balanced. The
return temperatures (1.35–1.75 K, small bias) mix the outlets of radiators whose flows the thermostatic valves
modulate within the replay interval.
Closed loop. With its own controllers, FastModel follows the zones of Buildings within 0.05–0.25 K, closer than the replay: a controller corrects the small differences of the envelope as the Buildings controller does, where the replayed heat is open loop (BESTEST 600 and 900: 0.06 and 0.14 K against 0.65 and 0.41 K). The free-floating cases have no controller and match the replay. Against IDEAS, the renovated house stays within 0.14–0.23 K. The meters follow within a few percent: boiler fuel +1.2 %, heat pump electricity −1.1 to −3.1 % (−4.1 % against IDEAS), fans −2.1 %, PV 0.0 %. The boiler supply follows within 0.11 K. The heat pump circuits differ most: the supply and return water within about 2 K and the radiator heat within 6–16 % CV(RMSE) hour by hour (the bedrooms that barely need heat aside), because the heat pump of FastModel has no minimum on and off times and its hysteresis switches within 10 s, so that it starts and stops at other instants than in Buildings.
Differences that remain
- In the replay, each
ValveofFastModelMPCsets the flow of its branch,y·m_flow_nominal, as an MPC decides it; in Buildings the flow that a valve opening gives depends on the pressures of the whole circuit. The closed-loopFastModelcomputes them, with the resistances linearised at their nominal flows. - The closed-loop controllers have no event: a hysteresis switches within 10 s, and the heat pump has no minimum on and off times (see above).
- The heat pump interpolates the EN 14511 tables in the source temperature as Buildings does, smoothed at the knots, and is quadratic in the condenser temperature (within 1 % of the tables up to 55 °C); its condenser outlet is approximated explicitly from the buffer temperature.
- Ventilation units are balanced (see above).