Optimization
EnergyClosureIQ
Picks which inactive wells an operator should close to hit its regulatory quota at lowest cost, using constraint optimization against a live budget slider.

The problem
In 2025 and 2026 the AER overhauled how it manages well closure. Under Directive 088 every operator now gets a share of a mandatory industry closure quota, against a backdrop of roughly 78,000 inactive wells and tens of billions in cleanup liability. The hard question for each operator is which wells to close this year to hit the quota at the lowest cost, and most teams answer it in spreadsheets.
What I built
- Parsed the public ST37 well list and the inactive well list into a database, which also produces a ranked list of operators by inactive count.
- Attached closure cost estimates built from published AER liability values, always labeled as estimates, because the real financial numbers are confidential and I would not claim precision the public data cannot support.
- Built the core as a Google OR-Tools constraint optimizer that picks the lowest cost set of wells to meet a quota and budget, using a fixed charge area batching model that provably beats a naive priority sort.
- Put it behind a live dashboard with a budget slider that compares the optimized plan against the naive baseline, with obligations cited to the directive text.
The outcome
The optimizer consistently beats the sort by priority approach most teams default to, and being upfront that the costs are estimates is a feature, not a weakness, because it is exactly the line a regulator or operator checks first.
Stack
- Python
- OR-Tools
- FastAPI
- Leaflet
- Next.js