# 1. Introduction¶

This is a user manual for FORCES PRO, a commercial tool for generating highly customized optimization solvers that can be deployed on all embedded computers. FORCES PRO is intended to be used in situations were the same optimization problem has to be solved many times, possibly in real-time, with varying data, i.e. there is sufficient time in the design stage for generating a customized solution for the problem you want to solve.

Figure 1.1 Overview of FORCES PRO.

The code generation engine in FORCES PRO extracts the structure in your optimization problem and automatically synthesizes a custom optimization solver. The resulting C code can only solve one optimization problem (with certain data changing), hence it is typically many times more efficient and smaller code size than general-purpose optimization solvers. The generated C code is also library-free and uses no dynamic memory allocation making it suitable for safe deployment on real-time autonomous systems.

This document will show you how to input your optimization problem description for code generation in FORCES PRO. It is important to point out that FORCES PRO is not a tool for transforming a problem specification into an optimization problem description. This responsibility lies with the user.

## 1.1. Troubleshooting and support¶

FORCES PRO typically returns meaningful error messages when code generation errors occur due to invalid user inputs. When encountering other errors please consult our documentation which is included in the FORCES PRO client and is also available on all FORCES PRO servers. In case you cannot find a solution to your problem please submit a bug report to support@embotech.com.

Much effort has gone into making this interface easy to use. We welcome all your suggestions for further improving the usability of the tool. Requests for special functionality for your particular problem will also be considered by our development team. For all requests and feedback please contact support@embotech.com.

## 1.2. Licensing¶

### 1.2.1. Industrial licensing¶

FORCES PRO licenses are available through a subscription model. There are four types of licenses, as seen below:

• Engineer License: For generating FORCES PRO solvers. Charged per engineer computer.

• Software Testing License (Sil/CI): For running FORCES PRO solvers on a desktop PC or a server for simulation and (automated) testing. No physical system is controlled. Charged per platform running the solver.

• Floating License: For running FORCES PRO solvers on servers or virtualised environments (such as Docker containers) without permanently mapping the license to a hardware system. Charged per number of platforms able to concurrently run the solver. Currently available only on Linux x86/x86_64.

• Hardware Testing License (HiL/Field Testing): For controlling a physical system (i.e. the target platform may also be an ECU or a rapid prototyping platform). Charged per platform running the solver.

Users at degree granting institutions can have access to the Engineer License version of FORCES PRO free of charge provided they are not doing research for an industrial partner. Software Testing and Hardware Testing licenses are also available at highly reduced rates.

## 1.3. Citing FORCES PRO¶

If you use FORCES PRO in published scientific work, please cite the following two papers:

@misc{FORCESPro,
Author       = "Alexander Domahidi and Juan Jerez",
Howpublished = "Embotech AG, url=https://embotech.com/FORCES-Pro",
Title        = "FORCES Professional",
Year         = "2014--2019"
}

@article{FORCESNLP,
Author       = "A. Zanelli and A. Domahidi and J. Jerez and M. Morari",
Title        = "FORCES NLP: an efficient implementation of interior-point...
methods for multistage nonlinear nonconvex programs",
Journal      = "International Journal of Control",
Year         = "2017",
Pages        = "1-17"
}


## 1.4. Release Notes¶

### 1.4.1. New features in FORCES PRO 2.0.0¶

• Introduced support for FORCES PRO QP solvers in the MATLAB MPC Toolbox from MathWorks

• Created new examples for the MPC Toolbox plugin

### 1.4.2. Improvements in FORCES PRO 2.0.0¶

• Made tolerances on equalities, inequalities, stationarity and complementarity run-time parameters in NLP solver

• Automatic disabling of vectorization when some matrix parameters are sparse

### 1.4.3. Bug Fixes in FORCES PRO 2.0.0¶

• Fixed linking issue with avx on linux host

• Fixed mex interface to not copy empty parameters

• Fixed bug with MINLP solver exitflag on infeasible problems

### 1.4.4. New features in FORCES PRO 1.9.1¶

• Made linear algebra vectorization stage dependent

### 1.4.5. Improvements in FORCES PRO 1.9.1¶

• Fixed numerical bug in NLP line-search

### 1.4.6. New features in FORCES PRO 1.9.0¶

• New code-generation options for AVX and NEON vectorization

• New code generation options and parameters to provide an integer guess to the MINLP solver

• New runtime parameter parallelStrategy for MINLP solver

• Created dedicated Floating License web Server

### 1.4.7. Improvements in FORCES PRO 1.9.0¶

• Changed floating license communication to http

• Enabled user-defined outputs in MINLP solver

• Added openmp flag to nvidia webcompiler

• Updated usysid files in client

### 1.4.8. Bug Fixes in FORCES PRO 1.9.0¶

• Fixed bug with constraints handling in code-generation

• Fixed memory bug in MINLP solver

• Fixed bug in parameters indexing in client. Parameters are now indexed with a fixed number of digits depending on the horizon length. 1 digit below 10, 2 digits between 10 and 100 excluded,…

• Fixed bug with stacked parameter ineq.p.b

### 1.4.9. New features in FORCES PRO 1.8.0¶

• Mixed-integer nonlinear solver with parallelizable search and other customization features

• Support for the Speedgoat platform

• Support for the Integrity ARM platform

• Support for Docker containers

• Updated newParam API to allow for parameters stacked over stages

### 1.4.10. Improvements in FORCES PRO 1.8.0¶

• Improved performance of compactSparse feature

### 1.4.11. Bug Fixes in FORCES PRO 1.8.0¶

• Fixed numerical bug in v1.7.0

### 1.4.12. New features in FORCES PRO 1.7.0¶

• MISRA 2012 compliance, no mandatory or required violations in generated C code

• Added support for dSPACE MicroAutoBox II

• Added support for ARM Cortex A72 platforms

• Added support for MinGW as a mex compiler

• New codeoption compactSparse for smaller code and faster compilation of sparse problems

### 1.4.13. Improvements in FORCES PRO 1.7.0¶

• Improved CodeGen speed for sparse problems

• Improved web compilation to reduce http timeouts

• Secure client-server communication under custom embotech domain

• Improved portability of functions used

• Updated FORCEScleanup to include all solver related files

• Improved messages and warnings returned from FORCES PRO client

• Now passing iteration number to function evaluations

• Added new error code for invalid parameter initial values

### 1.4.14. Bug Fixes in FORCES PRO 1.7.0¶

• Changed default server when default server file is missing

• Always check for default server files when choosing server to use

• Corrected the logic for updating the best solution found so far (NLP)

• Fixed sparse linear algebra routine names

## 1.5. Version history of manual¶

The version history of this document is presented in Version history of FORCES PRO manual.

Table 1.1 Version history of FORCES PRO manual

Version

Revision

Date

Reason for change

1

0

04/10/2017

Initial version

2

0

09/27/2018

Overhaul of outdated manual

2

1

11/19/2018

3

0

02/20/2019

Updated manual for v1.7.0

4

0

06/04/2019

Updated manual for v1.8.0

4

1

08/29/2019

Updated manual for v1.9.0

5

0

10/10/2019

Updated manual for v1.9.1

6

0

12/09/2019

Updated manual for v2.0.0