Blog Post

FICO® Xpress Optimization Blog
5 MIN READ

FICO® Xpress Solver 9.6 – April 2025

FICO's avatar
FICO
Community Manager
1 year ago
Xpress Solveris 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:
With the latest Xpress Solver 9.6 release, a new web-based licensing system is being released. Further, this release delivers several features including enhanced modeling interfaces, performance enhancements for Mixed-Integer Programming, and Global nonlinear solvers, and more.

Web Floating Licenses
  • This release introduces a new licensing library for Web Floating Licenses. This library has been designed to work in containerized and virtualized environments. It utilizes a lightweight, and fast, web-based authorization mechanism.
  • Create your own Python notebooks (e.g., start form: https://github.com/fico-xpress/python-notebooks) or create your own Xpress docker images (https://github.com/fico-xpress/xpress-dockerfiles) and leverage the new licensing mechanism to seamlessly run large problems in such environments.
Performance Enhancements
  • The Mixed-Integer Programming engine is 14% faster overall, and 19% faster or >100s models compared to the prior release Xpress 9.5. Year-over-year, the MIP engine is 17% faster overall and 22% faster on > 100s models. Time comparisons are performed using the shifted geometric mean with a shift of 10 seconds. These gains are a result of enhancements to all the core aspects of the engine including:
    • Improvements made to the presolve enumeration techniques on binary variables, which is particularly useful for problems with combinatorial structures.
    • Introduction of a new fast heuristic, which runs in parallel to the cut loop. This heuristic was previously available in the HEUREMPHASIS mode but has now been made a default setting of the solver.
    • Addition of globally valid cutting planes to the tree search: Xpress now separates both locally and globally valid cuts during tree search
  • The Global optimization engine is 60% faster overall and 3 times faster on >100s models than the prior release Xpress 9.5. Year-over-year, the global optimization engine is 74% faster overall and 4x faster on > 100s models. The gains are due to the unification of presolve techniques for all quadratic matrices (convex and non-convex), improved Reformulation-Linearization Technique cuts, improved infeasibility detection for products of variables, and adaptive tolerance tightening during branching.
  • Primal simplex is 16% faster overall and 36% faster on > 100s models. Dual simplex is 12% faster overall and 18% faster on > 100s models. The barrier algorithm is 10% faster overall and 14% faster on > 100s models. The primal-dual hybrid gradient method also saw significant boost in performance: Overall, the algorithm is 80% faster, and 1.65 times faster on > 100s models. On large matrices, the PDHG algorithm is faster by a factor of 2.6, and faster by a factor of 10 on > 100s models.
  • Several low-level code efficiency improvements have led to overall performance improvement in the Solver.
New Xpress Solver features and changes:
  • Xpress 9.6 introduces a new parallel heuristic (pre-root parallel heuristic) that can be invoked to run after presolve but before the initial root LP solve. This heuristic can be particularly useful for models with hard root LP relaxations for which finding high-quality solutions during the search is preferred by the users. This heuristic is disabled by default and can be enabled by setting the HEUREMPHASIS control to 2, or by setting the PREROOTEFFORT or the PREROOTWORKLIMIT controls to positive values.
  • This release introduces a new attribute called WORK, which represents a measure of algorithmic work executed during a solve therefore, the same searches will yield the same amount of WORK. A corresponding control called WORKLIMIT has been introduced which can be used as a termination criterion to reproduce runs.
  • A new callback has been introduced, which when installed, gets invoked before the solver applies a round of cuts and can be used to override the Optimizer's decision to apply a specific round of cuts. A new method has been introduced to allow users to add cuts that will be managed by the Optimizer. This allows users to add additional cuts during the cut loop with the help of the cut loop callback. These callbacks and methods are available in all APIs except Mosel (will be made available in Mosel a future release).
  • A few of the Nonlinear and Global solver API changes have been unified to have the same behavior as the Optimizer’s APIs and controls. For example, the method postsolvesol, which is used to convert a presolved solution back into the original space now also applies to nonlinear solves. Please see the release notes for full details.
Python Interface Enhancements
  • Comparison of constraints is a common task for which new functions xpress.setConstraintOperatorsEnabled() and xpress.getConstraintOperatorsEnabled() can be used to control whether comparing two expressions creates a constraint or performs a Boolean comparison. New function xpress.is_equal() performs a Boolean comparison between two Xpress objects or arrays of Xpress objects. This is useful when constraint operators are enabled. Whereas, xpress.eq(), xpress.leq() and xpress.geq() can now be called as functions to create constraints that compare two expressions or arrays of expressions. This is useful when constraint operators are disabled.
  • Low level and other functions, enumerations and constants are now available to the users, such as Optimizer enumerations in the xpress namespace as well as constants in xpress.constants namespace.
The lower-case constants in the xpress namespace are now deprecated.
  • Several low-level API functions have been added, among them are operations on sets, formulas, and to delete columns and rows; see release notes for details.
  • To ease access to the solution values for a variable or constraint object, new functions var.get[Callback]Solution(), var.get[Callback]RedCost(), constraint.get[Callback]Slack() and constraint.get[Callback]Dual() have been introduced.
Augmented APIs (Java, .NET, C++)
  • The Java, .NET and C++ have three new exceptions that refine exceptions for unsupported operations: InvalidStateException, CannotReferenceVariablesException, CannotPerformOperationException.
  • The sum() function now has overloads to create multi-dimensional sums.
  • Handling of containers was consolidated where some overloads were replaced by more generic overloads. For functions that take a collection of arguments there are now the following overloads:
    • Java: Array, Iterable, Stream
    • C++: Array, Stream (although the latter is only a template)
    • NET: IEnumerable
  • We recommend studying the release notes about deprecated, overloaded and removed functions.
Other enhancements
  • The documentation has also been improved by the introduction of “Topic areas” that allows improved searchability of related and relevant topics.
For deprecations and fixes in this release, please familiarize yourself with the details listed in the Xpress release notes . 
Updated 1 year ago
Version 3.0
No CommentsBe the first to comment