Bonjour,
Je voudrais implémenter un algorithme d'IA pour jeu de stratégie, type échecs.
Je souhaite pour cela utiliser un réseau de neurone en tant que fonction d'évaluation.
Une fonction d'évaluation est une fonction qui est capable lorsqu'on lui soumet une position de dire quel camp est en train de gagner et de combien.
Je souhaiterais que cette fonction soit un MLP (ou un autre RN).
Pour cela, je me pose quelque question un peu basiques (je trouve pas de masses d'informations sur le sujet). Il faut vous imaginer que le RN aura donc 64 entrées (les 64 cases de l'échiquier). La sortie du RN sera un nombre, donnant la valeur de la position. Idéalement, on aura, le RN donnera un nombre position si blanc gagne et un nombre négatif si noir gagne. Le nombre sera entre -100 et 100 (par exemple).
Je me pose quelque questions:
1) supposons que en entrée, le RN puisse prendre 12 valeurs (64 entrées): de -6 à -1 pour les pièces noires et de 1 a 6 pour les pièces blanches. 1 ou -1 correspond au pion, 2 ou -2 au fou, etc.
L'idée est d'encoder l'échiquier et son contenu.
Néanmoins, je me pose une question: n'y-a-t'il pas un risque de confusion des entrées par le RN ?
Je m'explique: est-ce que le réseau de neurones ne risque pas de se dire que le fou (2) est assez proche du pion (1) ? Alors qu'en fait, ce sont 2 pièces différentes. Ainsi, il pourrait, si ce risque se confirme, confondre un groupement de fou avec un groupement de pions ? Si vous comprenenz bien ce que je veux dire, je voudrais que le RN reconnaissent les pièces en tant que telles, pas en tant que pièces ressemblant à une autre pièces. Ainsi, 1 et 2 sont aussi différents que 1 et 6 par exemple (le pion est aussi différent du fou qu'il l'est du roi). Elles ne sont pas semblables parce que leur numéro en tant que entrée sont proches. C'est différent par exemple en reconnaissance d'image ou un pixel ayant un valeur RGB très proche d'un autre pixel peut être considéré comme relativement semblable.
(je sais pas si mon explication est très claire).
2) J'ai un gros doute pour l'apprentissage de ce RN. Déjà, je pense qu'il va falloir une très grande quantité de données, car les positions sont tellement variées.
Mais le plus problématique, c'est comment faire un bon apprentissage dans la mesure où, lorsque je lui sommet une position, hormis quelque positions triviales, je ne saurais jamais exactement quelle est la valeur exacte de la position.
En d'autres termes, je ne vais pas pouvoir "aider" le réseaux à apprendre.
Une idée que j'ai eu consistais à lui soumettre des positions de miliers de parties et lui donner comme seul indice le camp qui a gagné.
Le réseau devra donc déduire que les positions qui mènent à la défaite sont mauvaise et que celles qui mènent à la victoire sont bonnes.
Une idée pour faire cela, sachant que l'on voudrait un integer comme output ? Une idée pour la fonction d'apprentissage ?
Merci d'avance pour vos idées.
Partager