PowerOptLab.jl
PowerOptLab is a research laboratory for four-wire distribution-network decisions when the network state or model is uncertain. Its organizing questions are:
- What states and models are compatible with telemetry and metadata?
- What safe measurement or intervention would distinguish material alternatives?
- What operating decision is justified by the remaining alternatives?
The package builds on the BMOPFTools reference current–voltage OPF engine and reuses its neutral-explicit device physics, per-unit handling, and result extraction through public extension seams.
The complete loop is not implemented yet. Current capabilities provide its foundations as separate, explicit research prototypes; the documentation does not treat proposed model-forensics, active-probing, or global-certification APIs as existing functionality. Start with Concepts for the modelling contracts, then read the Research program for the current boundary and priorities.
Capabilities
Component models
New network elements, stamped via model_hook! / solution_hook!.
| Capability | Entry point | Maturity |
|---|---|---|
| Storage / battery with state of charge | StorageDevice | promotion candidate |
| EV charging (V1G / V2G) with availability & departure energy | EVDevice | promotion candidate |
| Advanced inverter (circuit-aware IBR) | AdvancedInverter | experimental |
| Phase-aware inverter controls (local three-leg laws) | SequenceController | research prototype |
| IVQ battery (current–voltage–charge model) | IVQBattery | prototype |
Problem specifications
New formulations over the same physics, via the staged build_opf_model / enforce_kcl! / generation_cost / extract_result API.
| Capability | Entry point | Direction | Maturity |
|---|---|---|---|
| Multi-period OPF co-optimising many snapshots | solve_multiperiod_opf | forward | promotion candidate |
| Legacy WLS state estimation | solve_state_estimation | inverse | prototype |
| Constrained NLLS state estimation | solve_sparse_state_estimator | inverse | prototype |
| Parameter estimation (line lengths / taps) | solve_parameter_estimation | inverse | prototype |
| Inverse Carson reconstruction (compatible overhead constructions) | solve_inverse_carson | inverse | prototype |
| Dynamic operating envelopes (active import/export capacity) | solve_operating_envelope | forward | research prototype |
| Bilevel PV/tap POC (DiffOpt lower-level response) | solve_bilevel_pv_tap | hierarchical | proof of concept |
Bespoke algorithms
Custom solution methods, currently including HELM power flow. See Bespoke algorithms for the method roadmap.
Installation
BMOPFTools is not yet registered. Develop both from local checkouts; automated builds pin BMOPFTools commit 4c0ec8b9c947eea5cd94966f32d2c97f65115b87 (the PowerIO 0.7-compatible snapshot with semantic IBR keys and the public smooth-PWL API):
using Pkg
Pkg.activate(".")
Pkg.develop(path="../BMOPFTools.jl")
Pkg.instantiate()Everything is SI at the interface (watts, vars, watt-hours, volts); per-unit conditioning inside each solve is handled through the engine's opf_bases(ctx) accessor.
How it fits together
See Concepts for how each capability layers over the BMOPFTools staged API, and Contributing for how to add your own and the promotion path back to the BMOPF spec. Each capability page carries a worked example.