README.md 5.3 KB
Newer Older
DUFAIX Clement's avatar
DUFAIX Clement committed
1
#### Clément Dufaix et Axel Lariviere ####
2
Tout ce projet a été développé en python et utilise les librairies matplotlib et numpy. Le jeu oppose un agent doté d'une intelligence artificielle entraîné avec de l'apprentissage par renforcement en utilisant le principe SARSA contre un agent qui joue de manière totalement aléatoire.
LARIVIERE Axel's avatar
LARIVIERE Axel committed
3
Liste des éléments à réaliser :
DUFAIX Clement's avatar
DUFAIX Clement committed
4
5
6
7
8
9
10
11
- [x] Simuler le jeu du Mutorere
- [x] Pouvoir faire jouer deux joueurs réels
- [x] Implémenter un outil graphique (Qt5) pour avoir un visuel de l’application
- [x] Ajouter un agent utilisant l’algorithme SARSA
- [x] Ajouter un agent random pour entraîner l’algorithme SARSA
- [x] Réaliser un compte-rendu des performances de l’algorithme SARSA
- [x] Faire affronter un joueur réel avec l’agent SARSA entraîné
- [ ] Confronter SARSA au Q-learning pour comparer leurs performances
12
#### La classe Game ####
LARIVIERE Axel's avatar
LARIVIERE Axel committed
13
Cette classe est la classe centrale du jeu, elle contient différents attributs et méthodes dont on listera les plus importants : 
DUFAIX Clement's avatar
DUFAIX Clement committed
14
15
16
- Le plateau de jeu (boardGame), qui est un tableau de 9 entiers, où l’on peut retrouver 3 valeurs (0 : vide,1 : pion joueur 1 ou 2 : pion joueur 2), par exemple le plateau de base contient : [1,1,1,1,2,2,2,2,0].
- Le GameManager qui donne la main à l’un ou l’autre des joueurs, compte le nombre de parties gagnées et réinitialise l’état du jeu après chaque partie.
- MovePawn et EmptyPlaceToMove qui autorisent ou les déplacements des pions des joueurs et qui contiennent les règles du jeu.
LARIVIERE Axel's avatar
LARIVIERE Axel committed
17
#### La classe Player ####
LARIVIERE Axel's avatar
LARIVIERE Axel committed
18
La classe Player est une classe abstraite, elle est la classe mère de n’importe quel joueur, qu’il soit humain, ou un agent entraîné ou qui joue aléatoirement
19
Dans la classe Player on retrouve une méthode abstraite TakeDecision qui est appelée par le GameManager et qui sera ensuite redéfinie spécifiquement dans chaque classe fille.
LARIVIERE Axel's avatar
LARIVIERE Axel committed
20
21
#### La classe Agent ####
Elle hérite de la classe Player, et possède l’algorithme SARSA qui est utilisé pour entraîner l’agent. Au départ, l’agent ne connaît pas les règles du jeu, et SARSA est un algorithme d’apprentissage par renforcement qui utilise le principe de récompense lorsque l’agent réussit ou échoue un coup ou encore lorsque l’agent gagne ou perd une partie.
DUFAIX Clement's avatar
DUFAIX Clement committed
22
23
24

![Processus de décision Markovien](img/Markov_Decision_Process.png)

25
Nous utilisons cette équation fournie par SARSA.
DUFAIX Clement's avatar
DUFAIX Clement committed
26
27
28

![Equation SARSA](img/Equation_SARSA.PNG)

LARIVIERE Axel's avatar
LARIVIERE Axel committed
29
30
31
32
33
34
35
36
37
38
39
40
41
Q est une valeur associée à un couple état/action Alpha et Gamma sont des hyperparamètres compris entre [0,1], respectivement, le « learning rate » et le « discount factor ».
Le premier détermine à quel point il doit mettre de l’importance sur la valeur des nouvelles informations, alpha à 0 signifie que l’algorithme n’apprend rien et à 1 l’agent ne prend en compte que les informations les plus récentes.
Le second l’importance de la future récompense, le gamma fixé à 0 rend l’agent opportuniste en ne considérant que la récompense actuelle, tandis qu’à 1, l’agent adopte une politique basée sur le long terme.
Afin de bien faire apprendre à l’algorithme, nous avons également une méthode dans Agent qui permet de choisir si l’agent opte plutôt pour une stratégie d’exploration ou d’exploitation de ses connaissances. Cette stratégie est illustrée par le taux d’apprentissage Epsilon (eps) compris également entre [0,1], lorsque eps tend vers 1, plus la probabilité que l’agent joue un coup aléatoire est grande, et lorsque eps tend vers 0, l’agent aura tendance à jouer « greedy », utilisant son apprentissage. 
Epsilon évolue en fonction de la réussite des coups de l’agent, selon ces critères de récompenses :
Sélection d’un pion valide : +20
Sélection d’un pion non valide : -10
Victoire : +200
Défaite : -100
Ces critères sont ensuite multipliés à un facteur pour déterminer à quelle vitesse évolue Epsilon.
#### La classe RandomAgent ####
Le RandomAgent est tout simplement un agent qui joue des coups aléatoires, sans connaître les règles, on lui donne un tableau d’entiers compris entre [0,8] et il choisit aléatoirement un entier à jouer au jeu, et recommence tant que l’action n’est pas valide.
#### La classe RealPlayer ####
42

LARIVIERE Axel's avatar
LARIVIERE Axel committed
43
La classe RealPlayer donne la main au joueur humain qui choisit un coup à jouer.
44

LARIVIERE Axel's avatar
LARIVIERE Axel committed
45
#### La classe Window ####
46

LARIVIERE Axel's avatar
LARIVIERE Axel committed
47
Cette classe affiche une interface graphique pour voir l’état du jeu, elle sert particulièrement pour faire jouer un humain. Toute l’interface a été développée avec Qt.
48

DUFAIX Clement's avatar
DUFAIX Clement committed
49
50
![Plateau de jeu](img/mutorere_board.PNG)

LARIVIERE Axel's avatar
LARIVIERE Axel committed
51
#### Résultats ####
LARIVIERE Axel's avatar
LARIVIERE Axel committed
52

DUFAIX Clement's avatar
DUFAIX Clement committed
53
54
55
Sur le premier tableau nous pouvons voir le taux de parties gagnés par l'agent SARSA contre l'agent aléatoire ainsi que la courbe de son Epsilon qui diminue au fur et à mesure que celui-ci apprend à jouer

![Taux de victoire de l'agent et résultat de Epsilon](img/Figure_1.png)
LARIVIERE Axel's avatar
LARIVIERE Axel committed
56

LARIVIERE Axel's avatar
LARIVIERE Axel committed
57
#### Pistes d’amélioration et ambitions ####
58

LARIVIERE Axel's avatar
LARIVIERE Axel committed
59
60
On voit qu’actuellement le winrate de l’agent intelligent avoisine les 80-85%, on peut très sûrement augmenter ce winrate en jouant sur les hyperparamètres (alpha et gamma) et les critères de récompenses, chose que nous n’avons pas eu le temps de faire.
Nous aurions également aimé pouvoir tester l’algorithme Q-learning pour pouvoir le comparer à l’algorithme SARSA pour comparer leurs performances respectives.
61
62
63