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.
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.
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.
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.
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.
Plain-English first; this section for anyone vetting the maths. Skip if you're not building the optimiser yourself.
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.
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.
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.
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.
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.
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.
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.