Xpress Solver is the technology component that supports all of FICO's optimization solver technologies including:
Xpress Optimizer: core engine comprises of LP (simplex and barrier), MIP, (MI)QP, (MI)QCQP, and (MI)SOCP solvers. It also provides core services, like the tuner, to other components.
Xpress Nonlinear: provides successive linear programming and an interior point solver for nonlinear problems, integrating closely with the Optimizer’s MIP framework.
Xpress Global: provides an engine for solving nonlinear problems to global optimality integrating with the components of Xpress Nonlinear and Xpress Optimizer.
Xpress Kalis: provides constraint-based programming capabilities. Combined with the optimizer, it can make use of MIP relaxations of the CP problem.
Highlights of this release include:
The latest Xpress Solver 9.5 delivers several features including new modeling interfaces, performance enhancements for Mixed-Integer Programming, and Global nonlinear solvers, and more. Release 9.5 introduces the new C++ interface for Xpress Solver boosting modelling experience and overall efficiency. The Python API of the solver has also seen major updates.
Performance Enhancements
The Global optimization engine is 68% faster overall, and 3.34 times faster on models that take at least 100 seconds to solve compared with the release a year prior. These performance improvements are a result of changes in several internal procedures and improvements to the branching points during spatial branching.
The MIP solver is 7% faster overall, and 8% faster on models that take at least 100 seconds to solve compared with the release a year prior. These performance enhancements are a result of several improvements including:
In addition to row-based eliminations, new column-based presolve eliminations to reduce model size when free variables are present in the model instance.
In models with big-M coefficients, additional tightening of coefficients is performed.
Knapsack cover inequalities are now strengthened by using superadditive lifting, which in addition to traditional lifting of knapsack cover cuts provide potentially diversified cuts to strengthen the relaxation.
All the time-based performance comparisons are performed using shifted geometric mean, with a shift of 10 seconds.
New C++ Interface
The C++ interface enables users to model mathematical problems in an efficient, object-oriented manner. It uses and integrates nicely with modern software concepts. For instance, lambda functions and containers greatly enhance the functionality and expressiveness of the Solver interface. At the same time all Xpress Solver features are immediately available through the new interface.
The XpressProblem class and related functions enable object-oriented modelling. Since XpressProblem is a subclass of XPRSprob it also gives developers direct access to the matrix-oriented C++ interface.
The C++ interface complements the existing .NET and Java object-oriented ensuring a consistent user experience across various programming languages. These interfaces provide an alternative for current FICO Xpress BCL users, and we provide guidance for an easy transition.
Python Interface Enhancements
The Python interface has been enhanced to support the SciPy 2-D sparse array package, which supports memory-efficient data structures to store large matrices with few non-zero elements. Existing solution functions are now consistent with other interfaces.
New Xpress Solver features and changes:
Functions for querying problem solutions (solution vector, slacks, duals, reduced costs) have been made more seamless and context specific and named accordingly such that functions for retrieving the solution in either the original space or the presolved space are available to be called explicitly. For example, to retrieve duals in a callback, users can call XPRSgetcallbackduals(), and to retrieve the presolved solution in a callback, users can call XPRSgetcallbackpresolvesolution(). Furthermore, if for example the XPRSgetcallbacksolution()is called in the bariteration callback, the barrier iteration solution is returned. The same solution query inside the preintsol callback returns the candidate incumbent solution, and so forth.
To retrieve the incumbent solution, users are now recommended to use XPRSgetsolution()
Global solver solves now accept user solutions, which can be added using XPRSaddmipsol(). Furthermore, both nonlinear and global solvers accept the XPRSfixmipentities, which can be used to fix the discrete entities in the problem to the solution found and the continuous problem can subsequently be solved with a desired solution method.
In addition to the global solver, quadratic and nonlinear problems are now included in the community license. The total number of rows and columns is limited to 200.
A Julia matrix-oriented interface for Solver will be available on Github. This is a thin wrapper around the complete C API and comes with all Solver features. To ease on-boarding experience examples and instructions to get started are included.
For macOS users using the M-series processors an installer for Solver and Mosel and the MATLAB Xpress interface is being provided.
The AMPL interface is removed from the distribution.
See the Xpress release notes for more details.
Updated 2 years ago
Version 3.0FICO
Community Manager
Joined July 21, 2025
FICO® Xpress Optimization Blog
Follow this blog board to get notified when there's new activity