diff --git a/tp/direct-indirect.ipynb b/tp/direct-indirect.ipynb index 003ebfa603ea437320f7a8f01e067ae7bf45f29c..72722248f99bdac2e8cd0785ca0fd00557b2e2f2 100644 --- a/tp/direct-indirect.ipynb +++ b/tp/direct-indirect.ipynb @@ -59,7 +59,7 @@ "\n", "✏️ **Exercice 1.**\n", "\n", - "1. Appliquez le PMP. Que pouvez-vous dire du contrôle maximisant ? \n", + "1. Calculer le contrôle maximisant donné par le principe du maximum de Pontryagin (on pourra l'écrire comme une [fonction multivaluée](https://fr.wikipedia.org/wiki/Fonction_multivaluée)) .\n", "2. Peut-on appliquer simplement la méthode de tir simple vu au TP précédent ?" ] }, @@ -80,11 +80,11 @@ "Méthode directe\n", "</div>\n", "\n", - "Avant de définir la méthode directe, on propose une réécriture du problème. Notez que ce n'est pas une obligation en soi de la méthode mais cela simplifie les choses.\n", + "Avant de définir la méthode directe, on propose une réécriture du problème. Ce n'est pas une obligation mais cela simplifie l'écriture.\n", "\n", "✏️ **Exercice 2.** \n", "\n", - "- Mettez le problème sous forme de Mayer (cf. cours). Vous nommerez la nouvelle variable d'état associée au coût $c(\\cdot)$." + "- Mettre le problème sous forme de Mayer (cf. cours). Vous nommerez la nouvelle variable d'état associée au coût $c(\\cdot)$." ] }, { @@ -101,7 +101,7 @@ "1. On définit une grille uniforme en temps $(t_1, \\dots, t_{N+1})$ où $t_1 = 0$ et $t_{N+1} = t_f$ avec $\\Delta t = (t_f - t_0)/N$ le pas de discrétisation.\n", "2. On discrétise l'état, le contrôle et le coût sur cette grille et on note \n", "$$\n", - "X = \\{ (x_i, u_i, c_i) ~|~ i \\in \\{1, \\dots, N+1\\}\\}\n", + "\\{ (x_i, u_i, c_i) ~|~ i \\in \\{1, \\dots, N+1\\}\\}\n", "$$ \n", "l'ensemble des variables d'optimisation du problème discrétisé.\n", "\n", @@ -110,12 +110,12 @@ "x^*_i \\approx x^*(t_i), \\quad u^*_i \\approx u^*(t_i), \\quad c^*_i \\approx c^*(t_i), \\quad \\forall i \\in \\{1, \\dots, N+1\\}.\n", "$$\n", "\n", - "✏️ ️**Exercice 3.** Définissez pour le problème discrétisé : \n", + "✏️ ️**Exercice 3.** Définir pour le problème discrétisé : \n", "\n", - "1. l'objectif à minimiser en fonction d'une ou plusieurs composantes de $X$ bien choisies.\n", - "2. les contraintes d'inégalités associées au contrôle.\n", - "3. les contraintes initiales et finales associées à la variable d'état.\n", - "4. les contraintes de dynamique sur l'état et le coût, en utilisant le schéma d'intégration de Crank-Nicolson (ou [règle des Trapèzes](https://fr.wikipedia.org/wiki/M%C3%A9thode_des_trap%C3%A8zes)).\n" + "1. L'objectif à minimiser.\n", + "2. Les contraintes d'inégalités associées au contrôle.\n", + "3. Les contraintes initiales et finales associées à la variable d'état et la contrainte de condition initiale pour le coût.\n", + "4. Les contraintes de dynamique sur l'état et le coût, en utilisant le schéma d'intégration de Crank-Nicolson (ou [règle des Trapèzes](https://fr.wikipedia.org/wiki/M%C3%A9thode_des_trap%C3%A8zes)).\n" ] }, { @@ -125,7 +125,7 @@ "source": [ "✏️ ️**Exercice 4.** \n", "\n", - "- Modifiez le code suivant afin de résoudre le problème par la méthode directe que vous venez de décrire.\n", + "- Modifier le code suivant afin de résoudre le problème par la méthode directe que vous venez de décrire.\n", "\n", "**Remarque.** Vous pouvez vous inspirer de cet [exemple](https://ct.gitlabpages.inria.fr/gallery/goddard-j/goddard.html) pour le code. Notez que dans cet exemple, la fonction `@NLexpressions` est utilisée mais n'est pas nécessaire ici donc vous pouvez ou non l'utiliser." ] @@ -139,7 +139,7 @@ "# Création du modèle JuMP, Utilisation de Ipopt comme solver\n", "sys = Model(optimizer_with_attributes(Ipopt.Optimizer, \"print_level\" => 5))\n", "set_optimizer_attribute(sys,\"tol\",1e-8)\n", - "set_optimizer_attribute(sys,\"constr_viol_tol\",1e-6)\n", + "set_optimizer_attribute(sys,\"constr_viol_tol\",1e-8)\n", "set_optimizer_attribute(sys,\"max_iter\",1000)\n", "\n", "#######\n", @@ -161,8 +161,8 @@ "Δt = (tf-t0)/N # pas de temps\n", "\n", "@variables(sys, begin\n", - " ... # coût\n", - " ... # état\n", + " ... # coût\n", + " ... # état\n", " ... # control\n", "end)\n", "\n", @@ -258,9 +258,9 @@ "source": [ "✏️ ️**Exercice 5.** \n", "\n", - "1. Commentez les résultats. \n", - "2. Modifiez la tolérance de l'optimiseur ainsi que le nombre de points de discrétisation. Commentaires.\n", - "3. Décrivez la structure du contrôle optimal en fonction du temps." + "1. Commenter les résultats. \n", + "2. Modifier la tolérance de l'optimiseur ainsi que le nombre de points de discrétisation. Commentaires.\n", + "3. Décrire la structure du contrôle optimal en fonction du temps." ] }, { @@ -280,12 +280,12 @@ "Méthode de tir indirect\n", "</div>\n", "\n", - "D'après la condition de maximisation du hamiltonien et la structure optimale de la solution, nous avons besoin de définir 3 fonctions permettant de calculer les flots des systèmes hamiltoniens associés aux contrôles +1, -1 et au contrôle dit singulier qui apparaît lorsque la fonction de commutation reste nulle sur un intervalle de temps non réduit à un singleton.\n", + "D'après la condition de maximisation du hamiltonien et la structure optimale de la solution, nous avons besoin de définir 3 fonctions permettant de calculer les flots des systèmes hamiltoniens associés aux contrôles +1, -1 et au contrôle dit **singulier** qui apparaît lorsque la **fonction de commutation** reste nulle sur un intervalle de temps non réduit à un singleton. La fonction de commutation est la fonction qui détermine la valeur du contrôle en fonction du signe de celle-ci.\n", "\n", "✏️ ️️**Exercice 6.** \n", "\n", "1. Donner la fonction de commutation.\n", - "2. En dérivant deux fois par rapport au temps la fonction de commutations, trouver une condition vérifiée par l'état et une condition vérifiée par le contrôle le long d'un arc singulier, c'est-à-dire le long d'un arc où la fonction de commutation est constante égale à 0.\n", + "2. En dérivant deux fois par rapport au temps la fonction de commutation, trouver une condition vérifiée par l'état et une condition vérifiée par le contrôle le long d'un arc singulier, c'est-à-dire le long d'un arc où la fonction de commutation est constante égale à 0.\n", "3. Remplir le code ci-dessous: il faut fournir les 3 contrôles pour définir les flots, puis écrire la fonction de tir.\n", "\n", "**Remarque.** La fonction de tir à 3 variables inconnues. Il faut donc trouver 3 équations. La condition terminale en est une. L'annulation de la fonction de commutation au premier temps de commutation en est une autre. La question 2 aide à trouver la dernière condition.\n"