-
|
Hi everyone, |
Beta Was this translation helpful? Give feedback.
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? |
Beta Was this translation helpful? Give feedback.
-
|
Not really. I agree that the clean up with simplex only happens outside of the IPMs, and only if crossover is allowed. |
Beta Was this translation helpful? Give feedback.
-
|
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. |
Beta Was this translation helpful? Give feedback.
-
|
Hi @jajhall , I just tested with primal_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. |
Beta Was this translation helpful? Give feedback.
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