In build · CEMeridian
By Compounding Energy
In build Platform infrastructure — replaces our HiGHS dependency across CEGridSight, CEForesight, CENovaSage, CE BESS Arbitrage, and CEDeris.

A native Rust LP, MIP, and QP solver — built for the problems the rest of the platform actually solves.

CEGridSight runs on HiGHS today. It works, it's fast enough, and it's the right starting point — but it isn't ours, and the structure of a 27-zone, 480-period unit-commitment MILP isn't the structure a generic backend exploits well. CEMeridian is the in-house replacement: native Rust, dispatch-aware decomposition, warm-started from production shadows, and instrumented to debug the dispatch — not just the solver.

Why this exists

A solver should know what problem it's solving.

Generic LP/MIP backends — HiGHS, CBC, the commercial ones — treat every problem as an arbitrary sparse matrix. Power-system dispatch isn't arbitrary: it has a per-zone block structure, predictable temporal coupling, and a small set of binary decisions that explain almost all of the integrality gap. CEMeridian is built around that structure rather than against it, with the platform's own warm-start data as a first-class input rather than an afterthought.

What it does

Three pillars.

01

LP, MIP, and QP in one stack

Linear, mixed-integer, and quadratic programming under a single Rust core. The QP path matters specifically for risk-aware bidding (CE BESS Arbitrage) and for AC-OPF screening (CEForesight); doing it in one codebase avoids three unrelated solver dependencies.

02

Dispatch-aware decomposition

Benders and Lagrangian splits aligned to the natural per-zone and per-time-block structure of the dispatch MILP — exploiting the structure that's actually there, rather than the structure a generic preprocessor can guess.

03

Warm-started by construction

Each new run warm-starts from the previous 6-hour MILP solution — basis, integer assignments, and binding-cut history all carried forward. The expected delta between consecutive runs is small; we exploit that explicitly rather than re-solving from scratch.

Methodology

For the quants in the room.

Plain-English first; this section for anyone vetting the maths. Skip if you're not building the optimiser yourself.

LP core

Dual simplex + interior point.

Native Rust dual simplex with bound-flipping ratio test and steepest-edge pricing for warm-started re-optimisation; interior-point (Mehrotra predictor-corrector) for cold solves on large LPs. Crossover to a basic solution provided when downstream MIP needs it.

MIP

Branch-and-cut with structural cuts.

Branch-and-cut on top of the LP core, with cut families derived from the unit-commitment structure: tight Carrion–Arroyo formulation, Damci-Kurt cuts, and ramp-and-min-up/down cuts generated structurally rather than learned. Strong branching restricted to commitment binaries that empirically dominate the gap.

QP

Active-set with rank-one updates.

Active-set QP for warm-started CVaR-aware battery bidding; convex Hessians from the risk objective, sparse linear constraints from the energy/SoC structure. Rank-one Cholesky updates as the active set evolves; degeneracy handled by Bland's rule fallback.

Decomposition

Benders + temporal block-coordinate.

Benders cuts on inter-zonal coupling constraints; block-coordinate descent on temporal blocks of representative weeks for the capacity-expansion problem. Master and subproblem solves run in parallel where the cut graph allows; cuts cached per problem hash and reused across consecutive runs.

Instrumentation

Per-block, per-cut, per-constraint traces.

Every solve emits a structured trace — solve time per block, cuts added per round, dual values for every binding constraint, basis turnover. We can debug why a dispatch run priced badly, not just why it took 8 minutes instead of 3.

Interface

Python API compatible with HiGHS.

Drop-in replacement for the HiGHS Python interface used across the platform today. Switch the backend per environment variable; all CEGridSight, CEForesight, CENovaSage, CE BESS Arbitrage, and CEDeris workloads run unchanged on either solver during the migration.

Status

In active build.

CEMeridian is in active build. The LP core lands first; MIP and QP follow on the same Rust foundation. The migration target is for every Compounding Energy product to run on either CEMeridian or HiGHS interchangeably during the transition, with CEMeridian as default once benchmarks settle.