This repository contains the Python code to reproduce the results of the paper Efficient Calibration of Embedded MPC by Marco Forgione, Dario Piga, and Alberto Bemporad.
The code performs an efficient data-driven MPC calibration by tuning:
- MPC weight matrices
- MPC sampling time
- Prediction and control horizon
- Kalman filter matrices
- QP solver relative and absolute tolerances
to optimize a closed-loop objective function , under the constraint that where is the (worst-case) time required to compute the MPC control low. This constraints guarantees that the controller can run in real-time.
The main script to be executed for MPC calibration is
GLIS_BO_main.py
The results of the MPC calibration are saved in the results_*.pkl file on the disk and are read by the script
GLIS_BO_analysis.py
that produces the relevant plots.
pendulum_model.py
: dynamic equations of the pendulumpendulum_MPC_sim
: performs a single closed-loop MPC simulationobjective_function.py
: objective functionkalman.py
: implements a kalman filter
pyMPC
: containts the pyMPC library for Model Predictive Control. Copied from branch dev-BO of my repository https://github.com/forgi86/pyMPC.git,idwgopt
: contains the python version of the GLIS package version 1.1. Copied from http://cse.lab.imtlucca.it/~bemporad/glis/
Simulations were performed on a Python 3.6 conda environment with
- numpy
- scipy
- matplotlib
- OSQP (a QP solver used by the MPC controller)
- python-control (used to solve the DARE of the Kalman Filter)
- GPyOpt (for Bayesian Optimization, optional)
These dependencies may be installed through the commands:
conda install numpy scipy matplotlib
pip install osqp
pip install control
pip install gpyopt
If you find this project useful, we encourage you to
- Star this repository ⭐
- Cite the paper
@inproceedings{forgione2020efficient,
title={{E}fficient {C}alibration of {E}mbedded {MPC}},
author={Forgione, Marco and Piga, Dario and Bemporad, Alberto},
booktitle={Proc. of the 21st IFAC World Congress, Berlin, Germany},
year={2020}
}