Set up the session, assign participants to plants and roles, generate PINs.
✓ Session active
ACTIVE SESSION CODE
—
or join with a session code
SESSION CODE
—
Ask your facilitator for the session code
🔑
Facilitator login
Enter the admin PIN to set up the session and assign participants
Default PIN: 1234
📊 Create session
PARTICIPANTS
GENERATOR ASSIGNMENT
✓ Session ready
Share the game code and individual PINs with participants
⚡Republic of Valdoria · Valdorian Energy Market Authority · Simulation v5
⚡ Electricity market simulation
A progressive teaching game — from market foundations to RES integration
Choose your role
Select level
Level 1Market foundationsDAM3 rounds▸
Simple day-ahead market with fixed inelastic demand and cost-based bids. Learn how the merit order works, why the marginal unit sets the price, and what infra-marginal rents are. 3 rounds across different demand levels, 2 zones, unconstrained DC OPF.
Same as Level 1 but generators can freely set bid prices and split capacity into two offer blocks at different prices. Learn the volume-vs-margin trade-off: a higher bid earns more per MWh if dispatched, but risks non-dispatch if undercut by a cheaper rival.
Two-zone market with a configurable transmission limit (Tmax). When the inter-zone line is congested, zones clear at separate MCPs — creating congestion rent and pivotal suppliers with local market power. Strategic 2-block bidding while accounting for congestion.
DAMConstrained DC OPFZonal pricesCongestion rent3 rounds2 zones
📐 Market: Day-Ahead (DAM) · ⚡ Focus: Locational pricing, market power, value of transmission
Three-stage market sequence: Day-Ahead → Intraday revision → Balancing settlement. Bid on an imperfect forecast in the DA, revise your position intraday as information improves, then face balancing penalties on any residual imbalance at delivery.
DA → ID → BMForecast errorImbalance penalty3-stage settlement3 rounds2 zones
5-round high-RES day: pre-dawn → morning ramp → solar surplus → evening ramp-down → evening peak. Manage variable RES output, battery state of charge, curtailment risk, and scarcity pricing. Negative prices possible in surplus hours.
DC OPF note: Demand is fixed (perfectly inelastic). With Tmax = ∞ in Levels 1 & 2a, both zones share one merit order and a single MCP. Zonal price separation requires binding transmission limits (Level 2b).
Level 2b — transmission limit
Set the inter-zone transmission capacity. When flow exceeds this limit, the DC OPF splits into two zonal markets with separate MCPs — creating congestion rent and potentially pivotal suppliers.
2000+ MW Unconstrained — behaves like Level 2a (single MCP)
Level 3b — RES-dominated system
5 rounds simulating a high-RES day: pre-dawn, morning ramp, solar peak surplus, evening ramp-down, and evening peak scarcity. Demand profiles and RES output are pre-configured. Your decisions: battery charge/discharge strategy and price bids for dispatchable plants.
RES penetration level
Battery initial state of charge
Teaching focus: storage dispatch timing, curtailment economics, the duck curve, scarcity rents during evening ramps, and the value of flexibility.
Level 3a — forecast uncertainty
Market sequence: Day-ahead (DA) bid → Intraday (ID) revision after updated forecast → Balancing mechanism (BM) settles residual imbalance at a penalty price. Generators are long or short relative to their DA position.
Forecast error magnitude
Balancing penalty multiplier
Regulator controls (pre-session)
As regulator, you can set a price cap before each round. The cap is configured in-game on the Regulator tab. Here you may set a default starting cap.
R1500
Multiplayer settings
Session name
Bid timer per round
No players yet.
Observing Market Player view
1 — Day-Ahead Submit DA bid
2 — Intraday Revise position
3 — Balancing Settle imbalance
Battery dispatch — this hour
Set charge (+MW, consuming energy) or discharge (-MW, generating energy) for each battery.
State of charge carries over between rounds. Cannot discharge more than current SoC.
Cannot charge more than remaining capacity.
Bid settings
Merit order — all zones
Submit bids to see merit order.
← cheapermore expensive →
Dispatch table
No results yet.
Submit bids to see results.
Cumulative profit leaderboard
No rounds completed.
MCP trend
Level 1 — how the market clears
Generators submit price–quantity offers. The system operator solves a DC OPF to find the least-cost dispatch meeting all zone demands. The last accepted offer sets the MCP for all dispatched units (uniform pricing).
Step 1 Offers sorted cheapest-first (merit order)
Step 2 DC OPF dispatches from cheapest until demand met
Step 3 Last accepted offer = MCP for all dispatched units
With fixed demand, only changes in demand across rounds alter the MCP. Rising demand in rounds 2 and 3 pulls more expensive plants into dispatch.
Level 2a — bidding strategy
Bidding above cost shifts the supply curve up. The volume-vs-margin trade-off: higher bid → larger margin if dispatched, but risk of non-dispatch if undercut.
At cost Guaranteed dispatch. Earns infra-marginal rent only when MCP is set by others.
Above cost Higher margin if dispatched. Risk non-dispatch if a cheaper rival undercuts you.
Level 2b — grid constraints and market power
When the inter-zone transmission line is congested, the single system merit order splits into two separate zonal markets. The constrained DC OPF dispatches the cheapest available generation in each zone, but cannot use more cheap Zone A generation than the line can carry to Zone B.
Congestion rent = (MCPB − MCPA) × flowAB Collected by the system operator. Signals value of new transmission investment.
Pivotal supplier A generator whose capacity is essential to meeting local demand even if it bids above cost. It can withhold or raise price without being displaced.
When Tmax binds, the cheap Zone A plant (e.g. nuclear) cannot export more to Zone B. Zone B must use its own expensive plants — pushing MCPB above MCPA.
Level 3b — RES-dominated system mechanics
Variable RES Solar and wind output is exogenous — determined by weather, not bids. RES always dispatched first at zero cost.
Curtailment When RES + must-run generation exceeds demand, surplus is curtailed. MCP → R0 or negative. Generators may bid negative to avoid curtailment.
Battery SoC State of charge (MWh) carries across rounds. Charge during surplus (low/negative MCP). Discharge during scarcity (high MCP). Timing is the key strategic decision.
The duck curve: Net demand (total demand minus RES) dips sharply at midday, then ramps steeply in the evening. This creates two economic problems: over-generation risk at noon and scarcity risk at dusk. Battery storage bridges both.
Scarcity pricing Round 5: RES drops to near-zero, demand peaks. Batteries may be depleted. OCGT and diesel set a high MCP. Infra-marginal rents flow to hydro and nuclear.
Flexibility value A battery charged at R0/MWh in round 3 and discharged at R800/MWh in round 5 earns R800/MWh arbitrage — this is the economic case for grid storage.
Level 3a — three-stage market sequence
Stage 1: Day-Ahead (DA) Submit volume bid based on demand forecast. DA clears at DA-MCP. Your DA position = contracted MW.
Stage 2: Intraday (ID) Updated forecast revealed. Revise your position up or down at ID-MCP. Reduces imbalance exposure before real-time.
Stage 3: Balancing (BM) Actual demand revealed. Residual imbalance settled at penalty price (BM price = k × MCP). Long generators sell surplus cheap; short ones buy deficit expensive.
Key insight: The value of better forecasting is reduced imbalance exposure. A generator that is long (over-produced) sells the surplus at a low BM buy price. One that is short must buy the deficit at a high BM sell price. Better forecasts = lower expected imbalance cost.
Glossary
Merit order — generators ranked lowest-to-highest MC MCP — market-clearing price; last dispatched bid Infra-marginal rent — (MCP − MC) × dispatched MW Uniform pricing — all dispatched units receive the same MCP DC OPF — lossless linear power flow; minimises cost subject to network constraints DAM — day-ahead market IPP — independent power producer PPA — power purchase agreement (long-term fixed-price contract) Tmax — maximum inter-zone transmission capacity (MW) Congestion rent — (MCPB − MCPA) × flow; accrues to system operator Pivotal supplier — generator whose capacity is essential locally; can raise price without being displaced DA position — contracted volume from the day-ahead market Imbalance — difference between contracted DA/ID position and actual metered output BM — balancing mechanism; settles residual imbalance at penalty prices Long — produced more than contracted; sells surplus at low BM buy price Short — produced less than contracted; buys deficit at high BM sell price
⚡ Republic of ValdoriaInterconnected two-zone electricity system
Observing Market Operator view
🖥️ System operator view: You see all bids from all generators and run the DC OPF dispatch. Monitor system balance, merit order, and supply security across both zones.
All generator bids — merit order
Bids submitted to see merit order.
← cheapermore expensive →
Full dispatch table (all players)
No results yet.
🦆 Duck curve — net demand profile
Net demand = Total demand − RES output. The steep ramp from Round 3 to Round 5 creates storage arbitrage opportunities and scarcity pricing risk.
Two-zone network (DC OPF)
DC OPF formulation
Objective: min Σ (bid pricei × dispatched MWi) Demand balance: ∀ zone z: Σ genz + net importsz = demandz Power flow (DC): flowAB = (θA − θB) / XAB (lossless) Transmission limit: |flowAB| ≤ Tmax Generation limits: 0 ≤ gi ≤ gmaxi Levels 1 & 2a: Tmax = ∞ → single system MCP; no congestion rent
Zone A balance
No results yet.
Zone B balance
No results yet.
Reserve margin
Round-by-round MCP trend
History log
No rounds completed.
Observing Regulator view
⚖️ Regulator view: Set a price cap before each round. Observe how the cap affects the MCP, generator dispatch decisions, supply security, and investment signals.
📊
Facilitator dashboardSwitch views to observe any role
View as:
⚙️ Market control
MARKET STATUS
—
Strategic bidding
Currently: OFF (Level 1 bids at MC only)
📡 Bid tracker
📋 All bids — current round
👥 Live roster
📊 Merit order snapshot
📈 Round history
Price cap — Round 1
If the market-clearing price would exceed your cap, the MCP is truncated to the cap level. Dispatched generators receive only the capped price. Set too low and peakers may refuse to bid — risking load shedding.
Price cap (R/MWh)
Cap level
R 1,500
Cap status
Cap is currently OFF. Market will clear freely.
Peaker viability check
At your current cap, check whether peaking plants can recover their costs:
Risks • Suppresses investment signals for new capacity • May deter peakers from bidding → load shedding • Distorts the merit order • Undermines long-run adequacy
Regulatory trade-offs to observe
Q1. At what cap level do peakers stop recovering fixed costs? What happens to supply security? Q2. Does your cap affect the dispatch order, or only the revenue of the marginal plant? Q3. Compare consumer savings (capped MCP × total demand) against the investment signal destroyed. Q4. In South Africa: how does NERSA's MYPD determination relate to this price cap mechanism? Q5. Should the cap apply uniformly or only during declared scarcity conditions?
Session debrief
Full results, market analysis, and facilitator discussion guide