Dans ce TP, on s'intéresse à la résolution de l'équation de Bellman selon deux méthodes vues en cours, ce qui correspond au chapitre 2 du polycopié de cours. Il ne faut pas oublier ce que l'on a vu dant le 1er TP. Le TP précédent doit impérativement avoir été fait avant celui-ci.
On voit successivement :
Outre l'implantation de ces méthodes, l'objectif est de les comparer. Pour les programmeurs C (python peut-être aussi), il est intéressant d'essayer d'optimiser l'algorithme. Entre une implantation naïve et une autre plus maligne, on peut accélérer les calculs grandement (facteur de plusieurs dizaines, voire 100, possible en C).
Il est très pratique que vos programmes prennent en argument de ligne de commande le nombre d'états, le nombre d'actions, le facteur de décompte γ, et le nom du fichier qui contient la fonction de transition et la fonction de retour. Bien entendu, d'autres arguments pertinents peuvent être passés sur la ligne de commande, selon l'algorithme qui est utilisé.
À faire :
stdout
(l'écran du terminal). Il s'agit de mettre en œuvre ce qui a été vu en cours et qui est expliqué en section 2.9, pages 12 et 13 du poly. Faire en sorte que votre programme puisse calculer la valeur d'une politique déterministe ou stochastique. Vous spécifiez la politique comme bon vous semble (a priori, dans un fichier, selon un format que je vous laisse définir).
En C, vous utilisez les fonctions d'algèbre linéaire de la GSL qui résolvent un système d'équations linéaires.
Pour le type de systèmes d'équations linéaires que nous devons résoudre, la méthode passant par une décomposition LU convient parfaitement.
Si on note \( A x = b \) le système à résoudre, où \( A \) est une matrice \( N\times{}N \), \( b \in \mathbb{N} \) sont connus et \( x \in \mathbb{N} \) inconnu, on commence par effectuer la décomposition LU de la matrice \( A \) avec la fonction gsl_linalg_LU_decomp ()
. Ensuite, on résout le système d'équations linéaires avec la fonction gsl_linalg_LU_solve ()
.
En python, on résout un système d'équations linéaires comme celui-ci avec la fonction numpy.linalg.solve ()
.
À faire :
stdout
(l'écran du terminal). Il s'agit de mettre en œuvre ce qui a été vu en cours et est expliqué en section 3.1 du poly. Là encore, faire en sorte que votre programme puisse calculer la valeur d'une politique déterministe ou stochastique.Calculer la valeur de toutes les politiques déterministes pour le problème du chauffeur de taxi (pour γ = 0,9). Reproduire la figure 3 du poly.
Évaluer une politique uniformément aléatoire pour le 21-avec-un-dé par les deux méthodes.
Pour le problème du chauffeur de taxi et le 21-avec-un-dé, déterminer le nombre d'itérations nécessaires pour l'obtention d'une certaine précision. On le fera pour les puissances de 10 allant de -1 à -7.
Pour le chauffeur de taxi, étudier l'influence de la valeur de γ sur ce nombre d'itérations. On prendra \( \gamma \in \{ 0.1, 0.25, 0.5, 0.75 \} \).
On effectue une petite expérimentation pour étudier comment le temps d'exécution de ces 2 méthodes évolue en fonction de la taille du PDM.
De manière générale, une méthode de Monte Carlo consiste à estimer une ou des quantités en simulant la dynamique d'un système. Quand la dynamique est stochastique, on effectue plusieurs simulations dont on moyenne les résultats.
On peut appliquer ce principe à l'estimation de la valeur d'une politique. Pour cela, on estime la valeur en chaque état en simulant la dynamique à partir de cet état et en calculant \( R (e_{t=0}) = \sum_k \gamma^k r_k \), les \( r_k \) étant observés le long de la trajectoire. En simulant plusieurs trajectoires issues du même état \( e_{t=0} \) et en moyennant ces \( R (e_{t=0}) \), on estime la valeur de cet état. On effectue ce même traitement à partir de chacun des états et on obtient une estimation de la valeur de la politique.
À faire :
stdout
. Étudiez comment la précision de l'estimation de la valeur des états varie en fonction du nombre de trajectoires simulées (pour cela, utiliser l'estimation de la fonction valeur obtenue par l'une des deux méthodes précédentes).