Skip to content

Usable Models for Simulation Studies — measured_replay_physical

For simulation studies that depend on realistic consumptions, fluxes, and heat balances (not just climate curve-fit accuracy), the shipped measured_replay calibration has a limitation: it achieves its climate RMSE using non-physical fudge factors (pipe_heat_transfer_multiplier ≈ 1.5, vent_area_multiplier ≈ 2.2) that absorb lumped-model structural error. The energy balance then rests on those fudges — recalibrating for climate alone shifts them and changes the modeled heating consumption by ~2×.

measured_replay_physical is a balanced calibration: climate RMSE plus a penalty on each parameter's deviation from its physical (no-fudge) anchor (pipe≈1, vent_area≈1, ventilation_opening_scale≈1, physical U / discharge / wind coefficients), train/test validated, with heat-balance closure reported.

Parameters — fudge → physical

param anchor HPS: measured_replay_physical LED: measured_replay_physical
pipe_heat_transfer_multiplier 1.0 1.51 → 1.12 0.89 → 1.05
vent_area_multiplier 1.0 2.22 → 0.85 2.39 → 1.00
ventilation_opening_scale 1.0 1.33 → 0.99 0.25 → 1.26
vent_discharge_coefficient ~0.75 1.18 → 0.89 0.51 → 0.91
effective_envelope_u_w_m2_k physical 4.50 → 4.77 4.43 → 4.85
physical-deviation score 5.73 → 2.16 8.66 → 2.27

The parameters are now physically interpretable (multipliers near 1, coefficients in Boulard-Baille ranges), so the fluxes and consumptions the model reports are grounded rather than fit artifacts.

Accuracy trade-off (honest)

metric measured_replay _physical
HPS held-out strided T RMSE 2.36 2.27 (better)
held-out RH 9.3 7.4 (better)
heat-balance residual (held-out) 9.9 W 7.6 W (better closure)
contiguous 7-day window T 1.97 2.68 (worse)
LED held-out T RMSE 2.25 2.25 (same)
vent_area fudge 2.39 1.00 (physical, free)
  • Over the 12 representative strided windows (the canonical GreenLight OOS set), the physical model is as good or better on climate AND closes the heat balance better.
  • On the first contiguous 7-day window (what the timeseries/parity figures use), HPS is worse (2.68 vs 1.97). This one window is well-fit by the baseline's fudges; every recalibration degrades it. Weight the strided set — it samples the whole season — over this single window.

Validation — energy / balance study (HPS, 12 representative days)

metric measured_replay _physical reference
pipe_heat_transfer_multiplier 1.51 (fudge) 1.12 physical ≈ 1
vent_area_multiplier 2.22 (fudge) 0.85 physical ≈ 1
heating, ~200-day season 162.8 kWh/m² 128.0 kWh/m² 100–180 (typical NL glasshouse) ✅
heat-balance residual (closure) 9.71 W/m² 7.74 W/m² lower = better
air-temp RMSE 2.35 C 2.30 C
RH RMSE 9.73 % 8.42 %
vapour RMSE 296.9 Pa 298.5 Pa ~equal

Both profiles land inside the realistic seasonal-heating band, but the physical model reaches it with a near-physical pipe transfer (1.12 vs the 1.51 fudge) and closes the heat balance better (residual 9.7 → 7.7 W/m²), so its consumption is grounded rather than fit-inflated — trustworthy for extrapolation to closed-loop or different-weather scenarios where fudge factors would mislead.

Validation — LED energy / balance (12 representative days)

metric measured_replay _physical note
pipe_heat_transfer_multiplier 0.89 1.05 now physical
vent_area_multiplier 2.39 (fudge) 1.00 now physical (biggest win)
heating, ~200-day season 160.3 kWh/m² 189.9 kWh/m² top of / just above band
heat-balance residual 11.9 W/m² 12.5 W/m² ~equal
air-temp RMSE 2.18 C 2.18 C identical
RH RMSE 8.02 % 8.10 % ~equal
vapour RMSE 259.9 Pa 258.6 Pa ~equal (slightly better)

For LED the trade is different from HPS: the physical profile buys full parameter realism at zero climate cost (identical T, ~equal RH/VP) — the vent_area fudge collapses 2.39 → 1.00 — but seasonal heating rises to ~190 kWh/m² (top of / marginally above the 100–180 band) and balance closure is unchanged. The LED win is interpretability, not a strict accuracy improvement.

Validation — end-to-end closed-loop (project-run --solver ivp)

The physical profile was run through the production CLI path (greenflux project-run … --calibration-profile measured_replay_physical --solver ivp) for both installations — exercising the full builder → _apply_profile_to_project → IVP chain, not just the analysis script:

HPS LED
solver success (RK45, 6218 evals) success (RK45, 5576 evals)
state clipping events 0 2 supersaturation (condensation, physical)
heat (1-day case) 1.03 kWh/m²/d 0.79 kWh/m²/d
resource sanity checks all PASS¹ all PASS¹

¹ the only failing check is duration_days ≥ 7 — an artifact of the 1-day measured_open_loop case, not a physics failure. The profile wiring, IVP convergence, and consumption magnitudes are all clean end-to-end.

Default profile

Both GreenLight projects now declare "default_calibration_profile": "measured_replay_physical", so an unqualified run (greenflux project-run <project> --solver ivp, or any programmatic call passing calibration_profile_name=None) applies the physical profile. The fudge-based measured_replay is still selectable explicitly (--calibration-profile measured_replay) and its values are unchanged — dataset generation and any caller that names it are byte-for-byte unaffected. Projects that omit default_calibration_profile keep the lenient measured_replay default, so nothing else in the repo changes behaviour.

Recommendation

  • Default (energy / flux / balance simulation studies): measured_replay_physical — physical parameters, better balance closure, grounded consumptions. Now the project default, so no flag is needed.
  • Pure climate reproduction on the training window: select measured_replay explicitly — it still has the tightest curve-fit there.
  • CO2 is a diagnostic, not a prediction in either profile — the dataset's injection signal is uninformative (off 97% of the time while CO2 is dosed to ~780 ppm); see the CO2 notes in the uncertainty and residual-diagnostics notes (internal).
  • measured_replay is retained byte-stable (dataset generation unaffected).

Figures: outputs/calibration/validation_figures/{hps,led}_physical/. Params: outputs/calibration/balanced_params_{hps,led}.json.