Introduction
The FICO Xpress Optimizer is a powerful optimization engine that sits at the core of the FICO Xpress Optimization Suite. It is capable of solving a wide range of mathematical programming problems, such as linear problems, quadratic problems and mixed integer versions of these. The Xpress Optimizer can be called either indirectly, through the Mosel modelling language, or directly through a variety of programming APIs, including the Builder Component Library (BCL).
The FICO Xpress Optimization Suite also includes the ability to solve general non-linear problems, which uses the Xpress SLP solver. This guide is primarily concerned with the Xpress Optimizer. For information on how to get the most out of Xpress SLP, please refer to the Xpress SLP Reference Manual.
The Xpress Optimizer employs many diverse techniques when solving a given problem. Which technique to apply and with how much effort to put into it is highly configurable. The behavior of most of the solver components can be modified — or tuned — by setting some control parameters. The full list of these control parameters is available in the Xpress Optimizer Reference Manual. The default values for these controls have been selected such as to provide the best performance across a wide variety of problems. But what works best on average might not be the best possible strategy for your specific problem. If performance is critical it is often possible to fine-tune the control parameters to improve on the default behavior against a select set of problems.
The Xpress Optimizer includes a built-in Tuner that is accessible from the console, through an API or from within the Xpress Mosel modelling language itself. It is capable of tuning all problem types supported by both the Xpress Optimizer and Xpress Nonlinear, as long as the necessary solver licenses are available. As of Xpress release 8.3, this Tuner is also available through the Workbench integrated development environment. The Tuner is described in the Xpress Optimizer Reference document, in Section 5.12 on Using the Tuner.
The Tuner is a tool intended to automate the process of discovering better control parameter settings for either a single problem instance or a small collection of problem instances. In the basic usage, where a single problem instance should be tuned, it works directly with the problem currently loaded into the Xpress Optimizer. It will systematically test the problem against a range of different control settings. Any improved control settings discovered will be printed in the output log. At the end of the tuning session, the overall best performing control collection is printed and will also be applied to the problem itself. A small summary will be included, highlighting the contribution from each individual control setting.
A single tuning run will typically involve solving each problem at least 100-200 times and can therefore become very expensive for more difficult problems. The Tuner also includes a convenient feature to automatically include permuted versions of the problem in the tuning set, to ensure that the suggested control parameter settings are more robust against random fluctuations in solution path. This will increase the tuning time significantly, though, as each additional permutation introduces an extra solve for each control combination.
This guide is intended to help you get the best performance out of the Xpress Optimizer for harder problems, in particular mixed integer problems (MIPs). For purely continuous linear and quadratic problems, the tuning choices are fairly limited and the choice usually amounts to selecting the most appropriate basic algorithm. The number of technologies that goes into a mixed integer problem solver goes far beyond that of a continuous problem, with an accompanying wide array of tuning options.
In the following section we will describe how to invoke the automatic built-in Tuner through the different interfaces. The bulk of this document is then focused on how to do the tuning manually using the Xpress Optimizer console, and how to use the hints provided in the output logs to select better control settings.