Dans ce TP, on s'intéresse à la résolution de l'équation d'optimalité de Bellman selon différentes méthodes vues en cours, ce qui correspond au chapitre 3 du polycopié de cours.
Implanter l'algorithme d'itération sur les politiques vu en cours.
Tester votre implantation sur le problème du chauffeur de taxi.
Résoudre le problème du 21-avec-un-dé.
Déterminer la politique optimale pour « toutes » les valeurs de γ. Déterminer les valeurs de γ auxquelles la politique optimale change.
Implanter l'algorithme d'itération sur la valeur vu en cours.
Tester votre implantation sur le problème du chauffeur de taxi.
Résoudre le problème du 21-avec-un-dé.
Implanter la résolution d'un problème de décision de Markov par programmation linéaire.
La tester sur le problème du chauffeur de taxi et sur le problème du 21-avec-un-dé. Retrouvez-vous les mêmes politiques optimales que par la méthode d'itération sur les politiques ?
On utilise la bibliothèque glpk
pour résoudre un programme linéaire. Elle est installée sur les ordinateurs en salle TP. Sur votre ordinateur personnel, il faut peut-être l'installer. Sous Ubuntu, la documentation est dans le fichier /usr/share/doc/glpk-doc/glpk.pdf
.
On utilise la bibliothèque PuLP
. Si import pulp
ne fonctionne pas, faites un pip3 install pulp
et ça fonctionnera.
Une courte introduction à l'utilisation de PuLP pour résoudre un programme linéaire.
On considère le petit problème vu en cours et qui est décrit dans l'annexe D du polycopié. On le résout à l'aide du code ci-dessous :
import numpy as np import pulp N = 2 # nombre de variables x = pulp.LpVariable.dicts ("x", (range (N))) # les variables prob = pulp.LpProblem ("exemple", pulp.LpMaximize) # on définit la fonction objectif prob += sum ([x [i] for i in range (N)]) # on définit les contraintes prob += x [0] + 2 * x [1] <= 4 prob += 4 * x [0] + 2 * x [1] <= 12 prob += - x [0] + x [1] <= 1 #on résout le PL prob. solve () solution = np. zeros (N) # on affiche la solution print ("Solution du primal :") for i in range (N): solution [i] = x [i]. varValue print (solution [i]) solution_dual = np.zeros ((N, 3)) s = 0 a = 0 M = 3 # nombre de contraintes print ("solution du dual") for name, c in list(prob.constraints.items()): print (c. pi)