Manual Tuning Overview
Solving a mixed integer problem usually involves five stages, depending on how hard the problem is:
- Presolve.
- Solving the initial LP relaxation.
- Heuristics.
- Cutting.
- Branch-and-bound tree search.
This guide addresses those five parts of the solving process separately in the following sections.
How to tune the Xpress Optimizer for a particular problem depends very much on what your goal is:
- Find any solution.
- For some problems it can be hard to find that first integer solution. The emphasis in such a case will often be on heuristics, and on guiding the branch-and-bound dives away from potential conflicts.
- Find good solutions quickly.
- If the goal is to find better solutions quicker, without necessarily providing any bound on how good the solutions are, the emphasis will usually be on heuristics and a fast branch-and-bound search of the solution space.
- Solve the problem to optimality.
- The Optimizer is by default tuned towards finding an optimal solution to a problem. This balances heuristics for finding good solution with the necessary raising of the best bound in order to prove optimality.
Multi-threaded Solves
The Xpress Optimizer is a multi-threaded solver and will always try to use all available processing cores in your computer. It automatically detects the number of cores available and will limit the number of parallel threads it can start accordingly.
If your Xpress Optimizer has to share system resources with other applications that might be running simultaneously, it might be necessary to limit how many threads, and thereby how many cores, the Xpress Optimizer is allowed to use. Use the THREADS control to set such a limit. By setting THREADS=1 you force the Xpress Optimizer to use a single thread only, which effectively turns off all parallelism. Note that in case of tuner runs, THREADS controls the number of threads per solve run, while the additional TUNERTHREADS control is used to determine how many different settings are tried in parallel solver runs.