Home

Awesome

pyMPC

Linear Constrained Model Predictive Control (MPC) in Python:

<img src="http://www.marcoforgione.it/pyMPC/img/pyMPC_formula_1.png"></img>

where <img src="http://www.marcoforgione.it/pyMPC/img/pyMPC_formula_2.png" height="14"></img>

Requirements

pyMPC requires the following packages:

Installation

Stable version from PyPI

Run the command

pip install python-mpc

This will install the stable version of pyMPC from the PyPI package repository.

Latest version from GitHub

  1. Get a local copy the pyMPC project. For instance, run
git clone https://github.com/forgi86/pyMPC.git

in a terminal to clone the project using git. Alternatively, download the zipped pyMPC project from this link and extract it in a local folder

  1. Install pyMPC by running
pip install -e .

in the pyMPC project root folder (where the file setup.py is located).

Supported platforms

We successfully tested pyMPC on the following platforms:

Detailed instructions for the Raspberry PI platform are available here.

Usage

This code snippets illustrates the use of the MPCController class:

from pyMPC.mpc import MPCController

K = MPCController(Ad,Bd,Np=20, x0=x0,xref=xref,uminus1=uminus1,
                  Qx=Qx, QxN=QxN, Qu=Qu,QDu=QDu,
                  xmin=xmin,xmax=xmax,umin=umin,umax=umax,Dumin=Dumin,Dumax=Dumax)
K.setup()

...

xstep = x0
for i in range(nsim): 
  uMPC = K.output()
  xstep = Ad.dot(xstep) + Bd.dot(uMPC)  # system simulation steps
  K.update(xstep) # update with measurement

Full working examples are given in the examples folder:

Contributing

I am slowly adding new functionalities to pyMPC according to my research needs. If you also wanna contribute, feel free to write me an email: marco.forgione@idsia.ch

Citing

If you find this project useful, we encourage you to

@inproceedings{forgione2020efficient,
  title={Efficient Calibration of Embedded {MPC}},
  author={Forgione, Marco and Piga, Dario and Bemporad, Alberto},
  booktitle={Proc. of the 21st IFAC World Congress 2020, Berlin, Germany, July 12-17 2020},
  year={2020}
}