Apprentissage par renforcement :
compléments au cours
2007-2008
Philippe Preux, cours MRI, automne 2007.
Cette page a pour objet de résumer et préciser ce que l'on a vu en
cours. Je mets l'accent sur l'application et le « comment on fait
concrètement ? ».
Comme en cours, on commence par un exemple, le problème du chauffeur
de taxi, lequel va nous permettre d'introduire l'intuition de pas mal
d'idées et d'algorithmes. Ensuite, on généralisera le problème aux
problèmes de décision de Markov.
Plan de cette page :
Rappel du problème du chauffeur de taxi
On traite le problème du chauffeur de taxi. Celui-ci travaille sur 3
villes A, B et C. À chaque instant, il doit décider ce qu'il fait. Il
peut :
- a1 : rouler en espérant être hélé par un client
- a2 : s'arrêter à une station de taxis dans la
ville où il se trouve et attendre un client
- a3 : stationner son taxi et attendre un appel.
Dans les villes A et C, les 3 actions sont possibles ; dans la
ville B, l'action a2 est impossible car il il n'y a pas de
station de taxis dans B.
En cours, on s'est donné :
- les probabilités de transiter d'une ville à une autre si le
chauffeur de taxi fait l'une ou l'autre des actions, dans un
tableau noté P. On note P (x, a, x') la probabilité d'atteindre
l'état x' si le chauffeur de taxi est dans l'état x et effectue
l'action a ;
- les conséquences de chacune de ces transitions, dans un tableau
noté R. On note R (x, a, x') le retour (gain en euros par exemple)
correspondant à la transition de l'état x, suite à l'action a,
vers l'état x'.
Quel est le comportement optimal du
chauffeur de taxi ?
Introduction intuitive et algorithmes de
programmation dynamique
Résumons la situation :
- à chaque instant t, le chauffeur de taxi est dans l'une des
trois villes : c'est son état courant, que l'on note
xt ;
- à chaque instant t, le chauffeur de taxi doit choisir une action
à effectuer. On notera at l'action qu'il aura
choisie ;
- le chauffeur veut maximiser ses gains. Il lui faut donc trouver
la meilleure action à effectuer à chaque instant t.
Notions de retour, de politique et de fonction valeur
Le chauffeur de taxi veut optimiser (maximiser ici) ses gains dans
l'avenir. Pour cela, on définit :
R
t = r
t + γ r
t+1 +
γ
2 r
t+2 + γ
3
r
t+3 + ...
soit :
R
t = Σ
k γ
k r
t+k
Ce R
t correspond à une expérience vécue par le
chaffeur. Face à un système non déterministe, on s'intéresse non pas à
une expérience particulière, mais à une expérience typique, autrement
dit, à la valeur moyenne de ce R
t, que l'on note ici E
(R
t).
en cours, je l'ai noté avec un E avec
deux barres verticales, symboles que je ne trouve pas en html (-(,
donc je mets E.
On a alors défini la valeur d'un état x comme :
V (x) = E (R
t | x
t = x)
Cette valeur dépend de la politique de l'agent (comment il choisit ses
actions).
Plus précisément, une politique, notée π, se définit comme la
probabilité d'émettre une action donnée dans un état donné, donc de la
forme π (x, a).
Donc, pour être tout à fait précis, la valeur d'un état dépend de la
politique suivie : on note donc V
π (x).
On a alors montré l'équation de Bellman :
V
π (x) = Σ
a π (x, a)
[Σ
x' P (x, a, x') {R (x, a, x') + γ
V
π (x')} ]
Cette équation relie la valeur de la fonction valeur (un peu lourd,
désolé) d'un état à la valeur de cette fonction en d'autres
états.
En appliquant cette équation de Bellman, on obtient un systèmes
de N équations linéaires, N étant le nombre d'états.
Écrire ce système d'équations pour le problème du
chauffeur de taxi pour une politique aléatoire et en prenant γ =
0,9.
Réponse.
Néanmoins, pour un problème arbitraire de taille un peu importante (N
= 1 million par exemple), la résolution directe d'un système
d'équations linéaires (à N inconnues donc) est pratiquement
impossible.
D'autres méthodes sont donc possibles. On en voit deux ci-dessous.
Méthode de Monte Carlo pour évaluer une politique fixée
On veut donc calculer Vπ (x) = E (Σk
γk rt+k).
Une méthode consiste à simuler la dynamique du système : on a
tous les éléments en main : P qui détermine les probabilités de
transition ; R qui détermine les retours de chaque transition
effectuée ; il faut se donner une politique : prenons la
politique aléatoire ; prenons γ = 0,9.
En considérant successivement chaque état comme état initial, on
simule un grand nombre (par exemple 1 million) de trajectoires (par
exemple, des trajectoires de 100 pas) en calculant tout au long de
cette trajectoire Vπ (état initial) =
Σk=0k=99 γk
rk. On fait la moyenne de ce million de trajectoire partant
du même état initial et cela nous fournit une estimation de sa valeur,
pour cette π donnée.
Cette procédure est une méthode de Monte Carlo, méthode
extrêmement importante pour la résolution concrète de tas de problèmes
d'estimation (moyenne, intégrale, ...).
Écrire un programme qui effectue cette simulation Monte Carlo pour le
problème du chauffeur de taxi et déduisez-en la valeur de chacun des
états pour une politique aléatoire et pour γ = 0,9.
L'idée de l'approche Monte-Carlo est de simuler la dynamique du
système, c'est-à-dire :
- t ← 0
- on choisit un état de départ xt
- pour t de 0 à T faire
- en fonction des probabilités d'émission d'actions dans cet
état, on choisit l'une de ces actions comme at.
(Lire ceci uniquement si vous ne savez pas comment faire le
choix de l'action.)
Pour cela, supposons que dans xt, l'agent émet l'action
a1 avec la probabilité 0,1, l'action
a2 avec la probabilité 0,5 et l'action
a3 avec la probabilité 0,4. On procède de la
manière suivante :
- on tire un nombre pseudo-aléatoire compris entre 0 et
1. Notons le u.
- si u < 0,1, on considère que at est
a1, sinon si u < 0,6, on considère que
at est a2, sinon on considère que
at est a3.
(Notez bien le 0,6 qui apparaît est la somme 0,1 +
0,5.)
- on calcule l'état résultant xt+1 et le retour
immédiat rt. Pour déterminer l'état résultant, on
procède comme pour le choix de l'action.
- on stocke le tripler (xt, at,
rt)
- fait
- on estime V (x0) par
Σt=0t=T γt rt
Le principe est alors de faire cette estimation un grand nombre de
fois pour chacun des états pris comme x0. ; on en
fait ensuite la moyenne pour chaque x0. Pour être plus
précis, notons mc.genere.trajectoire() une fonction qui, pour un P,
R, γ et π fixés, genère une liste de triplets
(xt, at, rt)t ∈ {0, ...,
T}. On aura alors l'algorithme d'évaluation Monte-Carlo d'une
politique défini par :
- pour chaque état x de 1 à N fait
- V (x) ← 0
- pour chaque j de 1 à M fait
- trajectoire (j) ←
mc.genere.trajectoire(π, P, R, γ, T)
- val (j) ← Σt=0t=T
γt trajectoire (j)\$rt
- fait
- V (x) ← moyenne des val (j), soit Σj ∈
{1, ..., M} val (j) / M
- fait
Notez bien que :
- val (j) est la valeur estimée de l'état x à partir de la
je trajectoire débutant dans l'état x. On fait M
trajectoires pour chaque état initial.
- V (x) est la valeur estimée de l'état x en utilisant les M
trajectoires débutant dans l'état x (c'est simplement la moyenne
des M val (j)).
Sur le problème du taxi, en fixant M à 10000 et T à 150,
j'obtiens : V (A) ≈ 87,3, V (B) ≈ 98,8 et V (C)
≈ 87,3.
Comme on génère des trajetcoires aléatoirement, si on refait la
simulation, on obtient des estimations légérement différentes. On
peut (on doit !) en fait faire plusieurs fois ces estimations et
les moyenner. En moyennant les résultats de 10 exécutions de cette
procédure, j'obtiens : V (A) ≈ 87,38, V (B) ≈ 98,6
et V (C) ≈ 87,37. Et vous ?
4 remarques pour terminer :
- il est intéressant de calculer également les écarts-types
sur ces 10 exécutions : σ (V (A)) ≈ 0,115,
σ (V (B)) ≈ 0,124 et σ (V (C)) ≈
0,127.
- les méthodes Monte-Carlo sont connues pour leur variance
élevée, c'est-à-dire que, s'appuyant sur des simulations
stochastiques, plusieurs exécutions peuvent donner des
résultats assez dissemblables. La solution à cela est de
multiplier les simulations pour réduire cette variance et
obtenir des estimations plus précises.
- il est intéressant de faire un graphique représentant
l'estimation des valeurs en fonction de M. Moi, j'obtiens
cela :
En abscisses, on a le log décimal de M, en ordonnées,
l'estimation de la valeur de chacun des états (V (A) en bleu,
V (B) en vert et V (C) en rouge). Pour chaque estimation (qui
résulte de la moyenne de 10 exécutions de l'ensemble de la
procédure), on a indiqué 1 écart-type autour de la vaeur
moyenne ; très logiquement, cet écart se réduit quand M
augmente. On a également indiqué en pointillés la valeur
théorique des 3 états ; on voit que la valeur estimée est
proche de cette valeur à trouver et que l'on s'en rapproche
quand M augmente.
- vous avez comparé avec les résultats obtenus plus haut par
la résolution du système d'équations linéaires ?
Méthode d'évaluation de la politique (policy
evaluation)
À partir de l'équation de Belmlman, on peut facilement déduire un
algorithme itératif : soit V0 une estimation initiale
de la fonction valeur, on itère sur j comme suit :
Vj+1π (x) ← Σa π (x,
a) [Σx' P (x, a, x') {R (x, a, x') + γ
Vjπ (x')} ]
On boucle simplement sur cette équation (en incrémentant j). Quand la
différence entre Vj+1 et Vj+1 est inférieure à
un seuil fixé (ε = 10-6 par exemple), on considère
que l'algorithme a convergé ; on a l'estimation à ε près
de Vπ recherchée.
- Écrire un programme qui implante cette algorithme d'évaluation de la
politique pour le problème du chauffeur de taxi et déduisez-en la
valeur de chacun des états pour une politique aléatoire et pour
γ = 0,9.
- vérifiez que vous obtenez la même fonction valeur par
résolution du système d'équations, par la méthode de Monte Carlo et
par l'algorithme d'évaluation de la politique.
J'obtiens les estimations V (A) ≈ 87,43, V (B) ≈ 98,56
et V (C) ≈ 87,39. On note que les trois méthodes utilisées
trouvent des valeurs très proches les unes des autres.
Remarque : on passe sur le fait que l'algorithme converge et qu'il
converge vers ce que l'on veut. Cela se démontre sous des hypothèses
qui sont vérifiées par le problème du chauffeur de taxi. On verra plus
tard les hypothèses sous lesquelles on a cette si bonne propriété.
Amélioration d'une politique (policy improvement)
Quand on a la fonction valeur d'une politique π, on peut facilement
trouver une meilleure politique π' (s'il en existe une). En effet,
une politique gloutonne par rapport à Vπ est soit π
elle-même, soit meilleure que π.
Précisons que l'on travaille ici avec des politiques déterministes, de
la forme π (x) est l'action à effectuer dans l'état x. Si on a π
(A) = a2, c'est comme si on a la politique stochastique
π (A, a1) = π (A, a3) = 0 et π (A,
a2) = 1.
Donc, en résumé : ayant π déterministe, on en déduit π'
meilleure ou égale à π comme suit :
forall x in X do
π' (x) ← argmaxa∈A Σx' P (x, a, x') {R (x, a, x') + γ Vπ (x')}
done
Plus haut, on a calculé la valeur des 3 états pour une politique
aléatoire. À partir de là, quel est le résultat fourni par
l'algorithme d'amélioration de la politique ?
La politique gloutonne par rapport à l'estimation de V qui a été
faite plus haut est :
- dans l'état A, faire l'action a1
- dans l'état B, faire l'action a3
- dans l'état C, faire l'action a2
Détail des calculs pour l'état A :
on cherche l'action qui maximise Σx' P (x, a, x') {R (x, a, x') + γ Vπ (x')}
Prenons x = A, on cherche donc a qui maximise :
- pour a1 : P (A, a1, A) { R (A, a1, A) + γ V (A)} + P (A, a1, B) { R (A, a1, B) + γ V (B)} + P (A, a1, C) { R (A, a1, C) + γ V (C)}
- pour a2 : P (B, a1, A) { R (B, a1, A) + γ V (A)} + P (B, a1, B) { R (B, a1, B) + γ V (B)} + P (B, a1, C) { R (B, a1, C) + γ V (C)}
- pour a3 : P (C, a1, A) { R (C, a1, A) + γ V (A)} + P (C, a1, B) { R (C, a1, B) + γ V (B)} + P (C, a1, C) { R (C, a1, C) + γ V (C)}
soit :
- pour a1 : 1/2 { 10 + 0,9 x 87,43 } + 1/4 { 4 + 0,9 x 98,56 } + 1/4 { 4 + 0,9 * 87,39} ≈ 89,2
- pour a2 : 1/16 { 8 + 0,9 x 87,43 } + 3/4 { 2 + 0,9 x 98,56 } + 3/16 { 4 + 0,9 * 87,39} ≈ 88,9
- pour a3 : 1/4 { 4 + 0,9 x 87,43 } + 1/8 { 6 + 0,9 x 98,56 } + 5/8 { 4 + 0,9 * 87,39} ≈ 84,2
on conclut donc que l'action gloutonne dans l'état A est a1.
Algorithme d'itération de la politique (policy iteration)
Quand on sait évaluer une politique et améliorer une politique, on
sait trouver la politique optimale : il suffit d'alterner les
deux algorithmes : on converge vers la politique optimale.
Remarque : à nouveau, on passe sur les garanties de convergence
et de convergence vers la politique optimale. Le problème du chauffeur
de taxi vérifie les hypothèses voulues...
- Écrire un programme qui implante cette algorithme d'itération
de la politique pour le problème du chauffeur de taxi pour
γ = 0,9.
- Prenez différentes valeurs de γ et
calculez la politique optimale pour chacune. Est-ce la
même ? Qu'en pensez-vous ?
- On repart de la politique trouvée plus haut : $\pi_1 (A) =
a_1$, $\pi_1 (B) = a_3$ et $\pi_1 (C) = a_2$.
- L'algorithme d'itération de la politique en calcule tout
d'abord sa valeur : $V^{\pi_1} (A) \approx 119.4, V^{\pi_1}
(B) \approx 134.5, V^{\pi_1} (C) \approx 121.9$.
- L'amélioration de cette politique donne $\pi_2 (A) = a_2$,
$\pi_2 (B) = a_3$ et $\pi_2 (C) = a_2$. On évalue $\pi_2$ :
$V^{\pi_2} (A) \approx 121,7, V^{\pi_2} (B) \approx 135.3,
V^{\pi_2} (C) \approx 122.8$.
- L'amélioration de cette politique donne $\pi_3 (A) = a_2$, $\pi_3
(B) = a_3$ et $\pi_3 (C) = a_2$. On constate que $\pi_3 =
\pi_2$. Donc, l'itération de la politique a convergé et ceci est la
politique optimale.
En résumé, la politique optimale pour ce problème est :
- dans l'état A, faire a2
- dans l'état B, faire a3
- dans l'état C, faire a2
Algorithme d'itération de la valeur (value iteration)
L'algorithme d'itération de la valeur calcule directement la valeur
d'une politique optimale, étant spécifié l'ensemble des états,
l'ensemble des actions, P, R et γ. Il s'appuie sur l'équation
d'optimalité de Bellman :
V* (x) = maxa
[Σx' P (x, a, x') {R (x, a, x') + γ
V* (x')} ]
L'algorithme d'itération de la valeur consiste à partir d'une
estimation quelconque de V0 de V* et d'itérer
sur k comme suit :
Vk+1 (x) = maxa
[Σx' P (x, a, x') {R (x, a, x') + γ
Vk (x')} ]
On arrête les itérations quand Vk et Vk-1 sont
égales à ε près.
- Implantez l'algorithme d'itération de la valeur.
- Utilisez-le pour calculer la valeur d'une politique optimale
pour le problème du chauffeur de taxi.
- Déduisez-en une politique optimale (gloutonne par rapport à
cette fonction valeur optimale)
- Appliquez l'algorithme d'évaluation de la politique implanté
plus haut sur cette politique optimale et vérifiez que vous
obtenez la même valeur des états.
Les problèmes de décision de Markov
Le problème du chauffeur est un représentant d'une classe très
générale de problèmes, les problèmes de décision de Markov (PDM). Les
algorithmes vus jusque maintenant s'applique à n'importe quel PDM pour
en calculer une politique optimale.
Le jeu consiste donc, face à un problème de décision séquentiel (un
problème où un agent doit réaliser une suite de décisions pour
atteindre un objectif), à formuler ce problème sous la forme d'un PDM
et d'utiliser ensuite l'un des algorithmes disponibles pour cela.
Un problème de décision de Markov se définit par :
- un ensemble d'états que nous notons X
- un ensemble d'actions possibles que nous notons A (on notera
A(x) si les actions possibles dépendent de l'état, donc A(x) sera
l'ensemble des actions possibles dans l'état x)
- une fonction de transition P qui spécifie la probabilité
d'atteindre chacun des états quand une certaine action est émise
dans un état donné
- une fonction de retour R qui spécifie le retour moyen sur une
certaine transition
- γ ∈ [0, 1], le facteur de dépréciation.
Récréations markoviennes
Les récréations markoviennes
sont ici.
À ce stade, il convient d'adapter, si nécessaire, les fonctions
que vous avez écrites plus haut pour qu'elles fonctionnenent pour
un quintuplet (X, A, P, R, γ) quelconque.
Algorithmes basés sur la différence temporelle
L'algorithme TD(0)
L'algorithme TD(0) est un algorithme d'évaluation d'une politique qui,
contrairement à l'algorithme vu plus haut, n'a pas besoin de P ni de R
pour effectuer cette évaluation. Au contraire, l'agent apprend en
interagissant avec son environnement et n'a pas besoin d'un
modèle de celui-ci.
- programmez l'algorithme TD(0)
- évaluez la politique aléatoire uniforme
- comparez avec les résultats précédents
J'obtiens la courbe d'apprentissage suivante :
où l'on voit, au cours des itérations, l'évolution de l'estimation
de la valeur de chacun des états (rouge, noir et bleu). On obtient
bien les mêmes valeurs que précédemment.
TD(λ)
TD(λ) est une généralisation de l'algorithme précédent qui
correspond au cas particulier λ = 0 (donc connu sous le vocable
TD(0)).
- programmez l'algorithme TD(λ)
- évaluez la politique aléatoire uniforme (prenez λ = 0,5)
- comparez avec les résultats précédents
- faites varier la valeur de λ; que se passe-t-il ? (Par exemple, vous pouvez observer la vitesse avec laquelle l'algorithme s'approche de la bonne valeur.)
Q-Learning et Q (λ)
- programmez l'algorithme Q-Learning
- trouvez une politique optimale pour le problème du chauffeur
de taxi
- comparez avec la politique trouvée par l'algorithme
d'itération de la politique
- résolvez d'autres PDM tels certains de ceux suggérés sur la
page des récréations
markoviennes (le 421 et le blackjack par exemple)
- programmez l'algorithme Q(λ) et refaites les
expérimentations
J'ai utilisé un Q-Learning qui sélectionne ses actions par la
stratégie ε-gloutonne. ε est initialisé à 0 et
croît comme 1/log(numéro de l'épisode courant + 1).
Le taux d'apprentissage est associé à chaque paire état-action,
initialisé à 1 et décroît comme 1 / log (nombre de visites à cette
paire état-action).
La tâche n'ayant pas de fin, on arrête après 1000 itérations. On
effectue 150 épisodes, chacun fixant l'état initial à chacun des
trois états, à tour de rôle.
Sur le problème du chauffeur de taxi, on obtient la fonction Q
suivante :
| Q (x,
a) | a1 | a2 |
a3 |
| A | 116,2 | 117,7 | 112,8 |
| B | 121,6 | - | 134,2 |
| C | 116,6 | 119,1 | 113,0 |
Remarque : naturellement, il est fort improbable que vous
obteniez exactement les mêmes nombres puisque le Q-learning est
stochastique. Mais vous devriez obtenir le même genre de nombres
(au moins, à une unité près). Surtout, la politique gloutonne
devrait être la même (150 épisodes suffisent sur ce problème
simple à ce que l'ordre relatif des Q-valeurs pour un état donné
soit correct ; un rapide test semble montrer que 60 épisodes
suffisent à l'obtention d'une politique gloutonne optimale).
Pour chaque état, la politique optimale consiste à choisir
l'action gloutonne, celle qui maximise Q. On observe donc que la
politique optimale consiste :
- dans l'état A, faire a2
- dans l'état B, faire a3
- dans l'état C, faire a2
On retrouve bien le même résultat qu'avec l'algorithme d'itération
de la politique.
Remarque : le - pour Q (B, a2) correspond à une
action impossible dans cet état.
Les PDM de grande taille
- Approche par discrétisation :
- Algorithmes :
- pour maillage régulier : algorithmes habituels où on
stocke l'estimation de la valeur pour les intersections de la
grille et la valeur des autres états est déterminée par
interpolation.
- pour CMAC et grilles de gaussiennes et tout approximateur
linéaire :
- algorithme d'itération de la valeur approché
- TD approché : équation de mise à jour des paramètres
pour CMAC et grilels de gaussiennes :
$\beta_{t+1} \gets \beta_t +
\alpha_t d_t \nabla_\beta_t \hat{V} (x_t)$ où :
- les $\beta$ sont les paramètres de $\hat{V}$,
- $d_t = r_t + \gamma \hat{V} (x_{t+1} - \hat{V} (x_t)$
est la différence temporelle
- $\hat{V} (x_t)$ est l'estimation de la valeur de
$x_t$
- $\nabla_{\beta_t} \hat{V} (x_t)$ est le gradient de
$\hat{V}$ au point $x_t$ par rapport aux paramètres
$\beta$. Pour les CMAC, c'est 1 si $x_t$ est dans la
case, 0 sinon ; pour une grille de gaussiennes,
c'est un vecteur de $e^{-\frac{|| x_t - c||^2}{2 \sigma^2}}$
où $c$ est la position de la gaussienne considérée.
- et les autres (itération de la politique, méthodes de Monte
Carlo)
Description de deux MDP ayant un espace d'états continu :
- le pendule inversé :
- état : couple $(\theta, \dot{\theta})
- action : $a = \pm 5$
- fonction de transition:
- $\ddot{\theta}_{t+dt} \gets \frac{1}{ml^2} (- \mu
\dot{\theta}_t + mgl \sin{(\theta_t)} + a)$
- dont on déduit $\dot{\theta}_{t+dt}$ par intégration, puis
$\theta_{t+dt}$ à nouveau par intégration, donc le nouvel état
$x_{t+dt} = (\theta_{t+dt}, \dot{\theta}_{t+dt})$.
- avec $m = l = 1$ (masse située au bout du pendule et
longueur de la tige du pendule), $g = 9.81$ constante de la
gravité à la surface de la Terre, $\mu = 0.01$ et le pas
d'intégration $dt = 0,03$ seconde.
- fonction de retour : $r_t \gets \cos{(\theta_{t+1})}$
- le mountain car :
- état : couple $(x, \dot{x})$, avec $x \in [-1,2; 0,5]$ et
$\dot{x} \in [-0,07; 0,07]$
- action : $a \in \{ -1, 0, +1 \}$
- fonction de transition : ici le pas de temps est 1. On
calcule directement vitesse et position à l'instant suivant par :
- $\dot{x}_{t+1} \gets \mbox{bound} (\dot{x}_t + 0,001 a_t -
0,0025 \cos{(3 x_t)}) $ où $\mbox{bound} (toto)$ contraint
$toto$ dans l'intervalle des valeurs possibles : si
toto déborde, on le met à la borne (exemple : si toto
vaut -2, bound (toto) vaut -1,2)
- $x_{t+1} \gets \mbox{bound} (x_t + \dot{x}_{t+1})$.
- fonction de retour : $r_t \gets -1$ à chaque
itération. Quand la voiture franchit le sommet de la
colline de droite, la tâche est accomplie. (pour
compliquer la tâche, on pourrait exiger aussi que la
voiture s'arrête précisèment au sommet de cette
colline : c'est plus dur !))
Pour vous donnez une idée de ce à quoi ressemble une fonction valeur,
voici celle pour le pendule inversé :
et pour le
mountain-car :
- programmez l'algorithme d'itération sur les valeurs approché
sur ces deux problèmes. Vous utiliserez une grille régulière, ou
une grille de gaussiennes : faire les deux, c'est mieux pour
pouvoir comparer.
En utilisant des CMAC sur le mountain car, R. Sutton obtient l'apprentissage
suivant de la fonction valeur.
Liens
- la page
du cours
- en cas de problème, questionnement, ... n'hésitez pas à
m'envoyer un email : philippe -point- preux -at- inria
-point- fr (en remplaçant -point- par . et -at- par @) (pas
d'email = vous avez compris et vous avez tout fait)