Skip to content
Fabio Serra Pereira

← Map

Curtailment

2026 · own project · solar and wind

From the operator’s public data to the decision of when to stop each machine.

Public data · platform paused

The live demo is paused for a while. To learn more, talk to me.

  • Machine data
  • Learning
  • Decision under failure
lights up: measure, classify, predict, decide

The problem

On screen, curtailment and failure look alike.

Curtailment and failure on the plant screenTwo charts of one day, with the available and the delivered curve. On the left, the top is cut by an order from outside; on the right, the machine fails and delivery drops. The area between the curves looks the same, but the cause is different.availabledelivered≈≠available − deliveredorder from outsideloss in the asset Curtailment and failure on the plant screenTwo charts of one day, with the available and the delivered curve. On the left, the top is cut by an order from outside; on the right, the machine fails and delivery drops. The area between the curves looks the same, but the cause is different.availabledelivered≈≠available − deliveredorder from outsideloss in the asset
Illustration. The energy of each state is available minus delivered.

The sector

Over half of wind half-hour records had curtailment.

Wind: 51 in every 100 half-hour records curtailedA 10 by 10 grid; 51 squares are filled.

51%

wind

Solar: 34 in every 100 half-hour records curtailedA 10 by 10 grid; 34 squares are filled.

34%

solar

August 2026, half-hour records with constrained generation. Own analysis of ONS open data (opens in a new tab) (CC-BY).

How it is built today

From data to decision, checked.

  1. public data

  2. group

  3. separate curtailment from failure

  4. forecast 48 h

  5. choose the hour

the result comes back measured

  • checked outside the systemspreadsheet and MATLAB
  • tested every nightuntil the pause
  • delivered in a containerDocker
ONS constraint data half-hour by half-hour and CCEE hourly PLD.

The screens

Four questions, four screens.

  • Solar plants curtailed in 2025, grouped by curtailment profile. (opens in a new tab)

    Where and when does curtailment happen?

    Solar plants curtailed in 2025, grouped by curtailment profile.

  • 48 hours: the curtailment, the forecast made earlier and the 30-day baseline. (opens in a new tab)

    Does the forecast err less than the baseline?

    48 hours: the curtailment, the forecast made earlier and the 30-day baseline.

  • The plan week: the cost of stopping, the constraint and the chosen hour. (opens in a new tab)

    At what hour to stop?

    The plan week: the cost of stopping, the constraint and the chosen hour.

  • Twelve steps redone in MATLAB, all green. (opens in a new tab)

    Can the published numbers be redone?

    Twelve steps redone in MATLAB, all green.

Checks

The published numbers, redone outside the system.

  • 1,255tests
  • 236checks
  • 12 of 12steps in MATLAB

Full verification on 28 September 2026.

A spreadsheet with live formulas and MATLAB scripts redo the published quantities.

Still open

  • Public data and simulation: not an expert report.
  • The forecast is not the product: it is the model of the process.

Tools

  • ONS and CCEE open data
  • k-Means
  • k-NN with bootstrap
  • DQN
  • condition-based decision
  • Python
  • MATLAB R2026a
  • Excel
  • pytest
  • Docker
  • hexagonal architecture

Document

Own project · 2026 · data: ONS (opens in a new tab), wind and solar (opens in a new tab) generation constraints (CC-BY); CCEE (opens in a new tab), hourly PLD (CC-BY)