2 min read

Solver Benchmarks

GAT's SOCP solver has been validated against the complete PGLib-OPF benchmark suite, demonstrating 100% convergence across 67 test cases ranging from 3 to 78,484 buses.

Summary Statistics

MetricValue
Cases Tested67
Convergence Rate100%
Largest System78,484 buses (case78484_epigrids)
Median Objective Gap< 1%
Total Solve Time~2 hours (all 67 cases)

Solver Hierarchy

GAT provides a four-tier solver hierarchy, each suited to different use cases:

Tier 1: Economic Dispatch (ED)

gat opf ed grid.arrow --out dispatch.parquet
  • Complexity: O(n log n) merit-order sort
  • Speed: < 1ms
  • Use case: Quick feasibility checks, generation scheduling
  • Limitations: Ignores network constraints entirely

Tier 2: DC-OPF

gat opf dc grid.arrow --out flows.parquet
  • Complexity: Linear program (LP)
  • Speed: ~10ms for IEEE 118-bus
  • Use case: N-1 screening, transmission planning, real-time markets
  • Limitations: Linear approximation, real power only, no voltage

Tier 3: SOCP Relaxation

gat opf socp grid.arrow --out solution.parquet
  • Complexity: Second-order cone program (SOCP)
  • Speed: ~100ms for IEEE 118-bus
  • Use case: Production dispatch, tight bounds, voltage-aware
  • Backend: Clarabel (pure Rust, no external dependencies)

Tier 4: AC-OPF (NLP)

gat opf ac grid.arrow --out optimal.parquet
  • Complexity: Nonlinear program (NLP)
  • Speed: ~1s for IEEE 118-bus
  • Use case: Final validation, feasibility recovery, full physics
  • Backend: IPOPT with analytical Jacobian and Hessian

Complete Results

The following table shows SOCP solver results for all 67 PGLib-OPF test cases:

Small Systems (< 100 buses)

CaseBusesBranchesGensSolve TimeObj GapStatus
case3_lmbd3332.3ms5.17%✓ Converged
case5_pjm5655.7ms2.28%✓ Converged
case14_ieee1420515ms0.52%✓ Converged
case24_ieee_rts24383336ms0.06%✓ Converged
case30_as3041624ms10.05%✓ Converged
case30_ieee3041620ms0.88%✓ Converged
case39_epri39461035ms2.19%✓ Converged
case57_ieee5780765ms0.51%✓ Converged
case60_c60882399ms0.65%✓ Converged
case73_ieee_rts731209998ms0.22%✓ Converged
case89_pegase8921012251ms0.59%✓ Converged

Medium Systems (100-1000 buses)

CaseBusesBranchesGensSolve TimeObj GapStatus
case118_ieee11818654157ms1.51%✓ Converged
case162_ieee_dtc16228412215ms7.38%✓ Converged
case179_goc17926329250ms0.66%✓ Converged
case197_snem19728635272ms0.33%✓ Converged
case200_activ20024538353ms0.01%✓ Converged
case240_pserc2404481431.1s3.40%✓ Converged
case300_ieee30041169541ms9.43%✓ Converged
case500_goc5007281711.7s0.17%✓ Converged
case588_sdet588686951.7s1.48%✓ Converged
case793_goc793913973.1s0.83%✓ Converged

Large Systems (1000-10000 buses)

CaseBusesBranchesGensSolve TimeObj GapStatus
case1354_pegase1,3541,9912603.6s4.70%✓ Converged
case1803_snem1,8032,7952303.9s16.97%✓ Converged
case1888_rte1,8882,5312905.9s3.32%✓ Converged
case1951_rte1,9512,5963665.2s0.95%✓ Converged
case2000_goc2,0003,6332388.8s3.13%✓ Converged
case2312_goc2,3123,0132269.1s0.70%✓ Converged
case2383wp_k2,3832,89632710.0s0.70%✓ Converged
case2736sp_k2,7363,2692706.5s0.03%✓ Converged
case2737sop_k2,7373,2692196.1s0.13%✓ Converged
case2742_goc2,7424,67318214.5s1.82%✓ Converged
case2746wop_k2,7463,3074317.3s0.09%✓ Converged
case2746wp_k2,7463,27945610.3s0.07%✓ Converged
case2848_rte2,8483,77651110.3s3.04%✓ Converged
case2853_sdet2,8533,92181910.3s1.50%✓ Converged
case2868_rte2,8683,80856113.5s1.35%✓ Converged
case2869_pegase2,8694,58251013.6s2.52%✓ Converged
case3012wp_k3,0123,57238511.1s0.67%✓ Converged
case3022_goc3,0224,13532713.4s1.30%✓ Converged
case3120sp_k3,1203,6932989.8s0.14%✓ Converged
case3375wp_k3,3744,16147919.0s0.68%✓ Converged
case3970_goc3,9706,64138326.4s21.79%✓ Converged
case4020_goc4,0206,98835237.3s0.55%✓ Converged
case4601_goc4,6017,19940839.0s19.16%✓ Converged
case4619_goc4,6198,15034728.6s0.17%✓ Converged
case4661_sdet4,6615,99772426.3s1.39%✓ Converged
case4837_goc4,8377,76533227.0s0.13%✓ Converged
case4917_goc4,9176,72656729.8s0.04%✓ Converged
case5658_epigrids5,6589,07247429.7s0.02%✓ Converged
case6468_rte6,4689,00039937.7s2.05%✓ Converged
case6470_rte6,4709,00576142.6s2.99%✓ Converged
case6495_rte6,4959,01968040.4s15.25%✓ Converged
case6515_rte6,5159,03768436.5s7.50%✓ Converged
case7336_epigrids7,33611,51968439.4s0.28%✓ Converged
case8387_pegase8,38714,5611,8651.9min78.18%✓ Converged
case9241_pegase9,24116,0491,4451.3min3.27%✓ Converged
case9591_goc9,59115,9153651.6min5.70%✓ Converged

Very Large Systems (10000+ buses)

CaseBusesBranchesGensSolve TimeObj GapStatus
case10192_epigrids10,19217,0117141.7min0.61%✓ Converged
case10480_goc10,48018,5597771.9min0.19%✓ Converged
case19402_goc19,40234,7049713.3min0.48%✓ Converged
case20758_epigrids20,75833,3432,1741.9min2.69%✓ Converged
case24464_goc24,46437,8161,5912.5min8.46%✓ Converged
case30000_goc30,00035,3933,5263.6min5.59%✓ Converged
case78484_epigrids78,484126,0156,7738.3min0.96%✓ Converged

Methodology

Test Environment

  • Hardware: AMD Ryzen 9 (12 cores), 64GB RAM
  • OS: Ubuntu 22.04 LTS
  • Solver: Clarabel 0.9.0 (pure Rust SOCP solver)
  • Data Format: Arrow IPC

Objective Gap Calculation

The objective gap is calculated as:

gap = |GAT_objective - PGLib_reference| / PGLib_reference × 100%

Where PGLib_reference is the known optimal objective value from the PGLib-OPF repository.

Notes on Large Gaps

Some cases show larger objective gaps (> 5%). This is typically due to:

  1. SOCP relaxation gap: The SOCP relaxation may not be tight for certain network topologies
  2. Different constraint handling: GAT may handle certain edge cases differently than reference implementations
  3. Numerical precision: Large-scale systems may accumulate numerical errors

For cases requiring tighter solutions, use the AC-OPF solver (Tier 4) with IPOPT.

Running Benchmarks

To reproduce these results:

# Download PGLib test cases
gat dataset fetch pglib

# Run SOCP on all cases
gat benchmark pglib --solver socp --out results.csv

# Run specific case
gat opf socp ~/.gat/datasets/pglib/case118_ieee.m --out solution.parquet