Regional Energy Deployment System (ReEDS) Model
This GitHub repository contains the source code for NLR's ReEDS model.
The ReEDS model source code is available at no cost from the National Laboratory of the Rockies.
The ReEDS model can be downloaded or cloned from https://github.com/ReEDS-Model/ReEDS.
If you want to use the latest stable version of ReEDS, download or check out the latest stable release here.
For more information about the model, see the ReEDS Documentation.
ReEDS training videos are available on the NLR Learning YouTube channel.
ReEDS is a capacity planning and dispatch model for the U.S. electricity system.
As NLR's flagship long-term power sector model, ReEDS has served as the primary analytic tool for many studies of electricity sector research questions.
Example model results are available in the Scenario Viewer.
The ReEDS model is written in Python, GAMS, and Julia.
Python and Julia are free, open-source languages.
GAMS requires a software license from the vendor.
A step-by-step guide for getting started with ReEDS is available here, and a quick-start guide for advanced users is outlined below.
Install UV:
curl -LsSf https://astral.sh/uv/install.sh | shRestart your terminal, then install Python 3.11:
uv python install 3.11- Install GAMS: https://www.gams.com/download/
- Obtain a combined GAMS/CPLEX license: https://www.gams.com/sales/licensing/
Small ReEDS systems have been solved using the open-source COIN-OR solver as described here, but this capability is not actively maintained.
Other commercial solvers have also been successfully applied to ReEDS, but setup details and some solver tuning are specific to the CPLEX solver.
Ensure the gams executable is available on your PATH:
gamsGAMS typically installs directly into the top level directory, with a version number. A typical way to add gams to your user PATH variable in powershell is:
$currentPath = [Environment]::GetEnvironmentVariable("Path","User") #This gets the PATH Environment variable at the user scope
$addPath = 'C:/GAMS/53' # or wherever your gams install is
[Environment]::SetEnvironmentVariable("Path","$addPath;$currentPath","User")Install Julia using juliaup:
curl -fsSL https://install.julialang.org | shInstall the required Julia version:
juliaup add 1.12.1
juliaup default 1.12.1Verify:
julia --versionClone the repository:
git clone https://github.com/ReEDS-Model/ReEDS.git
cd ReEDSPin Python 3.11 for the project:
uv python pin 3.11Create the UV-managed Python environment:
uv sync --extra devInstantiate the Julia environment:
julia --project=. instantiate.jlLink large data files from shared folder, so we each don't store separate instances of this ~95GB of input data. Note you cannot do this in git bash as there are some type of strange permission issues, so use powershell:
New-Item -ItemType Junction -Path ".\inputs\remote" -Target "C:\Users\Public\Documents\reeds_data\remote"Several large data files are hosted remotely. These files are downloaded automatically as needed during a ReEDS run, but the command above finishes all internet-requiring steps up front.
Additional details on remote files and other topics can be found in the user guide.
Once you've cloned the repository, you can use the optional PowerShell helper run_cepm.ps1 to
ensure supporting software is up to date and then immediately run runreeds.py:
.\run_cepm.ps1This script performs the following steps in order:
- Verifies GAMS is on PATH, checks GAMS license status, and prints a detected version string.
- Verifies Julia is on PATH and checks that the version is
1.12.1. - Sets ReEDS environment variables for the current PowerShell session.
- Checks that Python is pinned to 3.11 and runs
uv python pin 3.11if needed. - Runs
uv sync --extra dev. - Instantiates Julia dependencies only when needed: a fast offline check (
Pkg.instantiatewithout a registry update) skips the work when the environment is already current, and only falls back to the fulljulia --project=. instantiate.jl(which updates the registry) if dependencies changed or are missing. - Checks
environment.ymlagainstpyproject.tomland prints a non-fatal warning if they have drifted beyond the known-accepted allowlist (seeCEPM/UV_MAMBA_GUIDE.md). - Forwards all arguments to
runreeds.py. - Sends a best-effort ntfy.sh notification (topic
rmi-cepm-run-batch-finished) beforerunreeds.pyis launched and once it returns (on fail or success), so you can be alerted when a long-running batch finishes. Subscribe to the topic in the ntfy app or at https://ntfy.sh/rmi-cepm-run-batch-finished. A failed or offline notification is ignored. A failed or offline notification is ignored. Note: ntfy.sh topics are public; avoid including sensitive information in notifications.
Passing -y (or --skip-setup / --bypass) skips Step 5 (uv sync --extra dev) and Step 6 (Julia instantiation).
All other checks and setup steps still run, and remaining arguments are still passed to runreeds.py
Two more bootstrap-only options: -q (or --quiet) disables the ntfy.sh notifications, and -u <name> (or --user <name>) includes <name> as the username in the notification messages (omitted when not given). All other arguments are forwarded to runreeds.py.
.\run_cepm.ps1 -y -b v20250314_main -c test
.\run_cepm.ps1 --bypass -b v20250314_main -c testReEDS currently expects Conda-style environment variables. When using UV, set these variables before running ReEDS or ideally in your dotenv file, so you don't ahve to do this before every run.
export CONDA_DEFAULT_ENV=reeds2
export CONDA_PREFIX="$PWD/.venv"For interactive setup:
uv run python runreeds.pyFor one-line operation:
uv run python runreeds.py -b v20260605 -c cepmIn this example, v20260605 is the prefix for this batch of cases, and cepm is the suffix of the cases file, in this case cases_cepm.csv, located in the root of the repository. For the batch prefix, we should follow the convention vYYYYMMDD, and note that the case ID from the cases file will be appended to the batch prefix for file naming purposes (e.g., WECC_county_100by2050).
Run the following for information on other optional command-line arguments:
uv run python runreeds.py -hPowerShell users can run setup + launch in one command with run_cepm.ps1:
.\run_cepm.ps1 -b v20250314_main -c testConfirm that GAMS is available on your PATH:
gamsIf this fails, update your shell PATH to include the GAMS installation directory.
Re-run:
julia --project=. instantiate.jlRecreate the UV environment:
rm -rf .venv uv.lock
uv sync --extra devWhen running with UV, set:
export CONDA_DEFAULT_ENV=reeds2
export CONDA_PREFIX="$PWD/.venv"Then rerun the command with uv run.
If you have comments and/or questions, contact the ReEDS team at ReEDS.Inquiries@nlr.gov or post a question on the discussion pages.