An example of what you build on lpspec. A capacity-expansion planner: the model is 69 lines of YAML, the job that solves and archives it 380 lines of Python, this site 1225 lines of Markdown and SQL over the parquet the job wrote, and the notebook 342 lines. All of it is in the source; nothing else is behind it.

What if the cap were tighter, or solar cheaper?

Two sliders, and every position of them is a pathway the solve job has already solved and archived. Nothing solves in your browser: moving a slider looks up one of archives, solves in all, which reach this page as KB of parquet. The Session page asks the same two questions of a live solver, at a cost of 40 MB and a gigabyte of memory; this page answers them on a phone.

Showing the archive : in , and solar at per MW to build.

Standing capacity, MW

The fleet this point builds, period by period. Only the last period is capped, so it is the one that changes.

CO₂ per period, t

This point, against the same solar cost with no cap. The mark in is the cap.

Pathway cost, over the whole grid

Every archive at once. Click a cell to move the sliders to it.

Carbon price in , over the whole grid

The dual of the cap, per tonne. It is zero wherever the cap does not bind, and climbs steeply for the last tonnes.

What cutting the last tonnes costs

Pathway cost against CO₂ in , one curve per solar cost; the one you picked is drawn, the others are grey. The dashed line through the point has the carbon price as its slope, and it touches the curve: the dual the solver returns is the rate at which cost rises as the cap tightens, read off one solve rather than two.

Every point