## Design Workflow for Explicit MPC

To create an explicit MPC controller, you must first design a traditional (implicit) MPC controller. You then generate an explicit MPC controller based on the traditional controller design.

First design a traditional (implicit) MPC for your application and test it in simulations. Key considerations are as follows:

• The Model Predictive Control Toolbox™ software currently supports the following as independent variables for explicit MPC:

• nxc controller state variables (plant, disturbance, and measurement noise model states).

• ny (≥ 1) output reference values, where ny is the number of plant output variables.

• nv (≥ 0) measured plant disturbance signals.

Thus, you must fix most MPC design parameters before creating an explicit MPC controller. Fixed parameters include prediction models (plant, disturbance and measurement noise), scale factors, horizons, penalty weights, manipulated variable targets, and constraint bounds.

• Reference and measured disturbance previewing are not supported. At each control interval, the current ny reference and nv measured disturbance signals apply for the entire prediction horizon.

• To limit the number of regions needed by explicit MPC, include only essential constraints.

• When including a constraint on a manipulated variable (MV), use a short control horizon or MV blocking. See Choose Sample Time and Horizons.

• Avoid constraints on plant outputs. If such a constraint is essential, consider imposing it for selected prediction horizon steps rather than the entire prediction horizon.

• Establish upper and lower bounds for each of the nx = nxc + ny + nv independent variables. You might know some of these bounds a priori. However, you must run simulations that record at least the nxc controller states as the system operates over the range of expected conditions. It is important that you do not underestimate this range, because the explicit MPC control function is not defined for independent variables outside the range.

For information about specifying bounds, see `generateExplicitRange`.

### Explicit MPC Generation

Given the constant MPC design parameters and the nx upper and lower bounds on the independent variables of the control law, that is,

`${x}_{l}\le x\left(k\right)\le {x}_{u},$`

the `generateExplicitMPC` command determines nr regions. Each of these regions is defined by an inequality constraint and the corresponding control law constants:

The `explicitMPC` object contains the constants Hi, Ki, Fi, and Gi for each region. The Explicit MPC Controller object also holds the original (implicit) design and independent variable bounds. As long as x(k) stays within the specified bounds and you retain all nr regions, the explicit MPC object provides the same optimal MV adjustments, u(k), as the equivalent implicit MPC object.

For details about explicit MPC, see [1]. For details about how the explicit MPC controller is generated, see [2].

### Explicit MPC Simplification

Even a relatively simple explicit MPC controller might require many regions (nr >> 100) to characterize the QP solution completely. If the number of regions is large, consider the following:

• Visualize the solution using the `plotSection` command.

• Use the `simplify` command to reduce the number of regions. Sometimes, this reduction can be done with no (or negligible) impact on control law optimality. For example, pairs of adjacent regions might employ essentially the same Fi and Ki constants. If so, and if the union of the two regions forms a convex set, they can be merged into a single region.

Alternatively, you can eliminate relatively small regions or retain selected regions only. During operation, if the current x(k) is not contained in any of the retained regions, the explicit MPC returns a suboptimal u(k), as follows:

`$u\left(k\right)={F}_{j}x\left(k\right)+{G}_{j}.$`

Here, j is the index of the region whose bounding constraint, Hjx(k) ≤ Kj, is least violated.

### Implementation

During operation, for a given x(k), the explicit MPC controller performs the following steps:

1. Verifies that x(k) satisfies the specified bounds, xl ≤ x(k) ≤ xu. If not, the controller returns an error status and sets u(k) = u(k–1).

2. Beginning with region i = 1, tests the regions one by one to determine whether x(k) belongs. If Hix(k) ≤ Ki, then x(k) belongs to region i. If x(k) belongs to region i, then the controller:

• Obtains Fi and Gi from memory, and computes u(k) = Fix(k) + Gi.

• Signals successful completion, by returning a status code and the index i.

• Returns without testing the remaining regions.

If x(k) does not belong to region i, the controller:

• Computes the violation term vi, which is the largest (positive) component of the vector (Hix(k) – Ki).

• If vi is the minimum violation for this x(k), the controller sets j = i, and sets vmin = vi.

• The controller then increments i and tests the next region.

3. If all regions have been tested and x(k) does not belong to any region (for example, due to a numerical precision issue), the controller:

• Obtains Fj and Gj from memory, and computes u(k) = Fjx(k) + Gj.

• Sets status to indicate a suboptimal solution and returns.

Thus, the maximum computational time per control interval is the time required to test each region, computing the violation term in each case and then calculating the suboptimal control adjustment.

### Simulation

You can perform command-line simulations using the `sim` or `mpcmoveExplicit` commands.

You can use the Explicit MPC Controller block to connect an explicit MPC to a plant modeled in Simulink®.

## References

[1] A. Bemporad, M. Morari, V. Dua, and E.N. Pistikopoulos, "The explicit linear quadratic regulator for constrained systems," Automatica, vol. 38, no. 1, pp. 3–20, 2002.

[2] A. Bemporad, "A multi-parametric quadratic programming algorithm with polyhedral computations based on nonnegative least squares," 2014, Submitted for publication.