Skip to main content
Calibration is the process of adjusting your model so that what it produces for past years closely matches what actually happened — the real installed capacity, the real generation mix, and the real emissions. Only once a model can reproduce the past with reasonable accuracy should you trust it to say anything useful about the future. This guide walks through the full calibration process for a Scenario Builder “calibrated scenario” model, from initial setup through to final checks. It is aimed at anyone running calibration, regardless of your prior modelling experience.

What good calibration looks like

A calibrated model should, for each base year:
  • Match installed capacity (GW) by technology to within ±5–10% of official statistics
  • Match electricity generation (TWh) by technology to within ±5–10% of historical data
  • Match total CO₂ emissions (MtCO₂) to within ±5–10% of a national inventory or IEA/IRENA baseline
These three metrics are your calibration targets. If all three are within tolerance, the model is considered calibrated and ready for future-year scenario analysis.

Before you start: what to fix before calibration

Before touching any calibration lever, make sure the following inputs are already set correctly and will not change during calibration. Adjusting these during calibration risks invalidating earlier work. Think of these as the structural assumptions of your model. Calibration is about fine-tuning around these, not changing them.

What you can adjust: the calibration levers

Calibration is done by adjusting a specific set of parameters. These are: Residual capacity — the amount of existing installed capacity inherited from the real world. Getting this right is foundational: if your model starts with the wrong amount of coal or solar capacity, every other output will be off. Availability factors — a constraint on how much of the time a technology can operate, expressed as a fraction of the year. For example, an availability factor of 0.7 means a plant can only generate during 70% of the year. This is used to reflect planned outages, seasonal constraints, or fuel supply limitations. There are two variants:
  • availability_factor: the maximum fraction of time a technology can operate in any hour or timeslice
  • availability_factor_annual_min: the minimum fraction of time a technology must operate across the year (used to force a baseload level of generation)
Capacity factor scaling — a multiplier applied to the default capacity factor profile of a technology (most commonly renewables). This is how you adjust for the fact that the actual productivity of solar or wind in your country may differ from the default assumed in the model. Capacity expansion constraints — during calibration years, you generally want to prevent the model from building new capacity, so you can compare apples to apples with historical data. Setting both capacity_additional_max and capacity_additional_max_floor to zero prevents expansion in those years. Reserve margin settings — the reserve margin is the amount of spare generation capacity a power system is required to hold above peak demand. If the reserve margin is set too high, the model may build extra capacity that never generates, inflating the installed capacity figure. Check both the reserve margin level and which technologies are allowed to contribute to it.

The calibration process, step by step

Step 1: Set up residual capacity

Make sure residual_capacity is correctly specified for all historical years for which you have calibration data. This is almost always the single most impactful thing you can do. Use official capacity statistics from national energy agencies, IEA, or IRENA as your source. Once you have reliable residual capacity data, prevent the model from adding any new capacity in those years by setting capacity_additional_max and capacity_additional_max_floor to zero. This ensures the model is working with real-world capacity rather than optimising its own build.
Tip: Run only the years you are calibrating (e.g. 2023–2028) at first. This keeps run times short and makes the calibration loop faster.

Step 2: Investigate the data

Before adjusting anything, run the model once and compare its outputs to your historical data. Check:
  • Installed capacity by technology
  • Generation by technology
  • Emissions
Look for large discrepancies. Note which technologies are most out of line. This diagnostic run tells you where to focus your calibration effort.

Step 3: Fix any infeasibilities

If the model cannot find a solution at all, there is a constraint it cannot satisfy. Common causes:
  • A reserve margin that no available technology can meet
  • A fuel supply limit that is too tight
  • A technology with no available dispatchable capacity during some periods
To diagnose, temporarily relax the constraint you suspect is binding, and see if the model becomes feasible. Once it does, restore the constraint and adjust it to a realistic level. Document every change you make.

Step 4: Calibrate to historical data

Work through technologies in merit order — from cheapest to most expensive to run — because that is the order in which the model will dispatch them.

4a. Renewables first (solar, wind, hydro, geothermal)

Renewables sit at the top of the merit order and should always generate when the resource is available. Calibrate their generation using capacity_factor_scaling. If the model is generating too much solar, reduce the scaling factor; if too little, increase it.

4b. Baseload thermal (coal, nuclear)

These technologies run most of the time and provide a steady base of generation. Calibrate using availability_factor and/or availability_factor_annual_min. Use at most one of these constraints on a single technology at a time — applying both risks over-constraining the model and causing infeasibilities.

4c. Mid-merit and peaking thermal (gas, oil, biomass, waste)

These technologies fill in the gap between baseload and demand peaks. Calibrate in the same way as baseload thermal, using availability_factor and/or availability_factor_annual_min — again, one constraint per technology.

4d. Storage

Storage is the hardest to calibrate. In early calibration years there is often little price spread to incentivise charge/discharge cycles, so the model may not use storage at all even if it exists in reality. You can try forcing storage behaviour using availability_factor_annual_min, but watch carefully for what technology ends up charging the storage — forced storage behaviour can sometimes cause unrealistic generation patterns elsewhere. If this happens, it is often better to leave storage uncalibrated in the base years.

Step 5: Tapering constraints after the calibration period

Calibration constraints should not be active indefinitely — they are proxies for real-world conditions that will evolve. Apply the following taper:
  • availability_factor: enforce up to 2030, then linearly increase to your default maximum (typically 0.80–0.90) by 2035
  • availability_factor_annual_min: enforce up to 2030, then linearly reduce to zero by 2035
This allows the model to behave more freely in future years while still matching historical behaviour in the calibration window.

Step 6: Sense-check future results

Once the calibration period (e.g. 2023–2028) is clean, run the model to your full horizon (e.g. 2050) and check whether the future looks plausible. Red flags to look for:
  • A cliff-edge of retirements — if many plants were built in the same year and have the same lifetime, they will all retire at once, causing an implausible drop in capacity. Mitigate by spreading out residual_capacity entries across years so retirements are more gradual.
  • Implausible technology buildout — a surge of a particular technology in a single year may indicate a reserve margin issue or a constraint that is unexpectedly binding at the end of the model horizon.
  • Nuclear build inconsistent with policy — enforce national nuclear policy using capacity_gross_max, capacity_additional_max, and capacity_additional_max_floor.
  • Mismatch with a regional model — if you are building a national model that should mirror a regional one, differences usually come from averaged capacity factors or fuel prices. Use capacity-weighted means rather than simple averages for both.