|
Hi everyone, |
Replies: 4 comments 2 replies
|
Where are you seeing this "final cleanup is currently being routed to the dual simplex"? Within the IPM crossover, there's no call to the HiGHS dual simplex solver. What you may be seeing is that, after IPM+crossover, a simplex clean-up will be performed if optimality is unknown, or if the LP has been identified as being unbounded or infeasible (and simplex is being used to distinguish the outcomes). However, I'd expect that if the basis is primal (dual) feasible, then primal (dual) simplex is used to clean up. Do you have anything to add @filikat? |
|
Not really. I agree that the clean up with simplex only happens outside of the IPMs, and only if crossover is allowed. |
|
Thanks for the details! You're right that there might not be a hardcoded call within the crossover loop itself, but the clean-up fallback definitely routes to the dual simplex. Here is the exact output I get when running s100.mps from miplib (with solve_relaxation = true, solver = ipx, run_crossover = on): As you can see, the basis after crossover is perfectly primal feasible (3.48e-15) but dual infeasible (1.06e-05). Yet, the fallback clean-up explicitly prints Using dual simplex solver. |
|
Hi @jajhall , I just tested with simplex_strategy=4 to force primal simplex as cleanup As we can see the cleanup faster with primal simplex (47s / 56s) and makes 1037 iterations instead of 9887. I can do more benchmarks if you think it's usefull. |
Yes, but the first dual simplex logging shows zero dual infeasibilities at the start of Phase 1 - for some reason recomputing the primal and dual solution from the crossover basis yields a dual feasible point - so there's no inefficiency