Automated Configuration of MIP solvers
(auto-tuning CPLEX et al.)

This website explains how to use ParamILS to tune the performance of CPLEX, Gurobi, or lpsolve for the type of instances you are interested in.
All you need is a set of benchmark instances and some CPU time.

Our approach and empirical results for speeding up MIP solvers (e.g. CPLEX by up to a factor of 50) are discussed in the following papers. 

To tune (configure) CPLEX with ParamILS, simply follow these steps:
That is it. Just specify your own benchmark instances etc in ParamILS' scenario file as discussed in the ParamILS Quickstart manual and start the algorithm configuration process.
We hope that in the future ParamILS will be integrated into CPLEX, such that using it becomes a matter of typing "tune" in the interactive optimizer.
Note: in order to get robust results, we recommend doing multiple runs of ParamILS (e.g., 10) with different values for numRun, and using the result of the one with the best training performance. That is the same methodology we used in the papers cited above.

To make life easier, Andrew Coles has written a small perl script that takes a result.txt file from a ParamILS run using the CPLEX wrapper, and turns it into a chunk of C or C++ code that make the CPLEX callable library calls to set the equivalent parameters. Simply call the script,, without arguments to find out how to use it.

Configuration of Gurobi and lpsolve with ParamILS

ParamILS does not only apply to optimizing CPLEX. It can also be applied to other MIP solvers, such as Gurobi and lpsolve. In fact, the wrappers for those solvers are somewhat simpler because they are meant to be called from the command line.
Everything is the same as for optimizing CPLEX, except the wrappers and parameter files.

Here are the wrapper and parameter files for Gurobi: gurobi_wrapper.rb, gurobi_params.txt.

Here are the wrapper and parameter files for lpsolve: lpsolve_wrapper.rb, lpsolve_params.txt.

Please send any questions, concerns or comments to Frank Hutter