FICO Xpress Mosel mathematical modelling and optimization language

Document created by Advocate on Aug 8, 2017Last modified by Makenna.Brei on Feb 23, 2018
Version 19Show Document
  • View in full screen mode

FICO Xpress Mosel is the premier mathematical modelling and optimization language in the world.

Its best in class functionality enables operational research, and management professionals, analysts and consultants to rapidly develop and deploy optimization solutions that solve complex, real-world business and customer engagement challenges. With FICO Xpress Mosel, organizations can create optimization models that can solve bigger problems more efficiently, design solutions faster, and make better decisions in virtually any business scenario. In addition to its modelling, solving and programming features, FICO Xpress Mosel also supports the orchestration & execution of analytic models built in virtually any tool.


FICO Xpress Mosel is a high-level algebraic modeling language combined with a programming language which is tightly integrated with FICO Xpress Solver. It is easy to learn, comes with a full IDE and connects to virtually any data source. Xpress Mosel offers unique large scale optimization and enterprise feature like distributed modeling and optimization services including the cloud.  It provides access to the most sophisticated modelling and analytic techniques for leveraging today’s high-performance multi-CPU, multi-sourced and multi-threaded processing environments.



Based on the knowledge of 2 decades of modeling with it’s predecessor, Xpress Mosel was developed from scratch and released in 2001 for the first time. It is implemented in a very user-friendly, modular and extendable fashion.


Xpress Mosel includes a language that is both a modeling and a programming language combining the strengths of these two concepts. This makes it much easier to implement complete optimization algorithms in Xpress Mosel or interact with the solver engines directly. Problem specific cutting planes or heuristics can be implemented in Xpress Mosel and hooked up to the solvers callback mechanisms. Traditional approaches distinguish between a ‘modeling language’ and a ‘scripting language‘ and make advanced use more difficult.


Figure 1: Mosel code fragment

mosel example.PNG


As a benefit of its open and modular design Xpress Mosel can be connected through its ‘native interface’ to other programs and solvers in particular. This method is used to link Xpress Mosel to the Xpress Optimizer solver and Xpress Kalis is based on the same mechanism. Xpress Mosel comes with a number of different data interfaces, most notably drivers text files, Excel files (native driver),  ODBC enabled databases and Oracle databases (native driver). New drivers can be custom implemented easily if required. To embed Xpress Mosel in applications it comes with a fully featured API connecting it to all major programming languages like Java, C/C++ and .NET. In particular, the API provides advanced functionality for data exchange.


Model Development

Xpress Mosel is primarily used within the FICO Xpress Workbench development environment, which embeds tools like the Xpress Mosel debugger and profiler. FICO Xpress Workbench offers visualization of the optimization model and the solution process as well as interfaces to infeasibility analysis and advanced infeasibility repair functionality.


Figure 2: FICO Xpress Workbench integrated development environment

Workbench Debug.png


The Xpress Mosel language is a compiled language. This secures high execution performance. In addition, distributing models in the form of platform-independent compiled models helps to protect intellectual property.


Distributed Modeling and Solving

When delivering optimization projects there is the frequent need to solve a number of optimization problems either in sequence or in parallel. The two main cases are either optimizing a large number of different scenarios or decomposition approaches (like Benders or Dantzig-Wolfe) to tackle large and hard optimization problems. Xpress Mosel provides functionality to handle multiple problems and facilities for distributed computing using several Xpress Mosel instances, namely model management, synchronization of concurrent models based on event queues, and shared memory and remote access IO drivers.


Figure 3: Complex event driven solving of sub-models

Mosel 1.PNG


Solving (sub)models on remote machines is implemented in two different ways. FICO Xpress Optimization contains a Xpress Mosel optimization server which allows effective management of remotely executed models. The second option is to execute Xpress Mosel remotely via a standard ssh connection. This again demonstrates the flexibility of Xpress Mosel.


Figure 4

Mosel 2.PNG

The remote Xpress Mosel model is invoked and managed by a local Xpress Mosel model thus running a local instance of Xpress Mosel. For running on an enterprise application server (where you want to execute managed code only) and for platforms which are not supported by FICO Xpress Optimization we provide a remote invocation library XPRD to allow Xpress Mosel models to be executed without the need to install and run FICO Xpress Optimization.



Based on the distributed modeling capabilities of Xpress Mosel, the seamless execution of Xpress Mosel models on the Amazon EC2 cloud is enabled via a new module. Data transfer is handled through Xpress Mosel standard methods and only minimal codes changes are necessary to link the model to the cloud. With this module you are able to manage the cloud compute nodes and the remote Xpress Mosel model including exchanging status and progress information.


Figure 5: Advanced use of the Amazon EC2  module

Mosel 3.PNG

As for distributed Xpress Mosel, a local installation is not required and the cloud functionality is fully available through XPRD.


Xpress Mosel Language features

The Xpress Mosel language supports all features of a ‘classical’ algebraic modeling languages. The problem statement is close to algebraic form using modeling objects such as decision variables, (linear) constraints, arrays and (index-)sets, matrix generation and export (in LP or MPS format), and also solver configuration and solution reporting functionality. Xpress Mosel’s programming functionality comprises a large set of standard programming language features, including data structures, loops, selection statements, set and list operations, subroutine definition (with overloading), source inclusion and separate compilation of model files.


Xpress-IVE Development Environment

As well as using Xpress Workbench, Xpress Mosel models can be developed within IVE for Windows, our complete visual development environment for Xpress Mosel. IVE incorporates a Mosel program editor, compiler and execution environment, debugger and profiler. It features development and deployment wizards, visualizations of the solve process and results. It provides a number of solver utilities and visualizations often preferred by Operations Researchers inlcuding:

  • Output/Input views - console style user input; profiler, debugger  & optimizer output,
  • Statistics - optimizer status & statistics
  • Matrix - a zoomable view of the Matrix
  • Solutions - the last N solutions found by the Optimizer
  • Objective - objective vlaue progress during Simplex & Newton barrier
  • MIP search - progress of the global search for integer solutions
  • BB Tree - the evolution of the branch and bound MIP search
  • SLP progress
  • User graph - graph constructed by user during Mosel run
  • CP stats and CP search - models using the Xpress Kalis solver generate a display

Xpress IVE is included with the Xpress Workbench and Xpress Solver components.


Figure 6: Summary of FICO Xpress Mosel  features and benefits



  • Advanced programming languages:
    • Algebraic modeling language
    • Procedural programming language
  • Entire Mathematical Model can be stored in one place for rapid development and easy maintenance.
  • Utilize different solvers in the same model
  • From Mosel you can solve LPs, MIPs, MIQPs, Non-Linear problems, and Constraint problems
  • Decompose & parallelize a model to take advantage of multiple CPUs/cores
  • Faster solve times
  • Make full use of your computing infrastructure through distributed computing including cloud
  • Build a GUI exclusively within Mosel code
  • Decreases development time, gets optimization in front of business user quicker
  • Portable across operating systems
  • Mosel Model compiled in one OS can be deployed on all other supported Operating Systems, decreasing development time
  • Open, modular architecture, User extensible
  • User flexibility to solve the most complicated optimization problems
  • Not limited to/by predefined language features
  • Compiled
  • Protects intellectual property
  • Offers a variety of APIs and data connectors
  • Easy deployment and works in heterogeneous environments


The FICO Xpress Mosel language is a key element of FICO Xpress Optimization. It is fully supported as part of the FICO Xpress Workbench component.


More Information:

4 people found this helpful