Envelope-Gradient Optimization Layer
Implementation & benchmark of arXiv:2608.04189 — Structured Differentiable Optimization for Efficient Decision-focused Learning in Power Systems
Source paper: Structured Differentiable Optimization for Efficient Decision-focused Learning in Power Systems arXiv:2608.04189 ⓘ · analyzed Aug 31, 2026
AI-generated research hypothesis, automatically tested. Not peer-reviewed.
Idea description
When the training objective uses only the optimal value of a differentiable quadratic program, bypass the adjoint KKT solve entirely and differentiate the value with respect to neural predictions using the envelope theorem. This is especially suitable for decision-focused learning where the network predicts costs, loads, or constraints and the loss is the resulting optimal operating cost.
Formulas
Mathematical statement
Let $V(\phi)=\min_z f(z,\phi)$ subject to $g(z,\phi)=Az-b=0$ and $r(z,\phi)=Gz-h\le0$. Assume a unique regular optimum, a fixed active set, and differentiability. With Lagrangian $\mathscr L(z,\lambda,\nu;\phi)=f(z,\phi)+\lambda^\top(Az-b)+\nu^\top(Gz-h)$, where $\nu\ge0$, stationarity and complementary slackness imply the envelope theorem $dV/d\phi=\partial\mathscr L/\partial\phi$ evaluated at $(z^\star,\lambda^\star,\nu^\star)$. Thus no $dz^\star/d\phi$ is required. For $f=\frac12z^\top Pz+q^\top z+c$, the differential is $dV=\frac12 z^{\star\top}(dP)z^\star+(dq)^\top z^\star+dc+\lambda^{\star\top}((dA)z^\star-db)+\nu^{\star\top}((dG)z^\star-dh)$. The gradient is exact within a fixed regular active region; nonsmooth behavior can occur when the active set changes.
Implementation notes
Use this as a specialized autograd path for a scalar decision-focused loss equal to the QP optimum $V(\phi)$, or to a weighted sum of independently solved QP values. The neural network outputs $\phi$; the forward layer calls a QP solver and caches $z^\star,\lambda^\star,\nu^\star$. In backward, compute vector-Jacobian products directly from $\frac12z^{\star\top}(dP)z^\star+(dq)^\top z^\star+dc+\lambda^{\star\top}((dA)z^\star-db)+\nu^{\star\top}((dG)z^\star-dh)$, then backpropagate through the inexpensive parameterization $\phi\mapsto(P,q,c,A,b,G,h)$. For example, if only $q(\phi)=W\phi+q_0$ varies, return $\partial V/\partial\phi=W^\top z^\star$; if only $h(\phi)=H\phi+h_0$ varies, return $\partial V/\partial\phi=-H^\top\nu^\star$. The solver supplies primal and dual values; the theorem and chain-rule contractions are taken from the paper, while gradient correctness should be checked empirically with finite differences. First test on an MLP forecasting 24-hour demand for a small economic-dispatch QP, comparing envelope differentiation with a generic differentiable-QP adjoint implementation and ordinary MSE training. Measure backward latency, peak memory, operating cost, and finite-difference relative error. The prediction is zero additional KKT linear solves for a scalar value loss, with relative gradient error below $10^{-3}$ while the active set is fixed; loss and gradient curves should show kinks only at active-set transitions, and the speedup should increase with QP dimension.
Verification
Stage 1 · Toy mechanism gate: Passed ✓
Stage 2 · Mechanism transferred to benchmark: Confirmed ✓
Stage 2 · Practical benchmark result: No measurable effect
Methodology: 8 paired seeds, permutation test (p<0.05) against a learning-rate-tuned baseline. How verification works
Stage 1 — Mechanism check agent confidence 9/10
Built an active-set-enumeration QP layer with envelope-theorem gradients for parameterized q and h, plus finite-difference and timing checks. The fixed-active prediction was confirmed with maximum relative error 1.59e-12, and the active-constraint dual contribution was confirmed with 7.26e-11 relative error. The predicted active-set transition q=-0.7 was observed at -0.6995, while envelope VJPs were about 28.8–36.0x faster than a generic KKT adjoint solve in this microbenchmark.
- Agent confidence
- 9/10
- Baseline
- Generic KKT adjoint solve: 118.2–160.4 microseconds across n=4–32; scalar-value gradient requires one linear solve.
- Idea
- Envelope gradient: 3.95–4.11 microseconds; finite-difference relative error 1.59e-12 in the fixed-active case and 7.26e-11 with all four inequalities active; observed speed ratio 28.8–39.5x.
Limitations: This is a small CPU toy experiment using active-set enumeration, not a production QP solver. It does not include the proposed MLP demand-forecasting training experiment, GPU measurements, large QP dimensions, general P/A/G parameterizations, or extensive nonsmooth active-set-transition testing.
How to run: python3 run_checks.py
Stage 2 — Benchmark vs. tuned baseline (arXiv:2608.04189)
Ahead of the baseline (−0.0%) but not statistically significant (p=0.6235, wins 4 / 8 paired seeds).
- Benchmark
- Custom_qp_decision_value
- Model
- mlp_tiny
- Paired seeds
- 8
- Baseline mean
- 0.064
- Idea mean
- 0.064
- Effect (Δ)
- -0 (−0.0%; negative = idea better)
- Wins
- 4 / 8 paired seeds
- p-value
- 0.6235 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±0.0%
- Mechanism
- Confirmed ✓
- Practical effect
- No effect
- Baseline tuning
- swept over 3 configs
The custom benchmark is a small synthetic box-constrained QP rather than a production-scale economic-dispatch solver. Only q-parameterization was tested; P, A, b, G, and h gradients were not benchmarked. Timing used short CPU runs and did not establish GPU memory or large-QP scaling.
How to run: python3 qp_bench.py
Verdict computed by deterministic test code from paired-seed statistics — not by the language model.
Stage 2 — Benchmark latest Failed ✗
Agent confidence: 9/10
Built and ran the required full 8-seed paired benchmark on a structurally matched custom QP decision-learning track. Envelope and generic KKT systems achieved indistinguishable test MSE (delta -2.79e-09, permutation p=0.6235), so there was no significant learning win. The mechanism prediction was confirmed quantitatively: finite-difference relative error was 8.71e-05 and the measured mean training-time speedup was 26.68x, but the primary task metric did not improve.
- Baseline
- Generic KKT implicit backward, best lr=0.006: test MSE mean 0.06396158784627914, std 0.015289131221240046, 8 seeds.
- Idea
- Envelope backward, best lr=0.006: test MSE mean 0.06396158505231142, std 0.015289122453052478, 8 seeds; paired delta -2.7939677238464355e-09, permutation p=0.6235; mean measured speedup 26.677828590920377x.
Benchmark result
Ahead of the baseline (−0.0%) but not statistically significant (p=0.6235, wins 4 / 8 paired seeds).
- Benchmark
- Custom_qp_decision_value
- Model
- mlp_tiny
- Paired seeds
- 8
- Baseline mean
- 0.064
- Idea mean
- 0.064
- Effect (Δ)
- -0 (−0.0%; negative = idea better)
- Wins
- 4 / 8 paired seeds
- p-value
- 0.6235 (permutation test, 20 000 shuffles)
- Smallest detectable effect
- ±0.0%
- Mechanism
- Confirmed ✓
- Practical effect
- No effect
- Baseline tuning
- swept over 3 configs
The custom benchmark is a small synthetic box-constrained QP rather than a production-scale economic-dispatch solver. Only q-parameterization was tested; P, A, b, G, and h gradients were not benchmarked. Timing used short CPU runs and did not establish GPU memory or large-QP scaling.
How to run: python3 qp_bench.py
Artifacts
- bench_report.json 3.4 KB View Raw
- envelope_experiment.py 5.4 KB View Raw
- qp_bench.py 7.5 KB View Raw
- report.md 1.4 KB View
- report_bench_2026-08-31T212125.md 3.9 KB View
- results.json 1.8 KB View Raw
- run_checks.py 1.9 KB View Raw