Le Moutaincar se présente comme une voiture peu puissante se situant au centre d'une vallée et devant se servir de la colline à sa gauche pour prendre de l'élan et monter sur la colline à droite.
Pour se diriger, la voiture peut aller effectuer trois actions : aller à gauche, à droite, ne rien faire.
La vitesse de la voiture va de [-0.07; 0.07], et sa position de [-1.2; 0.6].
La position de départ de la voiture est en -0.5 et sa vitesse est nulle.
A chaque mouvement l'agent reçoit une récompense de -1.
Le but est donc de faire apprendre à la voiture comment grimper en haut de la colline le plus rapidement possible. Pour cela j'essaie d'utiliser un QLearning en discrétisant la position de la voiture.
D'après : http:www.cs.utexas.edu/~ai-lab/pubs/Todd_Hester_Dissertation.pdf
(page 31)
il faudrait au moins 10 000 états pour obtenir une politique optimale sur le MountainCar. Le but de la discrétisation suivante est donc de s'en approcher le plus possible (parce que je veux une politique optimale en attendant le moins de temps possible).
Le problème de tout discrétiser de la même manière en arrondissant au centième ou millième par exemple, est que dans le premier cas le nombre d'états est trop bas pour obtenir une bonne politique, et dans l'autre cas beaucoup trop grand pour ne pas devoir attendre trop longtemps.
La discrétisation se fait en deux fois, la position puis la vitesse. La position est arrondie au “millième pair” (exemple : 0.9562 -> 0.956 et 0.9571 -> 0.958). Cela permet si je ne me trompe pas d'avoir 950 états différents liés à la position (0.1 = 100 * 0.001, or il y a un arrondit “un millieme sur deux” donc 0.1 contient 50 états différents. Nous avons un intervalle de -1.2 à 0.6 soit une plage de 19 * 0.1 => 19 * 50 = 950)
De plus la vitesse est arrondie au centième et créée donc 15 états supplémentaires (de -0.07 -> 0 = 7, [0.00] = 1, 0 -> 0.07 = 7).
Finalement, il existe donc 950 * 15 = 14 250 états en discrétisant de cette manière.
Concernant l'apprentissage, l'algorithme lance des épisodes de 1000 étapes avant de réinitialiser l'environnement (c'est la raison pour laquelle la somme des récompenses est de -1000 sur le graphique). Si la voiture atteint l'objectif avant la fin des 1000 étapes, l'environnement est réinitialisé.
Voila donc le résultat :
rewardmountaincarnul.png
(x = nombre d'épisodes, y = somme des récompenses)
==== Problème / Avis ====
Il n'y a aucun apprentissage, l'algorithme a l'air même moins efficace que l'aléatoire.
J'ai l'impression d'utiliser exactement le même QLearning que pour mon environnement de grille et pour lequel il y a un apprentissage. Peut être que je rate un détail stupide, je ne sais pas, mais je ne vois pas quoi faire de plus que tout ce que j'ai déjà testé.
L'environnement Pendulum me parait être le même que le MountainCar avec une dimension en plus et une action continue à choisir à chaque étape, je peux essayer de faire marcher le QLearning dessus, mais je ne vois pas pourquoi cela fonctionnerait mieux.