Model Predictive Control (MPC)
La commande prédictive par modèle (MPC) planifie une courte séquence d’actions à l’aide d’un modèle, n’applique que la première, puis replanifie à chaque étape. Présentation de ses composants, de ses usages et de son code.
La commande prédictive par modèle (MPC) est une méthode de commande qui s'appuie sur un modèle du système pour prévoir son comportement sur un horizon futur court, choisit la séquence d'actions qui répond le mieux à un objectif tout en respectant les contraintes, n'applique que la première action, puis répète l'ensemble du processus au pas de temps suivant à partir de nouvelles mesures. Ce cycle de planification, d'action et de replanification est appelé commande à horizon glissant ; il permet au contrôleur d'anticiper les événements à venir au lieu de réagir uniquement à l'erreur présente. La MPC est née du raffinage pétrolier et du traitement chimique à la fin des années 1970 ; le contrôle à matrice dynamique de Shell figurait parmi ses premières versions industrielles. Elle pilote désormais les robots, les véhicules autonomes et les systèmes de régulation climatique des bâtiments.
Les composants d’un contrôleur MPC#
Chaque contrôleur MPC combine quatre éléments :
- Modèle dynamique : Il prédit l'état suivant à partir de l'état actuel et d'une action, par exemple la variation de la position et du cap d'une voiture pour un angle de braquage donné. Il peut provenir d'équations physiques, de l'identification du système à partir de données enregistrées ou d'un réseau neuronal entraîné sur des trajectoires enregistrées.
- Fonction de coût : elle évalue une trajectoire prédite, en pénalisant généralement l’écart par rapport à une cible, la consommation d’énergie et les changements brusques des commandes.
- Contraintes : Ce sont les limites que chaque plan doit respecter, comme le couple moteur maximal, les limites de vitesse et les zones interdites autour des obstacles. La prise en compte explicite des contraintes est le principal avantage de la MPC par rapport à la commande PID classique, qui ne réagit aux erreurs qu'après leur apparition et ne peut pas anticiper les limites.
- Optimiseur : Il recherche la meilleure séquence d'actions sur l'horizon à chaque étape de commande.
Le modèle détermine la difficulté de l'optimisation. Un modèle linéaire associé à un coût quadratique devient un programme quadratique, que des solveurs spécialisés résolvent en quelques millisecondes, voire moins ; les modèles non linéaires nécessitent des solveurs de MPC non linéaire, généralement associés à un filtre de Kalman étendu pour estimer l'état, ou à une recherche par échantillonnage. À chaque étape de commande, l'optimiseur exécute une boucle interne qui prédit et améliore les plans candidats, tandis que le contrôleur exécute une boucle externe qui applique une action et recommence à partir du nouvel état mesuré :
La longueur de l'horizon est le principal paramètre à régler. Un horizon plus long permet à un véhicule de freiner tôt avant un virage serré, mais chaque étape supplémentaire augmente le calcul et cumule les erreurs de prédiction du modèle ; toute l'optimisation doit en outre se terminer en un seul cycle de commande.
Horizon glissant en code#
L’extrait ci-dessous commande un chariot qui doit atteindre la position 5 et s’arrêter, avec une accélération limitée à plus ou moins 1. À chaque étape, il échantillonne 500 plans d’accélération aléatoires, prédit la trajectoire de chaque plan à l’aide de la dynamique du chariot, exécute la première action du plan le moins coûteux, puis recalcule le plan à partir du nouvel état :
import numpy as np
rng = np.random.default_rng(0)
position, velocity, target = 0.0, 0.0, 5.0
dt, horizon = 0.1, 30
for _ in range(100):
# Sample 500 candidate plans of accelerations within the actuator limit of +/-1
plans = rng.uniform(-1, 1, size=(500, horizon))
# Predict every plan's trajectory with the cart's dynamics model
v = velocity + dt * plans.cumsum(axis=1)
p = position + dt * v.cumsum(axis=1)
# Cost: distance from the target at each step plus speed at the end of the horizon
cost = ((p - target) ** 2).sum(axis=1) + 10 * v[:, -1] ** 2
# Apply only the first action of the cheapest plan, then replan from the new state
velocity += dt * plans[cost.argmin(), 0]
position += dt * velocity
print(f"position: {position:.2f}, velocity: {velocity:.2f}")Après 10 secondes simulées, le chariot se trouve à la position 5,04 avec une vitesse de 0,04. Aucun plan aléatoire n'est bon à lui seul, mais l'exécution d'une étape suivie d'une nouvelle planification à partir de l'état mesuré corrige constamment les erreurs. Cette approche, appelée tir aléatoire, est la méthode la plus simple de la famille de MPC par échantillonnage, qui comprend également la méthode d'entropie croisée et la commande par intégrale de chemin à prédiction de modèle (MPPI), utilisée par des chercheurs de Georgia Tech pour faire courir une voiture de rallye à l'échelle 1:5 sur une piste en terre.
La MPC dans les usines, les robots, les voitures et les bâtiments#
- Industries de transformation : Les raffineries, les usines chimiques et les centrales électriques utilisent la MPC pour maintenir les températures, les pressions et la qualité des produits près des limites qui maximisent le débit, un contexte à l’origine de cette méthode.
- Robots marcheurs : Le Cheetah 3 du MIT courait et gardait son équilibre grâce à une MPC convexe qui recalculait ses forces de réaction au sol de nombreuses fois par seconde ; le MIT a ensuite publié ce contrôleur en logiciel libre pour son Mini Cheetah.
- Conduite : Les contrôleurs de suivi de trajectoire des voitures autonomes utilisent la MPC pour suivre en douceur une trajectoire planifiée, tout en respectant les limites de braquage, d'accélération et de confort.
- Bâtiments : Les contrôleurs de chauffage et de climatisation prédisent la température des pièces plusieurs heures à l’avance à partir des prévisions météo et d’occupation, puis prérefroidissent ou préchauffent lorsque l’énergie est la moins chère.
La MPC par rapport aux approches connexes#
- Commande PID : Un contrôleur PID calcule sa sortie à partir de l'erreur actuelle, de son intégrale et de son taux de variation. Simple et peu coûteux, il ne dispose toutefois d'aucun modèle du futur ni d'aucune notion de contraintes.
- Régulateur linéaire quadratique (LQR) : Le LQR détermine sous forme fermée la loi de rétroaction optimale d'un système linéaire avec un coût quadratique sur un horizon infini. La MPC résout en ligne une version à horizon fini, ce qui lui permet d'imposer des contraintes et de gérer des modèles non linéaires.
- Apprentissage par renforcement : L'AR apprend une politique par l'expérience avant le déploiement ; ensuite, le choix d'une action ne nécessite qu'une seule passe avant rapide. La MPC résout en ligne une nouvelle optimisation à l'aide d'un modèle explicite.
Les deux approches convergent de plus en plus. L'apprentissage profond par renforcement fondé sur un modèle apprend un modèle du monde et planifie à l'aide de la MPC ; des méthodes comme TD-MPC2 planifient dans un espace latent appris, tandis qu'une fonction de valeur apprise évalue les événements au-delà de l'horizon court. Les modèles dynamiques appris relèvent de la modélisation prédictive, et leur précision sur l'horizon détermine la distance à laquelle un contrôleur de ce type peut planifier utilement.
Perception pour la MPC#
Un contrôleur MPC ne planifie qu'aussi bien qu'il perçoit ; pour un système d'IA physique, comme un robot qui se déplace parmi des personnes, son état doit inclure la position de ces personnes et leur direction. Une caméra exécutant Ultralytics YOLO26 en mode suivi fournit une boîte englobante et un identifiant de suivi persistant pour chaque personne dans chaque image. Combinées à l'estimation de profondeur ou au calibrage de la caméra et à un filtre de Kalman, ces pistes fournissent les positions et les vitesses des obstacles que les contraintes du contrôleur maintiennent à distance.










