Skip to content

Troubleshooting

The calibration runs for hours

Differential evolution costs population_size x len(parameters) simulations per generation, see Configuration. Cut the parameter list first, then the population, then the generations.

result.success is False

The optimizer stopped without converging. Usually the bounds are too wide, the parameter list too long, or the window too short to contain the effect being fitted. result.message carries the reason from SciPy.

The fit is good, the values are implausible

The parameters are compensating for each other. analyze_subset puts a number on it: a collinearity index above 20 means the set cannot be resolved however good each member looks alone. Drop whichever member matters less, or fix it to a literature value. use_constraints=True adds the bound penalties to the objective.

Validation error much larger than training error

The fit followed noise. Shorten the parameter list, widen the window, or clean the data harder before fitting: remove_outliers and fill_gaps.

A load change in the data has no effect on the fit

The default collapses the feed series to its mean, so steps are invisible to the model. Pass time_varying_feed=True to the calibrator, see Configuration.

ValueError: Column 'Q_ch4' not found

The channel name in objectives does not appear in the measurement frame. measurements.data.columns shows what is actually there. CSVHandler maps common German column names, and a PlantSchema maps arbitrary tags to channel names.

Online recalibration never triggers

should_recalibrate returns a pair. if calibrator.should_recalibrate(data): is always true and tells you nothing, unpack it: needed, reason = .... The reason names the condition that held it back, most often time_threshold or consecutive_violations.

Something else

Please open an issue on GitHub.