Skip to content

Calibration

Calibration is the core of this framework. It is divided into initial calibration and online re-calibration.

Initial Calibration

Initial calibration is usually performed once when historical data is available for a period (e.g., 30 days).

from pyadm1ode_calibration.calibration import InitialCalibrator
from pyadm1ode_calibration.io.loaders import MeasurementData

# 1. Load measurement data
measurements = MeasurementData.from_csv("hist_data.csv")

# 2. Initialize calibrator
# plant is an instance of pyadm1ode.Plant
calibrator = InitialCalibrator(plant)

# 3. Start calibration
result = calibrator.calibrate(
    measurements=measurements,
    parameters=["k_dis", "k_hyd_ch", "Y_su"],
    method="differential_evolution",
    validation_split=0.2
)

# 4. Evaluate results
print(f"Best fit: {result.objective_value}")
print(f"Calibrated parameters: {result.parameters}")

Online Re-Calibration

Online re-calibration is used to adjust the model during ongoing operation if the prediction quality decreases.

from pyadm1ode_calibration.calibration import OnlineCalibrator

calibrator = OnlineCalibrator(plant)

# Define trigger conditions
calibrator.set_trigger(
    variance_threshold=0.15,  # 15% deviation
    time_threshold=24.0       # Minimum 24h interval
)

# Check if re-calibration is necessary
if calibrator.should_recalibrate(recent_data):
    result = calibrator.calibrate(
        measurements=recent_data,
        method="nelder-mead"
    )
    if result.success:
        calibrator.apply_calibration(result)

Validation

After each calibration, a validation is automatically performed (if a validation_split was specified). You can find the results in result.validation_metrics:

  • RMSE: Root Mean Square Error
  • : Coefficient of Determination
  • NSE: Nash-Sutcliffe Efficiency