Gurobi fails to invoke the primal simplex method when doing column generation?

WalterMadelim
Wed, 05 Nov 2025 11:01:15 +0000
Optimization (Mathematical)

I have a refreshing discovery today, based on my acquaintance Column generation · JuMP

wherein, the only thing I changed was the solver (I used Gurobi instead of HiGHS).

This is the master LP’s re-solving logging I acquired when I set Method to 0

LP warm-start: use basis

Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    3.6848477e+02   0.000000e+00   5.526316e-01      0s
       2    3.5932687e+02   0.000000e+00   0.000000e+00      0s

By comparison, this is the counterpart when Method === 1 (the default setting, just the same as the doc).

LP warm-start: use basis

Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0   -3.3333333e+29   1.333333e+30   3.333333e-01      0s
       7    2.9900000e+02   0.000000e+00   0.000000e+00      0s

Okay I believe that everyone would find the former a lot more natural at least in terms of numerics—the primal simplex method which you need to switch to manually—unfortunately this is not the default foolproof setting taught by JuMP.

So the conclusion is:

JuMP’s doc is adopting a default setting that doesn’t attain its expected performance in practice.

PS The motivation that yielded my idea today, was that I was wondering why the dual simplex method is the default. My guess is: modern solvers are row generation based, so the spirit of column generation was opposed to that. And lucky enough—I discovered this outcome—affirming my surmise.
Code (click for more details)
PS2 I further did a test, the results indicate that the default setting (dual simplex method) is indeed the best go-to algorithm for a CTPLN master LP, where I used the (Barrier+noCrossover) as a baseline.

# Barrier+noCrossover
Row  │J      cg_time  cg_rgap     decen_ub   decen_rgap  decen_time  Kverm  Kvermu   KverM  msttimem  msttimemu  msttimeM
     │Int64  Int64    Float64     Float64    Float64     Float64     Int64  Float64  Int64  Float64   Float64    Float64
─────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1 │16192      300  0.0528173   2.05448e5  0.0499749      317.78       1  2.193        3    0.1394    1.41158   3.92962
   2 │16192      900  0.0173547   2.01733e5  0.016572       961.554      1  3.21189      5    0.1394    2.48585   7.85246
   3 │16192     2700  0.00391167  2.00416e5  0.00391474    2817.17       1  4.58745      7    0.1394    4.71001  21.289
# Dual simplex (default)
 Row │J      cg_time  cg_rgap     decen_ub        decen_rgap  decen_time  Kverm  Kvermu   KverM  msttimem    msttimemu  msttimeM
     │Int64  Int64    Float64     Float64         Float64     Float64     Int64  Float64  Int64  Float64     Float64    Float64
─────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1 │16192      300  0.0350881   204397.0        0.0338806      332.166      1  2.48141      3  0.00010705    1.14491   7.80573
   2 │16192      900  0.0130845        2.01481e5  0.0126484      988.064      1  3.48413      5  0.00010705    2.26494  16.9965
   3 │16192     2700  0.00283829       2.00259e5  0.00277348    2802.26       1  4.87148      8  0.00010705    4.66875  81.4494

16 posts - 2 participants