Deep Mim

Essayons de créer une intelligence artificielle, basée sur des réseaux de neurones, pour jouer au jeu des allumettes.

On commence par créer une IA sur le principe du MIN MAX. A chaque étape, l’IA doit évaluer chacun de ses coups possibles et choisir le meilleur.

Accéleration par stockage des évaluations.

La procédure d’évaluation peut être grandement accélerée si l’on conserve en mémoire les situations déja évaluées. Dans notre cas, nous ne stockerons que les situations vues du point de vue de l’IA qui doit jouer.

Ainsi, le plateau [0,0,0,1] est gagnant si l’IA doit jouer, et perdant si c’est l’autre joueur qui joue. Nous stockerons simplement que [0,0,0,1] est un plateau gagnant.

En feintant un peu, on transforme ce plateau en un unique nombre. [0,0,0,1]-> 1000 [1,2,0,7]-> 7210

Nous pouvons ainsi construire une table des évaluations avec comme clef, ce nombre, représentant le tableau et comme valeur, l’évaluation du plateau(-1 ou 1).

Taille de la table d’évaluations.

Au vu de la construction des nombres, il y a en fait très peu d’évaluations. Vite fait :

Une premiere évaluation serait donc : N= 8x6x4x2 = 384

En fait, il y en a moins car par exemple 7131 n’est pas possible. On trouvera 7311 qui représente un plateau équivalent.

Quelques tests semblent montrer (pas eu le temps de le prouver) qu’il n’y a en fait que 143 valeurs possibles…

Du Réseau de Neurone la dedans.

Principe

Le réseau de neurone n’a qu’une chose à faire : On lui donne un tableau (bien trié) : [3,1,1,0] et il doit évaluer ceci (idéalement -1 ou 1)

C’est clairement un problème de Régression, et il n’y a dans notre cas que 143 valeurs a apprendre à évaluer !

Commencons par créer une base de ces valeurs.

Le fichier ../Sources/saveEvaluations.py sauve cette table en un fichier csv : ../Sources/evalMim.csv

Construisons le réseau.

Notre réseau sera simple : 4 entrées, 1 sortie.

Au milieu, disons 2 ou 3 couches pas trop grosses et on sera bon.

Les tests :

Le plus simple est de tester ceci avec un jupyter Notebook sur collab : DeepMim.ipynb