QuESt Planning: A Long-term Power System Capacity Expansion Planning Tool Focused on Energy Storage Systems
Current release version: 1.0.0
- Introduction
- Key Features of QuESt Planning
- Getting Started
- Workflow of QuESt Planning Tool
- Examples
- Tips for Running the QuESt Planning Tool
- Feedback
- Development Status
- Acknowledgements
QuESt Planning is a capacity expansion planning model that identifies cost-optimal energy storage, resource, and transmission investments. This tool is part of QuESt 2.0: Open-source Platform for Energy Storage Analytics. Below is a high-level overview of the inputs and outputs of the QuESt Planning tool.
Long-term capacity expansion planning models are complex optimization models that require careful consideration of modeling assumptions and input data. Model build and solve times can vary significantly, from minutes to days, based on assumptions made while configuring the model inputs and the selection of solver. For more guidance, please refer to the Tips section.Key features of the QuESt Planning tool include:
-
Optimization of Grid Investments: Leverages a Pyomo-based optimization model to find the cost-optimal mix of generation, transmission, and storage.
-
Energy Storage System Evaluation: Designed to evaluate a broad range of energy storage technologies and their role in the optimal mix of generation required to support system operations. Users are able to define energy storage technologies based on power and energy capacity cost, asset lifetime, round-trip efficiency, and other operational characteristics.
-
Model Flexibility: Supports various scenarios and sensitivity analyses to explore different investment portfolios and pathways.
-
Scenario-based Planning: Allows users to develop multiple scenarios to evaluate planning sensitivities and scenarios.
-
User-Friendly Interface: Simplifies the process of input data upload, planning model setup, scenario construction, model execution, and results interpretation.
-
Enhanced Visualizations: The QuESt Planning tool provides several visualizations of the optimization model results, including optimal resource expansion plots, costs breakdowns, and interactive maps.
- Python 3.11
Ensure an optimization solver is installed on your machine. For best performance, use a commercial solver such as Gurobi and Cplex. Solvers to consider include:
Commercial Solvers
Open-source Solvers
-
Install
virtualenv
(if not already installed):python -m pip install virtualenv
-
Create a virtual environment (named
venv
):python -m virtualenv venv
-
Activate the virtual environment:
- On Windows:
.\venv\Scripts\activate
- On Windows:
-
Clone the repository:
git clone <repository_url>
Replace
<repository_url>
with the URL of the QuESt Planning repository. -
Navigate to the QuESt Planning Directory:
cd path/to/quest_planning
Replace
path/to/quest_planning
with the name of the directory where QuESt Planning was cloned. -
Install Dependencies:
python -m pip install -e .
-
Once the dependencies are installed the QuESt Planning package is installed in the virtual environment is activated. You can run tool using the following command from any directory:
python -m quest_planning
The figure below provides the basic structure of the QuESt Planning tool. The input data are in the form of CSV files and more information can be found in the Data Preparation Section. There are two options for running the QuESt Planning tool:
-
Option A: Graphical User Interface: This application is designed for smaller problems and allows for enhanced visualizations.
-
Option B: Advanced Simulations: This command-line script is designed for larger problems and enables the use of remote computing for advanced simulations.
The input data is constructed via several CSV files. The QuESt Planning tool require the following CSV files with correct format in the data_explan
folder within the quest_planning
directory:
The CSV files and the associated data are structured as follows:
Column | Description |
---|---|
Number | Bus number |
Bus_name | Bus name |
Bus_number | Bus number |
Load_share | Share of system peak load (%) |
LAT | Latitude |
LON | Longitude |
Column | Description |
---|---|
Line_Number | Unique branch ID |
From_Bus | From Bus Number |
From_Bus_Name | From Bus Name |
To_Bus | To Bus Number |
To_Bus_Name | To Bus Name |
Rating_F | Forward Rating (MW) |
Rating_B | Backward Rating (MW) |
R | Branch resistance p.u. |
X | Branch reactance p.u. |
B | Branch charging susceptance p.u. |
Length | Line length (miles) |
Tx_Cost | Transmission Cost |
Tx_limit | Transmission investment limit (MW) |
Lead_Time | Transmission investment lead time (years) |
Column | Description |
---|---|
Gen_num | Generator number |
Gen_name | Generator name |
Bus_num | Bus number where generator is located |
Bus | Bus name where generator is located |
Tech | Generator technology name |
Tech_Num | Generator technology number |
Cap | Generator installed capacity (MW) |
MinCap | Generator minimum stable level (MW) |
CandCap | Generator maximum annual investible capacity (MW) |
SystCap | Generator maximum total investible capacity (MW) |
PlannedYr | Planned year for operation |
RetCap | Generator planned retirement capacity (MW) |
RetYr | Generator planned retirement year |
CapCred | Capacity credit (%) |
LeadTime | Lead time required from investment to operation (not used) |
YearAvail | Eligible year for investment |
HR | Generator heat rate at maximum output (MMBTU/MWhr) |
FOM | Fixed Operating & Maintenance Cost ($/MW) |
VOM | Variable Operating & Maintenance Cost ($/MWh) |
PTC | Production tax credit ($/MWh) |
ITC | Investment tax credit ($/MW) |
Lifetime | Generator lifetime (years) |
Ramp | Generator ramp rate (%) |
FOR | Forced Outage Rate (%) |
CO2 | CO2 emission rate (MMTons/MWhr)) |
SO2 | SO2 emission rate (MMTons/MWhr)) |
NO2 | NCO2 emission rate (MMTons/MWhr)) |
TransAdder | Transmission cost adder($/MW)) |
Column | Description |
---|---|
Gen_num | Generator number |
Gen_name | Generator name |
Bus_num | Bus number where generator is located |
Bus | Bus name where generator is located |
Tech | Generator technology name |
Tech_Num | Generator technology number |
LAT | Latitude |
LON | Longitude |
Column | Description |
---|---|
Num | Technology number |
Tech | Name of the technology (e.g., solar, wind) |
Tech_Name | Technology name |
Tech ID | Unique technology ID |
Tech_Num | Technology number |
LeadTime | Lead time required from investment to operation (not used) |
CandCap | Generator maximum annual investible capacity (MW) |
SystCap | Generator maximum total investible capacity (MW) |
RampRate | Generator ramp rate (%) |
FOM | Fixed Operating & Maintenance Cost ($/MW) |
VOM | Variable Operating & Maintenance Cost ($/MWh) |
PTC | Production tax credit ($/MWh) |
ITC | Investment tax credit ($/MW) |
CapCred | Capacity credit (%) |
Lifetime | Generator lifetime (years) |
YearAvail | Eligible year for investment |
Column | Description |
---|---|
Gen_num | Generator number |
Gen_name | Generator name |
Tech | Generator technology name |
Tech_Num | Generator technology number |
RTE | Round-trip efficiency (%) |
Min_Duration | Minimum duration (hours) |
Max_Duration | Maximum duration (hours) |
Column | Description |
---|---|
datetime | mm/dd/yy hh:mm |
year | yy |
day | mm/dd/yy |
hour | hh |
load_forecast #1 | Load forecast #1 |
load_forecast #2 | Load forecast #2 |
... | Add additional load forecasts as desired |
Column | Description |
---|---|
Tech_Num | Generator technology number |
Tech_Name | Generator technology name |
Year 1 | Year 1 capital costs ($/MW) |
Year 2 | Year 2 capital costs ($/MW) |
... | Add up to year N capital costs ($/MW) |
Column | Description |
---|---|
Tech_Num | Generator technology number |
Tech_Name | Generator technology name |
Cost | Cost type (i.e. power or energy) |
Year 1 | Year 1 capital costs ( |
Year 2 | Year 2 capital costs ( |
... | Add up to year N capital costs ( |
High and low ES cost trajectories can be created from capex_es.csv
and name capex_h_es.csv
and capex_l_es.csv
, respectively.
Column | Description |
---|---|
Gen_Num | Generator number |
Gen_Name | Generator name |
Bus | Bus where generator is located |
Tech | Generator technology name |
Year 1 | Year 1 fuel costs ($/MMBTU) |
Year 2 | Year 2 fuel costs ($/MMBTU) |
... | Add up to year N fuel costs ($/MMBTU) |
Column | Description |
---|---|
datetime | mm/dd/yy hh:mm |
year | yy |
day | mm/dd/yy |
solar gen #1 | Solar plant #1 |
solar gen #2 | Solar plant #2 |
... | Add additional solar profiles to match solar generators |
Column | Description |
---|---|
datetime | mm/dd/yy hh:mm |
year | yy |
day | mm/dd/yy |
wind gen #1 | wind plant #1 |
wind gen #2 | wind plant #2 |
... | Add additional wind profiles to match solar generators |
Column | Description |
---|---|
datetime | mm/dd/yy hh:mm |
year | yy |
day | mm/dd/yy |
wind gen #1 | Candidate wind plant #1 |
wind gen #2 | Candidate wind plant #2 |
... | Add additional candidate wind profiles to match solar generators |
Column | Description |
---|---|
Policy ID | Unique policy ID |
Name | Name of the policy |
Type | Type of policy (e.g., subsidy, tax) |
Impact | Expected impact on the energy system |
Column | Description |
---|---|
Scalar | Scalar name |
Value | Scalar value |
Unit | Unit |
The following section provides details on the workflow of the QuESt Planning user interface.
Upon executing the quest_planning
package, a landing page will appear. The Documentation
button will provide access to this README.md
file in a separate dialog window. To start using the tool press the Start
button.
In the Power System Data
page, the corresponding CSV data will be uploaded and processed via the data handler in the backend of the tool. To begin, the user must navigate to the correct directory where all CSV files are located. Use the Browse
button to open File Explorer. The user should also fill in the System Name
text box with the desired name. The System name
will be used to name saved files, plots, and scenarios.
Once the correct directory is selected, click Open
. Upon clicking a breakdown of the system information will appear as follows:
Once the data is collected, click Next
.
In the Planning Model Setup
page, the user can define the modeling assumptions to be fed to the optimizer. Select the Begin Year
and the End Year
for the simulation. Then click the Select Simulation Years
button and a separate dialog button will open.
Select the years desired for the planning model simulation or select All Years
. Click OK
to save the years.
Select the desired Transmission Model
. Currently the tool supports the transportation ("pipes & bubbles") modeling of transmission systems. Future releases will support copper sheet and DC power flow capabilities.
Select the desired Temporal Resolution
. For quicker simulations, select Seasonal Blocks
. More advanced features include Representative Weeks
and 8760 Analysis
, which will be upcoming in a future release.
Select a desired Annual Discount Rate
, which will be used for the net-present value calculations, and the Base Currency Year
, which is used to scale costs based on the input data provided in the CSV files.
Once complete, the planning model setup will be populated in tab window as follows:
When the planning model is setup, click Next
.
In the Scenario Builder
page, users are able to design and modify scenarios based on several planning uncertainties. To begin, specify a Scenario Name
which will be used for file identification when printing the results.
Select a capital cost trend used
for the energy storage capital costs. These capital cost trends are specified in the input CSV files.
Select a Load Forecast
.
Select a Renewable Portfolio Standard
or create a new policy.
Transmission Expansion
will allow for the co-optimization of the generation and transmission expansion. This feature is in testing will be released in a later version.
To select the candidate technologies click the Candidate Technologies
buttons. The below window will appear.
Select the default
technologies, combination of the candidate technologies, or a Custom
technology. If a Custom
technology is selected, the following window will appear:
When completed selecting candidate technologies, press OK
.
Once the scenario is built the window should look like the below:
If desired, click View Scenario
. This will generate a planning model and scenario information breakdown page. Click 'Save Scenario` to save this page to a text file. This is useful to keep track of the scenarios if evaluating several scenarios.
When completed building the scenario, click Next
.
In the Execute Model
page, the optimization model will be built and solved. First, select a location to save the results. If a results folder is not selected, a folder in the main directory will be created.
Specify the solver to be used for the optimization. For best performance, select Gurobi
. Ensure that you have the solver installed correctly.
Click 'Build' to build the optimization model.
Progress will appear in the window as shown below. Once the Pyomo model has been built, click Solve
.
Once, the model has solved. The user will be notified and prompted to go to the Results Viewer
page by clicking Next
.
The Results Viewer
page is designed to provide high-level results including a breakdown of total costs, optimal installed resource capacities, and energy storage power and energy capacities throughout the planning horizon.
To begin, click Collect Results
. This will populate the cost results in a table and save all plots to the desired results file.
Click Generate Plots
to display the stacked bar charts for the optimal installed resource capacities and energy storage power and energy capacities throughout the planning horizon.
Click Open Results Folder
to open the results folder in File Explorer.
Click Open Maps
to open the subfolder containing several maps with generation and energy storage siting visualizations.
Click Save Results
to save the raw results of the optimization model to an Excel file. Further analysis of results can be performed with the results via the Excel files.
For users seeking to analyze more complex scenarios or larger power systems, QuESt Planning offers the capability to run simulations through script-based execution without the use of the GUI. This approach is particularly beneficial for users leveraging the computational power of remote servers or High-Performance Computing (HPC) systems, which provide significantly more memory and processing capabilities than typical desktop environments.
Ensure you have SSH access to the remote server if you wish to execute the script in and that Python is installed on the system.
To initiate an advanced simulation, users can execute the explan_simulation.py
script from the command line. This script is designed to process large datasets and complex simulation parameters efficiently.
-
Install
virtualenv
(if not already installed):pip install virtualenv
-
Create a virtual environment (named
venv
):virtualenv venv
-
Activate the virtual environment:
- On Windows:
.\venv\Scripts\activate
- On Windows:
-
Navigate to the QuESt Planning Directory:
cd path/to/quest_planning
Replace
path/to/quest_planning
with the name of the directory where QuESt Planning was cloned.Ensure the
explan_simulation.py
script is located in the same home directory. -
Install Dependencies:
pip install -e .
Before running the simulation, configure an input.yaml
file with the specific simulation parameters. Open the file in a text editor and adjust the settings according to your scenario and planning model requirements. The required parameters are detailed in the test case provided. The configuration files are located in the config
folder.
Once the configuration file is complete, run the explan_simulation.py
file to initiate the simulation.
python -m quest_planning.explan_simulation /path/to/input.yaml
Ensure that the /path/to/input.yaml
is the correct location of the configuration file.
The progress of the model build and the optimization solve will be provided in the command terminal. It is suggested to periodically monitor the progress throughout the simulation.
Once the model has solved, navigate to the Results
directory to access results and visualizations.
A test case is included with the initial release of QuESt Planning. The test case includes the IEEE RTS-GMLC synthetic grid which is a publicly available test system that is derived from IEEE RTS-96 test system. Figure 1 displays the nodal model of the RTS-GMLC test case that can be used for advanced simulations. Figure 2 provides a highly aggregated zonal RTS GMLC system that can be used for simple and quick simulations.
Figure 1: IEEE RTS-GMLC Test Case nodal model
Figure 2: IEEE RTS-GMLC Test Case zonal model
The data_explan
folder contains the RTS-GMLC test cases in the required format to run the QuESt Planning simulations. The nodal system is in the rts_csv_data
folder and the zonal model is in the rts_csv_data_zonal
. For Option A, which deploys the graphical user interface, follow the instructions detailed in the User-Interface Workflow section. For Option B, the advanced simulation option, follow the instructions detailed in the Advanced Simulations section. The configuration files for a base case simulation of the nodal and zonal models are called input_rts_nodal_base.yaml
and input_rts_zonal_base.yaml
, respectively. These files are located in the config
folder.
The QuESt Planning tool requires several data to run simulations. Listed below are common data sources that can be used to develop test cases for QuESt Planning:
- Annual Technology Baseline: provides cost and performance data for new and existing resources (developed by the National Renewable Energy Laboratory)
- Energy Storage Cost and Performance Database: provides cost and performance data for a variety of energy storage technologies (developed by Pacific Northwest National Laboratory)
- Energy Storage Pricing Survey: provides a standardized reference system prices various energy storage technologies with different power and energy ratings. (Sandia National Laboratories)
- Annual Energy Outlook: provides regional projections of energy supply, demand, and fuel prices out to 2050 (developed by the Energy Information Administration)
-
National Solar Radiation Database: hourly and half-hourly timeseries of solar irradiance in the U.S. and select countries (developed by the National Renewable Energy Laboratory)
-
pvlib: python-based package that includes a set of functions and classes used for simulating the performance of PV systems (developed by Sandia National Laboratories)
-
Wind Integration National Dataset (WIND) Toolkit: provides computer model-based meteorological conditions and calculated turbine power for the continental U.S. (developed by the National Renewable Energy Laboratory)
- Form EIA-860: provides generator-level specific information about existing and planned generators (1 MW or greater)(developed by the Energy Information Administration)
- Form No. 714: provides balancing authority and planning area generation, actual and scheduled power transfers, and load. (Provided by the Federal Energy Regulatory Commission)
- Database of State Incentives for Renewables & Efficiency: comprehensive set of renewable policies and incentives in the United States (developed by North Carolina State University)
Additional test cases are under further development and will be included in future releases.
The advanced simulations could be exceptionally difficult to solve based on the configuration of the model. There are several tips to consider when facing difficulties with solving:
-
Simplify the Model: Too increase tractability and decrease complexity, try limiting the number of variables or constraints. Examples include reducing the number of candidate technologies, reducing simulation years, altering the transmission model constraints, or selecting a less-complex temporal resolution.
-
Adjust Solver Settings: Adjust the solver parameters to explore different methods to improve the solver's performance. Alternatively, explore different solvers with varying capabilities based on the model formulation. Please refer to the corresponding solver documentation for more information and guidance.
-
Review Model Formulation: Carefully review the model formulation to identify logical errors or constraints that are too restrictive.
Please submit feedback, issues, and suggestions, through the Issues page. For more information, please reach out to the project developer Cody Newlun (cjnewlu@sandia.gov).
The QuESt Planning tool is under active development and more features will be included in future releases. the QuESt Planning tool will be integrated into the QuESt 2.0, an open-source platform for energy storage analytics, where it will be available to be installed and integrated with other tools available in the QuESt platform.
Future updates to QuESt Planning that are being considered include:
- Improved reliability and resilience constraints
- Technology-specific energy storage models
- Enhanced temporal resolution
- Improved transmission models & investment options
- Improved renewable energy resource modeling
- Improved GUI & scenario viewer
The QuESt Planning tool is developed and maintained by the Energy Storage Analytics Group at Sandia National Laboratories.
Project team:
- Cody Newlun (cjnewlu@sandia.gov)
- Atri Bera
- Walker Olis
- Andres Lopez Ramirez
- Yung-Jai Pomeroy
- Tu Nguyen
This material is based upon work supported by the U.S. Department of Energy, Office of Electricity (OE), Energy Storage Division.
Please see the LICENSE file.