Wednesday, March 16, 2016

Large assignment problem

I usually solve assignment problems:

\[\begin{align} \min\>& \sum_{i,j} c_{i,j} x_{i,j} & \\ & \sum_j x_{i,j} = 1 & \forall i \\ & \sum_i x_{i,j} = 1 & \forall j \\ & x \in \{0,1\} \end{align}\]

as an LP or MIP. It is often argued that specialized solvers are much faster on this. Here some results with a \(1000\times 1000\) problem, artificially created:

image

See also here. One of the advantages of using an LP/MIP is that I can react more quickly on changes in the problem. Often what starts out as a straight assignment problem becomes in the end something rather different. See here for an example of that.

Notes:

  • The assignment solver in the R Adagio package deals with integer cost coefficients only.
  • Current state-of-the art LP solvers are very, very fast. The need for specialized network solvers in these packages becomes somewhat less apparent. Indeed Gurobi does not offer one.
  • lp.assign is just calling the LPSolve LP/MIP solver.