Jour 1

Jeu de base

L'objectif du jeu est d'affronter deux IA l'une contre l'autre sur un petit foot.
Actuellement, les collisions avec le ballon ont été faite.
La balle va dans le sens qui dépend de la position du joueur au moment de l'impact.
Les rebonds sur les bords ont été fait.
Au niveau des IA, la Q-Table est faite, la table des rewards aussi ainsi que la plupart des fonctions mais elles n'ont pas encore été testé.

Jour 2

Ecran démarrage

Le menu pour lancer le jeu a été effectué.
Il suffit de presser la barre espace pour lancer le jeu.

Jeu implémenté

Le fond a été fait a l'aide d'un sprite répété sur tout l'écran et les lignes de touches/buts on été fait avec des SDLRect pour simplifier les calculs lors de la création du terrain.
Un timeur a été implanté pour limiter le temps de jeu.
La gestion du score est faite.
Un écran de fin s'affiche et indique qui a gagné ou indique "Egalité" si tel est le cas.
L'IA est toujours en cours d'implémentation.

Choix des états

Le choix des états et actions.

Jour 3

IA implémenté

L'IA a été implanté. Il y a deux IA qui jouent l'une contre l'autre après un entraînement basé sur une QTable définie de sorte à l'aider un peu à agir comme on veut.
Aujourd'hui, c'était beaucoup de déboggage.
L'objectif de demain est d'entraîner l'IA à partir d'une QTable non forcée.

Jour 4

Apprentissage IA

Ici, les deux IA ont appris à partir d'une QTable vide.
On remarque que les deux IA restent assez équitables entre elles.
Cela est dû au fait que lors de l'apprentissage, la première IA à faire une action est random donc elles ont un apprentissage quasiment équivalent.
Abdeljalil Zoghlami nous a produit notre bande son (un grand merci à lui !):

Apprentissage à partir d'une matrice préremplie

Voici une matrice préremplie à la main permettant d'avoir un comportement spécial (ici le joueur suit la balle et tire quand il est proche d'elle).
On peut par la suite donner cette matrice à la fonction d'apprentissage afin d'affiner les paramètres de la matrice et d'obtenir un comportement plus propre.
Par rapport à une matrice vide au départ, cette méthode permet d'obtenir un résultat cohérent (dans cet exemple, le joueur ne peut pas tirer vers le but quand il est situé entre les cages et la balle).

2 vs 2

Voici un exemple de jeu avec 4 joueurs.
Chaque joueur à la QTable du joueur entraîné comme précédement en 1vs1.