Skip to content

Our dispatch model, within a dollar of the real market

Every scenario in supagrid starts by running the real market again on our dispatch model. So we tested it on days it had never seen, wrote the test down before it ran, and checked every five minute price against AEMO's. Here is how close it got.

In short.

  1. The question

    When you change one thing in supagrid, can you trust the market it starts from?

  2. What we found

    Yes, on the days we tested. On nine September days the model had never seen, 98.2% of five minute regional prices landed within $1 of AEMO's, and the average gap was 8c. 99.8% of unit outputs landed within 1 MW of AEMO's targets. The model held at the same network limits as AEMO 99.9% of the time, and its split of wind and solar curtailment into network and economic came within 0.2% of AEMO's.

  3. Why it matters

    A scenario is only as good as its starting point. The model clears the real market almost exactly as AEMO did, so the difference a scenario shows comes mostly from the change you made, not from the model.

What it means for you.

  • 98.2%of five minute regional prices within $1 of AEMO's, with an average gap of 8c
  • 99.8%of unit outputs within 1 MW of AEMO's targets
  • 99.9%of the times a network limit held AEMO's dispatch, ours held at the same limit
  • 0.2%the most our network or economic curtailment of wind and solar differed from AEMO's
  • Scenarios start from the real market.

    Change one thing, such as retiring a unit or adding a battery, and the model runs the market again around it. With nothing changed, it lands within a dollar of AEMO's price 98 times in a hundred. So the difference a scenario shows comes mostly from your change, not from the model.

  • Every unit, on the same network.

    99.8% of unit outputs landed within 1 MW of AEMO's targets. When a network limit held, ours held at the same limit 99.9% of the time. So a scenario tells you which stations run, how hard and where the network stops them, not only where the price goes.

  • Curtailment, with its reason.

    The model held back about as much wind and solar as AEMO's dispatch, for the same reasons. Network and economic curtailment each came within 0.2% of AEMO's over the nine days. So a scenario can show how much a new line or battery frees up, and why.

  • The hard moments too.

    Every price above $300 on these days was matched above $300, and 99% of the 1,895 prices below zero landed within $1. Tight evenings and sunny middays are where a scenario matters most.

Nine days it had never seen.

Our dispatch model does what AEMO's dispatch engine does every five minutes. It takes the offers every generator and battery lodged, the demand in each region, the state of the network and the constraints AEMO dispatched with, and works out who runs, how much, and the price in each region. In supagrid's Modelling, the run labelled Model is this model running the real market again with nothing changed, and every scenario starts from it.

A model checked on the days it was built on tends to look better than it is. So we tested it on September 2026, a month it had never run, and wrote the test down before it ran. Nine days were drawn at random, 12 to 14, 22 to 24 and 28 to 30 September, and the model ran all 2,592 five minute intervals across the five regions.

98.2% of 12,960 prices landed within $1 of AEMO's, and the average gap was 8c. Every day and every region landed between 97% and 99%. The closest day was 13 September and the furthest 24 September.

Five minute prices within $1 of AEMO's, each day

The bar starts at 90%, so the days can be told apart

  1. Sat 12 Sep99%5c average
  2. Sun 13 Sep99%4c average
  3. Mon 14 Sep98%6c average
  4. Tue 22 Sep99%7c average
  5. Wed 23 Sep98%12c average
  6. Thu 24 Sep97%11c average
  7. Mon 28 Sep97%13c average
  8. Tue 29 Sep98%8c average
  9. Wed 30 Sep98%7c average

Each day is 1,440 regional prices, 288 in each of five regions, or 288 for one region. Shares are rounded to whole percentages. The average is the gap to AEMO's price in dollars per MWh.

Every five minutes.

Pick a day and a region to see AEMO's price and ours, five minutes at a time. South Australia on 12 September is a good place to start. Its price fell below minus $200 in the middle of the day. The model follows it down, and in 92 of the 108 five minutes below zero it matched AEMO to the cent.

South Australia, Sat 12 Sep, every five minutes

Point at the plot for one interval's prices, in dollars per MWh

Loading the day
Go to
  • AEMO's published price
  • Our dispatch model

Each interval is named by the time it ends, in market time. The scale grows to fit the day, so a flat day looks busier than it is.

How close is close.

A dollar is where we drew the line before the test. Here is every line from a cent to $100. 67% of prices matched AEMO's to the cent, 91% were within 10c and 95% were within 20c.

Of the 45 prices above $300, the model priced every one above $300 too, and it priced none there that AEMO didn't. None of the nine days went above $1,000, so this test says nothing yet about the most extreme prices.

Share of five minute prices within a given gap of AEMO's

Within $1, 98% of 12,960 prices

  • Our dispatch model
  • The $1 the test was set on

Gaps on a log scale, in dollars per MWh. 12,960 regional prices over the nine days, 2,592 in each region.

Every unit, by fuel.

Prices are the end of a long chain. Underneath them, the model decides how much every generator, battery and load runs in every five minutes, 1,478,304 outputs over the nine days. 99.8% landed within 1 MW of AEMO's targets, and every fuel did better than 99%.

So whether you own a coal unit, a wind farm or a battery, a scenario tells you how it would have run, not just the price around it.

Unit outputs within 1 MW of AEMO's targets, by fuel

The bar starts at 90%. Fuels are in order of the energy they made over the nine days

  1. Black coal34 units99.1%1,780 GWh
  2. Wind87 units99.9%896.5 GWh
  3. Brown coal10 units99.7%694.2 GWh
  4. Solar117 units99.9%553.0 GWh
  5. Batteries69 units99.4%317.8 GWh
  6. Hydro43 units99.9%245.4 GWh
  7. Gas75 units99.9%140.6 GWh
  8. Everything else136 units99.9%24.5 GWh

Every registered unit in every five minutes of the nine days. Everything else is diesel, pumps, loads and demand response, which made little energy. Energy is AEMO's targets added up.

The same network limits.

  • 324different network limits held AEMO's dispatch over the nine days
  • 32,078times one of them held, five minutes at a time
  • 99.9%of those times, ours held at the same limit

The network is where many scenarios bite. A line, a transformer or the link between two regions can only carry so much, and AEMO dispatches with a limit for each. When one of those limits held AEMO's dispatch, our model ran the flow up to the same limit 99.9% of the time. It works the other way too. Of the 28,564 times a limit held ours, AEMO's flow sat at the same limit in all but 18.

Some limits come in near identical pairs that guard the same lines, and either one can be the one that holds. The model picked the same one as AEMO 79 times in a hundred, and the flows come out the same either way.

Curtailment, and why.

When a wind or solar farm makes less than it could, the reason matters. Held back by the network, it is a question of connection and transmission. Held back by price, it is a question of how the farm bids. Over the nine days AEMO's dispatch held back 253.4 GWh from 204 wind and solar farms, 137.2 GWh by the network and 116.3 GWh by price. Our model held back 137.0 GWh by the network and 116.5 GWh by price.

The regions tell different stories. In New South Wales and Queensland nearly all of it was the network, and in Victoria and South Australia mostly price. In every region the model's split came out close to AEMO's.

Wind and solar held back, GWh

  • Network
  • Economic
  1. NSWAEMO68.6Ours68.7
  2. QLDAEMO72.8Ours72.8
  3. VICAEMO75.0Ours75.0
  4. SAAEMO36.8Ours36.8
  5. TASAEMO0.2Ours0.2

Held back is what a wind or solar farm could have made less what it was dispatched to make, for all 204 farms. Economic is the part it offered above the price, and network is the rest, held back by limits AEMO dispatched with. AEMO's split comes from its own targets and prices, and ours from the model's, with the same offers.

How we kept it fair.

  • Written down first.

    Before the model ran, we fixed the days, what we would measure and the pass mark of 95% of prices within $1. The pass mark was set before anyone knew the answer.

  • Drawn at random.

    The nine days came from a random draw with a fixed seed, made before AEMO's complete data for September was in. No day was dropped or run twice.

  • Never shown the answer.

    The model reads only what AEMO published as inputs. AEMO's prices, targets and the limits that held are used to check it afterwards and never feed into it.

Where it still misses.

The worst moment was 03:35 on 28 September, when every region's price came out between $12 and $16 too high, $61 in New South Wales against AEMO's $45. The worst single price was South Australia at 02:20 on 29 September, $6.60 against AEMO's $27. We haven't explained either yet, and they are the next thing we look at. The explorer above jumps to both.

In supagrid.

  • Open Modelling and run the Model over any stretch of the real market. Its prices and flows sit beside the actual ones, so you can judge how close it gets for yourself.
  • Make one change, such as retiring a unit, derating one or adding a battery, and run the same days again. The result sits beside the actual market, so you can see what the change did.

Method and data.

  1. The data

    Every input is AEMO's published data for each five minutes of nine days in September 2026. That is the offers, demand, the network, interconnectors and the constraints AEMO dispatched with. The answer is AEMO's published regional prices, unit targets and the limits that held, which the model never reads and we use only to check it. Each unit's fuel is from supagrid's own register of facilities. The files behind each figure are frozen with this post.

  2. How we read it

    A regional price is one region's price for one five minutes, so a day holds 1,440 of them. Within $1 means our price and AEMO's differ by $1/MWh or less. Gaps are in dollars per MWh, never percentages, because prices cross zero. A unit counts as close when its output is within 1 MW of AEMO's target. A network limit held when it had a price on it in the dispatch, and a dispatch sat at the limit when the flow was within 1 MW of it. Curtailment is what a wind or solar farm could have made less what it was dispatched to make. Economic is the part it offered above the price, and network is the rest, including limits written for a single farm. Both dispatches are sorted the same way, with the same offers. Nothing was set aside.

  3. Where it falls short

    Nine days are a sample, drawn at random before the run, and they held no price above $1,000. The model needs AEMO's complete data, which includes its limits on single generating units and arrives weeks after each month ends. An earlier attempt at this test read AEMO's daily data, which leaves those limits out, and landed 74% of prices within $1. This is the past run again, not a forecast.

  4. Times

    Times are market time, which is Brisbane time all year round. An interval is named by the time it ends, so 03:35 is the five minutes from 03:30.

See it in supagrid.

Book a demo and we'll show you the evening, the line or the change on your own corner of the NEM.