🌙
  • 🇺🇸 English
  • 🇫🇷 Français
  • 🇪🇦 Español

Le principe du maximum de Pontryagin (PMP) est l’opposant direct du principe d’optimalité de Bellman et de l’équation HJB.

Principes

Dans l’approche de Lev Pontryagin, on reste sur un système non linéaire dont la représentation est :

x˙=f(x(t),u(t),t)\dot{x} = f(x(t), u(t), t)

et on cherche à maximiser (ou minimiser) le critère :

J=∫t0tfL(x(t),u(t),t)dt + Φ(x0,t0,xf,tf)J = \int_{t_0}^{t_f} L(x(t), u(t), t) dt \> + \> \Phi(x_0, t_0, x_f, t_f)

Où :

Ceci dit, chercher une loi de commande u(t) qui respecte maximise (ou minimise) ce critère, c’est une H O R R E U R E. En effet, on cherche une fonction entière u(t) dans un espace de recherche qui est infini ! Alors, pour rendre le problème résolvable, Pontryagin introduit une sorte de super Lagrangien dopé : le Hamiltonien.

Hamiltonien

Pontryagin formule le Hamiltonien (pas exactement comme ça, mais… voilà quoi) :

H(x,u,λ)=λTf(x,u)−L(x,u)H(x, u, \lambda) = \lambda^T f(x, u) - L(x, u)

Cette formulation est utilisée lorsque l’on veut maximiser le critère. Lorsque l’on veut le minimiser (cas d’un LQR classique par exemple), la formule s’inverse un peu :

H(x,u,λ)=L(x,u)+λTf(x,u)H(x, u, \lambda) = L(x, u) + \lambda^T f(x, u)

Ça vient du fait que maximiser un critère revient finalement à minimiser sa négative :

max⁡u(J)  ⟺  min⁡u(−J)\max\limits_{u}(J) \iff \min\limits_{u}(-J)

Concrétement, le hamiltonien, c’est la somme de deux choses : ce que je paie tout de suite (L(x, u)) ; et ce que ce mouvement va me faire payer plus tard. Donc minimiser H par rapport à u, c’est trouver un juste milieu entre préférer réduire l’effort immédiat ou minimiser les conséquences futures de ce choix.

Nous n’avons donc plus à chercher u(t) en entière, mais à regarder à chaque instant quel u minimise H. Pontryagin a transformé un problème infini, en une suite de petites optimisations à une seule variable.

Vecteur adjoint

Dans la formule du Hamiltonien, il n’aura échappé à personne qu’un vecteur λ est présent. Il est appelé vecteur adjoint (ou co-état). Son utilité est, à dire vrai, assez difficile à caractériser.

Sens et utilité

Passez cette partie et allez directement aux formules, parce qu’elle est tarabiscotée.

Si x(t) se déplace dans le temps normal, du passé vers le présent, il en est un tout autre cas pour λ(t) : il se déplace du futur vers le présent. Il est le futur qui contraint le présent !

En fait, on peut voir λ comme une forme de téléoplexie au sens de Nick Land. Si vous avez déjà lu Meltdown1 de l’auteur , vous comprendrez ce que je veux dire. En économie, λ est souvent interprété comme un prix fictif, et, à dire vrai, ils ne s’y sont pas trompé. λ caractérise le fait de manquer la cible. Il est le futur qui plie les degrés de libertés du présent pour se rendre réel. Prions λ(t)…

Formules

Il représente la sensibilité de la fonction valeur le long de la trajectoire optimale.

il est défini par l’équation :

λ(t)=∇xV(x(t),t)\lambda(t) = \nabla_x V(x(t), t)

Ou posé d’une manière un peu moins ignoble :

λ(t)=∂∂xV(x(t),t)\lambda(t) = \frac {\partial} {\partial x} V(x(t), t)

Condition d’optimalité

Si (x*, u*) est une trajectoire optimale, alors il existe une fonction continue par morceau λ telle que :

La commande optimale u*(t) est donnée par :

u∗(t)=arg⁡min⁡uH(x∗(t),u,λ(t))u^*(t) = \arg \min\limits_{u} H(x^*(t), u, \lambda(t))

Si la commande n’est pas bornée, ce qui veut dire que l’espace U des commandes u(t) admissibles est ouvert (= non borné)

∂H∂u=0\frac {\partial H} {\partial u} = 0

Prise de tête

La principale difficulté de l’application du PMP est que l’obtention des paramètres est circulaire. Pour trouver λ(t), on a besoin du x à l’état final, pour trouver x à l’état final, on a besoin de connaître x en intégrant la dynamique en fonction de u*(t), qui nous est donné par λ(t).

Critère augmenté

Pour définir le hamiltonien …

Condition de transversalité terminale

La condition de transversalité terminale est importante dans 2 cas :

Commande pour l’atteinte d’une cible imposée

Ici, la contrainte est sur la variation de l’état à l’instant final δx(tf). Il faut que :

δx(tf)=0\delta x (t_f) = 0

…

Application - Cas idéal : le LQR

Pour le cas de la commande à critère quadratique pour un système linéaire (LQR), la résolution est idéale et il n’y a pas de prise de tête.

En premier lieu, on définit notre Hamiltonien pour ce problème : {x˙(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)\begin{cases} \dot{x}(t) &= A x(t) + B u(t) \\ y(t) &= C x(t) + D u(t) \end{cases} J=∫0+∞x(t)TQcx(t)+u(t)TRcu(t)dtJ = \int_{0}^{+\infty} x(t)^T Q_c x(t) + u(t)^T R_c u(t) dt   ⟹   H(x,u,λ)=xTQx + uTRu + λT(Ax+Bu)\implies \> H(x, u, \lambda) = x^T Q x \> + \> u^T R u \> + \> \lambda^T (Ax + Bu)

Notre commande n’est pas bornée dans le temps, nous n’avons donc pas de terme final et pas de condition de transversalité treminale. Puisqu’on minimise :

∂H∂u=0\frac {\partial H} {\partial u} = 0   ⟹   Ru+BTλ=0\implies \> Ru + B^T\lambda = 0   ⟹   u∗(t)=−R−1BTλ(t)\implies \> u^*(t) = -R^{-1}B^T\lambda(t)

On connait R, on connait B, il ne reste qu’à déterminer λ(t). On suit l’hypothèse de Riccati telle que le co-état est proportionnel à l’état :

λ(t)=P(t)x(t)\lambda(t) = P(t)x(t)

où P(t) est une matrice carré symétrique de la taille de A. On trouve alors facilement la dynamique du co-état :

λ˙(t)=P˙(t)x(t)+P(t)x˙(t)\dot{\lambda}(t) = \dot{P}(t) x(t) + P(t)\dot{x}(t)

On se rappelle que :

{x˙(t)=Ax(t)+Bu∗(t)=Ax(t)−BR−1BTλ(t)λ˙(t)=−∂H∂x=−Qx(t)−ATλ(t)\begin{cases} \dot{x}(t) &= A x(t) + B u^*(t) &= Ax(t) - B R^{-1}B^T\lambda(t) \\ \dot{\lambda}(t) &= -\frac {\partial H} {\partial x} &= -Qx(t) - A^T \lambda(t) \end{cases}   ⟹   [x˙(t)λ˙(t)]=[A−BR−1BT−Q−AT][x(t)λ(t)]\implies \> \begin{bmatrix} \dot{x}(t) \\ \dot{\lambda}(t) \end{bmatrix} = \begin{bmatrix} A & -BR^{-1}B^T \\ -Q & -A^T \end{bmatrix} \begin{bmatrix} x(t) \\ \lambda(t) \end{bmatrix}

Donc :

λ˙(t)=P˙(t)x(t)+P(t)x˙(t)\dot{\lambda}(t) = \dot{P}(t) x(t) + P(t)\dot{x}(t)   ⟹   −Qx(t)−ATλ(t)=P˙(t)x(t)+P(t)(Ax(t)−BR−1BTλ(t))\implies \> -Qx(t) - A^T \lambda(t) = \dot{P}(t) x(t) + P(t)(Ax(t) - B R^{-1}B^T\lambda(t))

On réinjecte notre hypothèse :

−Qx(t)−ATP(t)x(t)=P˙(t)x(t)+P(t)(Ax(t)−BR−1BTP(t)x(t))-Qx(t) - A^T P(t)x(t) = \dot{P}(t) x(t) + P(t)(Ax(t) - B R^{-1}B^TP(t)x(t))   ⟹   (P˙(t)+P(t)A−P(t)BR−1BTP(t)+Q+ATP(t))x(t)=0\implies \> (\dot{P}(t) + P(t)A - P(t)B R^{-1}B^TP(t) + Q + A^TP(t))x(t) = 0   ⟹   −P˙(t)=P(t)A+ATP(t)−P(t)BR−1BTP(t)+Q\implies \> -\dot{P}(t) = P(t)A + A^TP(t) - P(t)B R^{-1}B^TP(t) + Q

On retombe donc sur l’équation différentielle de Riccati (DRE), qui, quand on la traite sur un horizon infini, nous donne :

P(t)A+ATP(t)−P(t)BR−1BTP(t)+Q=0P(t)A + A^TP(t) - P(t)B R^{-1}B^TP(t) + Q = 0

Pour plus de détails sur l’implémentation d’une telle commande, référez vous a cette fiche.


  1. Meltdown est traduit en français par RAGE dans le recueil Techno-Réalisme.