Skip to content

Modelling to investigate how imperfect foresight and information affects storage operation. Case studies using data from the Australian National Electricity Market and the Australian Energy Market Operator

License

Notifications You must be signed in to change notification settings

prakaa/NEMStorageUnderUncertainty

Repository files navigation

NEMStorageUnderUncertainty

CI codecov Documentation Code Style: Blue DOI

This repository contains the following:

  1. Analysis of historical prices and of (30-minute) pre-dispatch and 5-minute pre-dispatch price "forecast"1 errors from the Australian National Electricity Market (NEM).
  2. Source code and results from simulations that investigate how imperfect foresight affects storage arbitrage operation and revenues. This modelling uses historical actual price data and price forecasts from pre-dispatch & 5-minute pre-dispatch.

The results from this study have been submitted for publication. You can use this repository to access the model source code, documentation and results in the form of charts.

Analysis of prices & price forecast errors in the NEM

All charts produced from the analysis of prices & price forecast errors in the NEM can be found here. A couple of the most interesting charts are linked below.

  • This chart shows that historical daily price spreads ($p_{max} - p_{min}$ for each day) have been increasing over time in each region of the NEM
  • This chart shows the median, 5th and 95th percentile prices in NSW for each dispatch interval in 2021 (i.e. by time of day)
  • This chart shows how price forecast errors in the day-ahead and hour-ahead horizons have increased in the past few years. Months with a high number of large price errors do not appear to necessarily coincide with market or system events

Source code installation

  1. Install poetry
  2. Use poetry within price-characterisation to install the required dependencies
  3. Run .py plot scripts

Simulating storage operation under uncertainty

Study terminology and detailed methodology (e.g. objective functions, constraints, etc.) can be found in the source code documentation.

Overview of methodology

  1. At a decision point, optimise a battery energy storage system (BESS) according to model formulation (objective function) for duration of lookahead horizon using 5-minute pre-dispatch (5MPD) and (30-minute) pre-dispatch (PD) price "forecasts"
    • Remove PD forecasts that overlap with 5MPD and only use 5MPD within hour ahead
  2. Take results but only bind the dispatch decision of next interval (i.e. 5 minutes ahead)
  3. Roll horizon forward (rolling horizon optimal control at a frequency of 5 minutes) & repeat until entire year simulated
  4. Repeat steps 1-3 with actual price data
  5. Run perfect foresight model, where BESS is optimised across entire year with actual data in one go

Simulation procedure

Formulations

A variety of formulations (objective functions) are modelled. Refer to this section of the documentation for more detail.

Values of perfect lookahead (VPL) and perfect information (VPI)

Value of perfect lookahead: What is the additional benefit (revenue) that a participant could gain if they were to know exactly what the market prices will be in the lookahead horizon.

$$VPL = \textrm{Revenue}_\textrm{Actual Data Simulation} - \textrm{Revenue}_\textrm{Forecast Data Simulation}$$$$

Value of perfect information: What is the additional benefit (revenue) that a participant could gain if they were to know exactly what the market prices will be over the entire year

$$VPI = \textrm{Revenue}_\textrm{Perfect Foresight} - \textrm{Revenue}_\textrm{Forecast Data Simulation}$$

Results

All charts produced from the analysis of simulation results can be found here. A couple of the most interesting charts are linked below.

  • This chart shows absolute revenues for a 1 hour duration BESS (100 MW/100 MWh) for different lookahead horizons and modelled formulations
  • This chart shows how under imperfect foresight, a 1 hour duration BESS can miss significant discharge opportunities or make very poor charge decisions
  • This chart shows VPLs and VPIs for BESS with durations of 15 minutes, 1 hour and 4 hours across lookaheads and modelled formulations
  • This chart shows the cumulative throughput of BES with durations of 15 minutes, 1 hour and 4 hours (all with modelled throughput penalty that amortises a BESS capital cost of 600,000 AUD/MWh across BESS lifetime throughput) across the modelled year (2021).

"Actual prices in binding" results are located in results/data/actual-prices-binding.

Source code installation

Julia environment

  1. Hit ] to enter package mode
  2. With this project as the current directory, enter:
activate .
  1. Then instantiate the project
instantiate

Obtain price data

We make use of NEMOSIS and NEMSEER to obtain actual and forecast regional price data, respectively.

To populate data/ with the required data, run (with this project as the current directory):

make get_NEM_data

This command installs the mini-package located in data_scripts/, installs the get_data.py script as a console command and then runs the console command to obtain the data

  • The Makefile assumes Python 3 is installed on your machine.

Author & licenses

This modelling framework and its associated case studies were developed by Abhijith (Abi) Prakash, PhD Candidate at the UNSW Collaboration on Energy and Environmental Markets.

The source code from this work is licensed under the terms of GNU GPL-3.0-or-later licences.

The results (generated plots) and the content within the documentation for this project is licensed under a Creative Commons Attribution 4.0 International License.

If you use any of the material from this work, please cite the Zenodo DOI.

Acknowledgements

Data used in this study were made accessible by NEMOSIS and NEMSEER.

Footnotes

  1. We use the term "forecast" loosely, especially given that these "forecasts" change once participants update offer information (e.g. through rebidding) or submit revised resource availabilities and energy constraints. Both of these are intended outcomes of these "ahead processes", which are run by the Australian Energy Market Operator (AEMO) to provide system and market information to participants to inform their decision-making. However, to avoid confusion and to ensure consistency with the language used by AEMO, we use the term "forecast".

About

Modelling to investigate how imperfect foresight and information affects storage operation. Case studies using data from the Australian National Electricity Market and the Australian Energy Market Operator

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published