Select Git revision
q_learning.py 3.41 KiB
import numpy as np
def choix_action(epsilon, s, R, Q):
""" Renvoie l'action sélectionnée pour l'état s. Epsilon est une valeur seuil entre 0 et 1 permettant
soit de faire de l'exploration (si tirage aléatoire supérieur au seuil), soit de faire
de l'exploitation (si tirage aléatoire inférieur au seuil)
Parametres
----------
epsilon : seuil (entre 0 et 1) pour choisir entre exploration et exploitation afin de sélectionner une action
s : état courant
R : matrice des récompenses immédiates
Q : matrice représentant la fonction action-valeur
Retour
-------
a : action sélectionnée
"""
#########################################################
##### A compléter (et supprimer l'instruction pass) #####
#########################################################
pass
# return a
def calcule_q(s, a, alpha, gamma, R, Q):
""" Calcule la nouvelle valeur de la fonction action valeur pour l'état s et l'action a
Parametres
----------
s : état courant
a : action choisie
alpha : vitesse d'apprentissage
gamma : facteur d'actualisation
R : matrice des récompenses immédiates
Q : matrice représentant la fonction action-valeur
Retour
-------
q : nouvelle valeur de la fonction action valeur pour l'état s et l'action a
"""
#########################################################
##### A compléter (et supprimer l'instruction pass) #####
#########################################################
pass
# return q
def politique(s,Q):
""" Détermine la meilleure action connaissant l'état S et la fonction action valeur Q
Parametres
----------
s : état courant
Q : matrice représentant la fonction action-valeur
Retour
-------
a : action sélectionnée
"""
#########################################################
##### A compléter (et supprimer l'instruction pass) #####
#########################################################
pass
# return a
# ===================== Partie 1: Initialisation des données =====================
alpha = 1
gamma = 0.8
nb_episodes = 1000
epsilon = 0.
R = [
[-1, -1, -1, -1, 0, -1],
[-1, -1, -1, 0, -1, 100],
[-1, -1, -1, 0, -1, -1],
[-1, 0, 0, -1, 0, -1],
[0, -1, -1, 0, -1, 100],
[-1, 0, -1, -1, 0, 100],
]
R = np.array(R) # Matrice des récompenses immédiates
etat_final = 5
Q = np.zeros(R.shape) # Matrice représentant la fonction action-valeur
nb_etats = nb_actions = R.shape[0]
# ===================== Partie 2: Apprentissage de la fonction action-valeur Q =====================
print("Apprentissage de la fonction Q")
for i in range(nb_episodes):
print("Episode : ",i)
s = np.random.randint(0,nb_etats)
print("Etat initial : ",s)
while True:
a = choix_action(epsilon, s, R, Q)
print("action choisie : ", a)
Q[s,a] = calcule_q(s, a, alpha, gamma, R, Q)
if s == etat_final:
break
s = a
print("Matrice Q_value : ", Q)
Q = Q / np.max(Q) * 100
print("Matrice Q_value normalisée : ", Q)
# ===================== Partie 3: Exploitation de la politique d'action apprise =====================
print("Exploitation")
s = 2 # choix d'un état initial
print("Etat initial : ", s)
while s != etat_final :
a = politique(s, Q)
s = a # nouvel état
print("nouvel état : ",s)