## Model Predictive Control

### Model Predictive Control Tutorial

A basic Model Predictive Control (MPC) tutorial demonstrates the capability of a solver to determine a dynamic move plan. In this example, a linear dynamic model is used with the Excel solver to determine a sequence of manipulated variable (MV) adjustments that drive the controlled variable (CV) along a desired reference trajectory.

### MATLAB Toolbox for Model Predictive Control

Model Predictive Control (MPC) predicts and optimizes time-varying processes over a future time horizon. This control package accepts linear or nonlinear models. Using large-scale nonlinear programming solvers such as APOPT and IPOPT, it solves data reconciliation, moving horizon estimation, real-time optimization, dynamic simulation, and nonlinear MPC problems.

Download MATLAB Toolbox for Model Predictive Control

Three example files are contained in this directory that implement a controller for Linear Time Invariant (LTI) systems:

- apm1_lti - translate any LTI model into APM format
- apm2_step - perform step tests to ensure model accuracy
- apm3_control - MPC setpoint change to new target values

### Python Model Predictive Control

Continuous and discrete state space models are used in a Python script for Model Predictive Control.

The model1.apm contains a linear first-order differential equation. Other versions are model2.apm (continuous state space) and model3.apm (discrete state space). Each is applied in a model predictive controller to follow a reference trajectory and reach a target value of 7.0.

APMonitor enables the use of empirical, hybrid, and fundamental models directly in control applications. The DBS file parameter *imode* is used to control the simulation mode. This option is set to *6* or *9* for nonlinear control.

nlc.imode = 6 (simultaneous dynamic control) nlc.imode = 9 (sequential dynamic control) % MATLAB example apm_option(server,app,'nlc.imode',6); # Python example apm_option(server,app,'nlc.imode',9)

Nonlinear control adjusts variables that are declared as *Manipulated Variables (MVs)* to meet an objective. The MVs are the handles that the optimizer uses to minimize an objective function.

The objective is formulated from *Controlled Variables (CVs)*. The CVs may be controlled to a range, a trajectory, maximized, or minimized. The CVs are an expression of the desired outcome for the controller action.