Ce projet, effectué dans le cadre du cours de Reinforcement Learning, vise à mettre en oeuvre l'algorithme de Q-Learning pour construire une voiture autonome.
Pour lancer l'application, cloner le dépôt git dans un dossier de son choix en utilisant la commande suivante :
git clone https://github.com/tommy-21/RL-final-project.gitSuivre maintenant les étapes suivantes pour :
- se mettre dans le dossier
RL-final-project; - créer un environnement virtuel ;
- activer l'environnement virtuel ;
- installer les librairies nécessaires au bon fonctionnement de l'application ;
- lancer l'application et suivre les étapes dans la fenêtre qui s'affiche.
Tout le code nécessaire pour réaliser ces étapes se trouve dans le bloc suivant :
cd RL-final-project
python -m venv venv
source venv/bin/activate
pip install requirements.txt
python main.pyL'utilisateur du jeu de voiture automatique a le choix entre trois modes de jeu :
- le mode automatique
- le mode semi-automatique
- le mode manuel.
Dans ce mode, la voiture se déplace de manière automatique sans avoir besoin de l'utilisateur. Les actions (décisions) de la voiture sont prédites par le modèle DDQN implémenté derrière. Le jeu s'arrête lorsque la voiture rencontre un obstacle.
Ce mode est actuellement en cours d'implémentation. Pour l'instant, ce mode est semblable à celui automatique.
Dans ce mode, la voiture est guidée par l'utilisateur qui utilise les touches directionnelles.
La structure du code d'implémentation se présente comme suit :
Le dossier gameEnv contient tout le code qui implémente l'application pygame. L'environnement de jeu est composé de :
- la voiture (
Car.py) représenté par un rectangle ; - la voie principale bordée par des murs (
Walls.py) ; - les buts (
Goals.py) qui sont représentes par des lignes. Ces lignes permettent à la voiture de maintenir un objectif précis en avançant sur la route ; - les obstacles (
Obstacles.py) qui représentent en gros les feux tricolores, le passage piéton et un piéton ; - la voiture est équipée de radars (
Rays.py) qui calculent la distance entre la voiture et les murs les plus proches ainsi que les différents obstacles ; - la fenêtre de jeu (
GameEnv.py) qui utilise tous ces composants pour constituer l'environnement du jeu.
Le dossier model contient l'architecture du réseau de neurones (modèle Double Deep Q-Learning Network (DDQN)) utilisé pour choisir les actions de la voiture autonome.
Le dossier images contient les images de la voiture et de la route.
Le dossier utils contient d'autres fonctions utiles au bon fonctionnement du code.
La phase d'apprentissage a consisté d'une part à générer des données d'apprentissage à parties de plusieurs parties du jeu (simulations) puis à utiliser ces données pour faire tourner l'algorithme d'aprentissage qu'est le Q-Learning. Cette dernière partie a nécessité l'utilisation d'un modèle de réseaux de neurones qui aura pour rôle de modéliser la fonction qui associe à chaque couple état-action, une valeur donnée (la q-valeur).
Pour obtenir les données d'apprentisage, plusieurs parties du jeu (épisodes) sont lancées les unes à la suite des autres. Chaque partie se termine lorsque la voiture cogne un obstacles. Les données récoltés sont les valeurs des variables d'état à un moment donné, l'action effectuée, les nouvelles valeurs des variables d'état suite à l'action effectuée. Les actions effectuées durant l'apprentissage sont déterminées soit au hasard, soit en utilisant le modèle encore en apprentissage. Le choix est déterminé par un facteur epsilon (
Les actions sont associées au fait d'accélérer ou de ralentir, de tourner à gauche ou à droite.
Les récompenses sont associées au fait d'atteindre le but. Si la voiture atteint la destination, le gain est de 10. Si la voiture entre en collision avec un mur, la pénalité est de -10. Si la voiture s'éloigne du but à atteindre d'une itération à une autre, la récompense est de -1. Cela est calculé à l'aide de la méthode compute_distances de la classe Car.
Ici, nous allons décrire le fonctionnement global du modèle DDQN expliqué ici. Le modèle DDQN est composé de deux réseaux de neurones : un réseau target et un réseau eval. Le réseau eval est celui utilisé pour prédire les différentes actions à prendre et le réseau target permet de stabiliser l'apprentissage en fournissant des estimations de Q-valeurs plus stables. Il est périodiquement mis à jour à partir du réseau eval pour suivre ses évolutions. Les deux réseaux de neurones sont constituées de trois couches denses qui permettent de prédire les q-valeurs pour chaque couple action-état. Nous avons utilisé l
Les membres du groupe sont les suivants :

