1 Introduction

The MOSEK Optimization Suite 10.2.8 is a powerful software package capable of solving large-scale optimization problems of the following kind:

  • linear,

  • conic:

    • conic quadratic (also known as second-order cone),

    • involving the exponential cone,

    • involving the power cone,

    • semidefinite,

  • convex quadratic and quadratically constrained,

  • integer.

In order to obtain an overview of features in the MOSEK Optimization Suite consult the product introduction guide.

The most widespread class of optimization problems is linear optimization problems, where all relations are linear. The tremendous success of both applications and theory of linear optimization can be ascribed to the following factors:

  • The required data are simple, i.e. just matrices and vectors.

  • Convexity is guaranteed since the problem is convex by construction.

  • Linear functions are trivially differentiable.

  • There exist very efficient algorithms and software for solving linear problems.

  • Duality properties for linear optimization are nice and simple.

Even if the linear optimization model is only an approximation to the true problem at hand, the advantages of linear optimization may outweigh the disadvantages. In some cases, however, the problem formulation is inherently nonlinear and a linear approximation is either intractable or inadequate. Conic optimization has proved to be a very expressive and powerful way to introduce nonlinearities, while preserving all the nice properties of linear optimization listed above.

The fundamental expression in linear optimization is a linear expression of the form

\[A x - b \geq 0.\]

In conic optimization this is replaced with a wider class of constraints

\[A x - b \in \K\]

where \(\K\) is a convex cone. For example in 3 dimensions \(\K\) may correspond to an ice cream cone. The conic optimizer in MOSEK supports a number of different types of cones \(\K\), which allows a surprisingly large number of nonlinear relations to be modeled, as described in the MOSEK Modeling Cookbook, while preserving the nice algorithmic and theoretical properties of linear optimization.

1.1 Why the Fusion API for C++?

Fusion is an object oriented API specifically designed to build conic optimization models in a simple and expressive manner, using mainstream programming languages.

With focus on usability and compactness, it helps the user focus on modeling instead of coding.

Typically a conic optimization model in Fusion can be developed in a fraction of the time compared to using a low-level C API, but of course Fusion introduces a computational overhead compared to customized C code. In most cases, however, the overhead is small compared to the overall solution time. Moreover, parametrization makes it possible to construct a Fusion model once and then solve it repeatedly for different inputs with almost no overhead.

We generally recommend that Fusion is used as a first step for building and verifying new models. Often, the final Fusion implementation will be directly suited for production code, and otherwise it readily provides a reference implementation for model verification. Fusion always yields readable and easily portable code.

The Fusion API for C++ provides access to Conic Optimization, including:

  • Linear Optimization (LO)

  • Conic Quadratic (Second-Order Cone) Optimization (CQO, SOCO)

  • Power Cone Optimization

  • Conic Exponential Optimization (CEO)

  • Semidefinite Optimization (SDO)

  • Mixed-Integer Optimization (MIO)

as well as to an auxiliary linear algebra library.

Convex Quadratic and Quadratically Constrained (QCQO) problems can be reformulated as Conic Quadratic problems and subsequently solved using Fusion. This is the recommended approach, as described in the MOSEK Modeling Cookbook and this whitepaper.