3

I am running a large LP (approximately 5M non-zeros) and I want to speed up the solving process. I tried a concurrent solve to test which algorithm solves my problem the quickest and I found that the barrier method is the clear winner (solver = Xpress MP, but I guess that it would be the same for other solvers).

However, I want to further speed it up. I noticed that the real barrier solve takes less than 1% of the total solution time. The remainder of the time is spend in the crossover (~40%) and the primal solve (to find the corner solution in the new basis) (~60%). Unfortunately, I couldn't find a setting to tell the solver to do the dual crossover (there is one in Cplex, but I don't have a license for Cplex). Therefore I couldn't compare if this would be quicker.

Therefore I tried to turn off the crossover which yields a huge speed increase, but there are some disadvantages according to the documentation. So far, the drawbacks that I know of are:

  • Barrier solutions tend to be midface solutions.
  • Barrier without crossover does not produce a basic solution (although that the solver settings mention that "The full primal and dual solution is available whether or not crossover is used.").
    • Without a basis, you will not be able to optimize the same or similar problems repeatedly using advanced start information.
    • Without a basis, you will not be able to obtain range information for performing sensitivity analysis.

My question(s) is(are) simple. What other drawbacks are important to justify the very inefficient crossover step (both Cplex and Xpress MP enable the crossover as default setting). Alternatively, is my problem exceptional and is the crossover step very quick in other problems? Finally, what is wrong with having midface solutions (this means that a corner optimum is also not unique)?

Sources:

takje
  • 2,630
  • 28
  • 47
  • 1
    You can change the behavior of Gurobi crossover by setting the Crossover and CrossoverBasis parameters; I believe Crossover=2 or 4 will do what you want. Also, setting BarConvTol to a smaller value may make crossover easier. – Greg Glockner Jun 29 '16 at 21:21

1 Answers1

4

Main disadvantage: the solution will be "ugly", that is many 0.000001 and 0.9999999 in the solution values. Secondly you may get somewhat different duals. Finally a basis is required to do fast "hot starts". One possible way to speed up large models up is to use a simplex method and using an advanced basis from a representative base run.

Erwin Kalvelagen
  • 15,677
  • 2
  • 14
  • 39
  • What do you mean with "somewhat different duals?" Furthermore, what do you exactly mean with a basis. An edge point on the original constraints? This would only be the case if you want to do a primal or dual hot start, right? – takje Jun 28 '16 at 22:33
  • 1
    Like primal solution, the duals are slightly different. Also consider degeneracy. Sometimes the duals are more different than expected. The concept of a basis is an important fundament in linear programming. Any book on LP will tell you much about it. I am not familiar with the term edge point, I guess this is a corner point or basic solution. Both primal and dual simplex can hot start from an advanced basis, but there are some technical differences largely related to feasibility. In practice: just try to see which is faster. – Erwin Kalvelagen Jun 29 '16 at 08:21