Try the Electricity Strategy Game

No login needed. Part 1 teaches the market economics interactively. Part 2 is a guided tour of every admin capability, for lecturers deciding whether to run the game. Part 3 covers single-player mode.

Based on material from UC Berkeley's EEP/ENVECON C147 — Energy & Environmental Markets, taught by Meredith Fowlie.


Part 1 — Learn the market

All three widgets below use the same ~10-plant slice of the built-in fleet (real plants: Big Creek hydro, Diablo Canyon nuclear, several gas plants, and Four Corners coal), computed live in your browser with the exact clearing rules the game server uses: merit-order dispatch, pro-rata sharing among tied bids, and a scarcity price cap if supply ever falls short of demand.

1. The merit order

Every plant bids into the market at a price. The cheapest bids run first. Edit any plant's bid below and watch the merit order — and the chart — re-sort live.

Try it: bid the cheap Four Corners coal plant at $80/MWh and watch gas plants that used to run after it jump ahead of it in the dispatch order.
5500 MW
Clearing price
Served / demand
Shortage
PlantOwnerMarginal costBidCapacity (MW)RankDispatch

2. Who sets the price?

Every plant is paid the SAME clearing price — the bid of the last, "marginal" plant needed to meet demand. That means cheaper, "inframarginal" plants collect a rent equal to the difference between the clearing price and their own cost, on every megawatt they run.

5500 MW
Clearing price

PlantMarginal costBidDispatched (MW)Profit

3. Uniform price vs. pay-as-bid

"Pay-as-bid" (every plant is paid its OWN bid, not the clearing price) sounds like it should cost consumers less than uniform pricing — but that's only true if bidders keep bidding their true cost. They don't, once they see the price history.

5500 MW

PlantDispatched (MW)Marginal costRevenue @ uniformPAB bidRevenue @ PAB
Total consumer cost
Price paid

Part 2 — Run the game (for lecturers)

The demo game, demo admin, and fake students below are all created by scripts/seed_demo.py; the deployment's setup output shows the credentials to use — there is no real student data anywhere in this walkthrough.

Instructors: log in and create a live sandbox to do all of this hands-on — a throwaway course you can set up and play both the admin and student role in, with every student-facing email landing in your own inbox.

1. Log in as the demo admin

Where: /login

Look for: the admin's name in the top-right nav and an "Admin" area in the menu — confirms you have is_admin rights.

2. Explore generator sets

Where: /admin/generator-sets

Look for: the built-in original-esg fleet (42 plants, 7 portfolios) and a CAISO-based fleet side by side; use "new set" to compose a custom fleet from any mix of portfolios.

3. Upload the fake roster

Where: /admin/roster — upload data/fake_roster.csv

Look for: accounts created with password = student ID; email delivery stays in "console mode" for these fake addresses, so nothing is ever sent.

4. Build teams and assign portfolios

Where: open the seeded ESG Demo Game from /admin/games, then its Teams tab (/admin/games/<id>/teams)

Look for: students grouped into teams, each team assigned a practice portfolio from the chosen generator set.

5. Compose the schedule

Where: the game's Schedule tab (/admin/games/<id>/schedule)

Look for: round types (market / auction / capacity), eras (1990s vs. clean-transition fleet rules), bid deadlines, and per-round carbon price & pay-as-bid settings.

6. Experience the student side

Where: log out and back in as a fake student — /portal/

Look for: per-plant bidding with live warnings, a one-click "reset to marginal cost," submission history, and the what-if simulator.

7. Clear a round and read the report

Where: admin dashboard → a round's Clear action, then its Report view (/admin/rounds/<id>/clear, /report)

Look for: per-block dispatch, clearing price, and every team's profit — this is the same merit-order logic as Part 1, run against submitted bids.

8. Publish results and view standings

Where: Publish action on a cleared round

Look for: students only see results after publishing; standings roll up cumulative profit across rounds.

9. Grant an extension

Where: a round's Extensions tab (/admin/rounds/<id>/extensions)

Look for: per-team deadline overrides, useful for accommodations without moving the whole class's deadline.

10. Run the portfolio auction

Where: an auction round's Run auction action (/admin/rounds/<id>/run-auction)

Look for: teams bidding on whole portfolios, cleared to assign each team its season-long fleet.

11. Capacity planning round

Where: the student capacity workbench, then admin's Capacity plans ranking (/admin/rounds/<id>/capacity-plans)

Look for: students retiring/building plants against an emissions goal; admin ranks plans by cost, emissions, and reliability.

12. Operations: audit log, email outbox, backups

Where: /admin/audit, /admin/emails, and the Back up now button (/admin/backup-now)

Look for: every admin action logged, every "sent" email visible in-app (console mode), and a one-click S3 backup.


Part 3 — Single-player vs. AI

Don't have a full class handy? Create a game with just one human team and let AI opponents play every other portfolio. Each AI strategy is one line:

See the user manual's AI section for the full strategy reference.