IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

MLP pour jeux de stratégie, 2 questions


Sujet :

Intelligence artificielle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut MLP pour jeux de stratégie, 2 questions
    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.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Non, personne ?

    En fait, j'ai pensé à une solution:

    Utiliser plus de neurones en entrée. C'est à dire utiliser 64x6 = 384 neurones en input (6 pièces différentes), qui prendraient en entrée soit -1 (pour l'occupation de la case par une pièce noire, pour une case vide et 1 pour une pièce blanche.

    Pour la sortie, je pensais utiliser un code binaire avec 8 neurones en sorties.

    Par contre, pour l'apprentissage, j'en ai vraiment aucune idée.

    Comment faire pour lui faire apprendre la qualité des positions ? (car l'idée est que je ne sais pas jouer et que donc je ne peux en aucun cas relier une position avec un score pour une position quelconque donnée)

    Une idée que j'avais, c'était de lui soumettre des positions issues de parties et lui avec une évaluation déterminée de la manière suivante:

    Supposons que nous avons joueur A qui joue les blanc et joueur B qui joue les noirs. Supposons que B gagne la partie au tour 20.

    Au tour 0 (mise en place), la position est considérée comme égale.
    Au tour 1, on considère que le joueur B a un avantage de 1/20. Ramené à 100 points, on considère donc que la position vaut 52.5/47.5 en faveur de B. Au tour 2, on considère que la position vaut 55/45. Etc.
    Jusqu'au dernier tour, le tour de la victoire ou la position de A ne vaut plus rien et celle de B vaut 100%.

    Le problème de cette approche est qu'elle considère que la victoire se forge de manière linéaire, dès les tous premiers tours, ce qui est faux dans la plupart des jeux. Aux échecs, il est pas très courant de perdre la partie lors de l'ouverture (entre 2 pros). Au contraire, ce sera plutot vers les tours 10-20 que se feront les avantages. De plus, même dans les coups de milieux de partie, ceux qui font gagner, il est rare que deux coups fassent avancer la position d'un joueur de la même manière. Souvent, il y a 2-3 coups forts ou faibles qui font basculer la partie dans un sens ou un autre.

    Néanmoins, ce système à l'avantage d'être très simple et applicable à toutes les parties. Ainsi, avec une grosse DB de parties, on pourrait probablement apprendre assez bien au RN à reconnaître une mauvaise position d'une bonne. Et donc de faire une bonne fonction d'évaluation.

    Qu'en pensez-vous ?
    Vos avis ?

    Merci d'avance. C'est une sujet qui me passionne mais quand même bien compliqué...

    Ce que j'aprécierais, ce serait au moins un avis général, pour me confirmer que l'approche est saine et que je perd au moins pas trop mon temps. Car si le réseau de neureunes semble raisonnablement difficile à implémenter, l'apprentissage risque d'être assez long à coder.

  3. #3
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Bonjour, bien que n'étant pas un expert en réseau de neurones je me permet d'apporter mon modeste avis.

    Je pense (est ce sans vouloir te décourager) que tu sous estime de beaucoup la compléxité d'un jeu d'échec. Combien de neurones compte tu implémenter en tout dans ton réseau car je crains que pour avoir ne serais-ce qu'une évaluation sans même penser à prévoir les coups suivants il va te falloir un réseau extrèmment conséquent de façon à prendre en compte les différentes possibilitées et contraintes de mouvement ainsi que les valeurs relatives des pièces et position. A tu donc déja estimé à peut prés la taille de ton réseau et les ressources nécessaires?

    Citation Envoyé par Zosma
    Le problème de cette approche est qu'elle considère que la victoire se forge de manière linéaire, dès les tous premiers tours, ce qui est faux dans la plupart des jeux. Aux échecs, il est pas très courant de perdre la partie lors de l'ouverture (entre 2 pros). Au contraire, ce sera plutot vers les tours 10-20 que se feront les avantages. De plus, même dans les coups de milieux de partie, ceux qui font gagner, il est rare que deux coups fassent avancer la position d'un joueur de la même manière. Souvent, il y a 2-3 coups forts ou faibles qui font basculer la partie dans un sens ou un autre.
    La plus part des programme jouant aux échecs disposent d'une DB d'ouverture et qu'il serait sans doute bon de prévoir quelque chose du genre car les premiers coups sont trés difficiles à estimer commmes bon ou mauvais, et tenter d'apprendre aussi les ouverture à ton RN risque plus de le perturber pour rien et de ralentir l'apprentissage.

    Sinon je pense que l'idée d'un apprentissage mettant en rapport une position avec un résultat de partie est une bonne approche. Peut-être serait-il judicieux d'utiliser pour cela une DB de problèmes d'échec (ceux qu'on touve dans les magazines TV) qui sont totalement déterministe et serait sans doute un bon début pour un apprentissage.

    Voilà, j'espère t'aider un peu dans ta réflexion avec ces quelques remarque.

    Bon courage

Discussions similaires

  1. Nouvelle FAQ Mathématiques pour les jeux : 82 réponses à vos questions
    Par raptor70 dans le forum Développement 2D, 3D et Jeux
    Réponses: 14
    Dernier message: 11/10/2010, 20h13
  2. PC pour jeux, raid 5 ou Raptor et autres questions
    Par Korfandar dans le forum Ordinateurs
    Réponses: 5
    Dernier message: 16/05/2008, 19h11
  3. Petite question sur les jeux de stratégie
    Par Mat.M dans le forum PC
    Réponses: 20
    Dernier message: 26/03/2008, 18h35
  4. Quel langage pour jeux vidéo ?
    Par dark angel dans le forum Développement 2D, 3D et Jeux
    Réponses: 32
    Dernier message: 09/01/2005, 20h28
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo