The barrier algorithm is an interior-point method i.e. it starts from a point inside the feasible region and iteratively moves towards the optimal one. This typically results in a solution that does not lie exactly at the vertex but in the interior. This is where you'll see the barrier algorithm terminate in the CPLEX log.
Once the barrier algorithm terminates, CPLEX (like most other solvers) starts a "crossover" phase, by default, where it tries to get a vertex solution (with the accompanied basis) from the barrier solution. It does so by pushing the primal & dual variable values to their bounds and repairing any resulting infeasibilities with simplex. In many cases, the crossover can take a long time to finish (sometimes even longer than the barrier algorithm itself). However, this is not really necessary if you're only concerned with getting the optimal solution to your problem. You can disable it in CPLEX by setting the solutiontype parameter to 2.
Some benefits of crossover (which, I suspect, are the reasons why most solvers enable it by default) are:
- Once the solver has a vertex solution, it can use it to initiate subsequent simplex solves. This is particularly useful for solving LPs sequentially where the problem changes minimally (Eg. adding or removing a few constraints, changing a few variable bounds, etc.)
- Without the basis (from the vertex solution), there is no convenient way of querying which variables and constraints are binding in the optimal solution.
- Many real-world problems have multiple optima and practitioners prefer sparse solutions with variable values set at their bounds. Lots of 0 & 1.