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

Méthodes prédictives Discussion :

Réseau de neurones pour un Morpion


Sujet :

Méthodes prédictives

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 19
    Points
    19
    Par défaut Réseau de neurones pour un Morpion
    Salut,

    Je suis en train de faire un réseau de neurone qui apprendrais à jouer au morpion. C'est surtout pour apprendre à manipuler les neurones parce que ce n'est pas les 9 cases du morpions qui vont effrayer nos machines d'aujourd'hui.

    Le principe je crée un réseau qui apprend les règles. puis au file des parties avec des humains il apprend la stratégie.

    la grille est modélisé par un vecteur de dimension 9. je fait un réseau de neurone pour chaque tour.

    En entrée je met la séquence joué. Par exemple pour le réseau de neurone du tour 4 : il ya 3 entrés eg:4 5 6 et une sortie : ce que le CPU doit jouer.
    C'est un réseau en 3 couche.. la couche caché a 2 neurones de plus que la couche d'entrée.

    Pour l'instant je voudrais lui apprendre les regles du morpion : jouer entre 0 et 8 et ne pas choisir une position deja utilisé.

    J'ai créer un echantillion alléatoire d'aprentissage qui respecte les régles du morpions.

    J'ai des problèmes avec FANN il me renvoit tjrs 1.0 .. Mais je suis venu ici pour avoir un avis sur la modélisation ! si je m'y prend bien. et quel genre de fonction d'activation me conseillé vous.

    c'est un peu mastoc comme topic.
    Merci d'avance
    Marc++

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Je vais essayer de te donner quelques pistes...

    Je mettrais 9 sorties... Et derrière tu prends le maximum des 9, et ça correspond à l'indice de la case sur laquelle jouer.

    Pour les entrées, 9 je pense aussi pour avoir l'état du jeu.
    Pour la couche cachée, là comme d'hab c'est à tâton.
    Ensuite, il faut que tu lui files des situations, et en sortie tu lui dis que tu attendais qu'il joue sur telle ou telle case.

    Un algorithme d'apprentissage fera le reste du travail !

    PS : la fonction sigmoïde devrait convenir.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je travaille depuis quelque heures sur un jeu de mopion contre un réseau de neurones.
    J'ai testé deux réseaux, un fourni par une bibliothèque Ada, PragmARC REM_NN_Wrapper, et dernièrement FAnn.

    pour obtenir un semblant de résultat, je met bien 9 neurones d'entrée, 9 neurones de sortie, et 9 ou 81 neurones de couche cachée.
    Pour les fonctions, j'utilise :
    Train_Data.Set_Training_Algorithm(Ann, FANN_TRAIN_INCREMENTAL);
    Train_Data.Set_Activation_Function_Output(Ann, FANN_SIGMOID_SYMMETRIC);
    Train_Data.Set_Activation_Function_HIDDEN(Ann, FANN_SIGMOID);

    Pour le fichier de donnée, je donne tous les coups à partir d'un plateau vides de manière à ce que chaque sortie soit une entrée, c'est à dire en dupliquant chaque ligne, sauf la première dont le double se trouve en fin de fichier.

    Le réseau semble apprendre mais pas de résultat à l'exploitation.

    Je me demande ce que je pourrait donner d'autre comme fichier de données.

    Mon fichier de donnée est donc constitué d'un suite de ligne double de 9 réel valant 0.0 pour les case vides, 1.0 pour le joueur 1 et -1.0 pour le joueur deux.

  4. #4
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Pour le fichier de données, je donne tous les coups à partir d'un plateau vides de manière à ce que chaque sortie soit une entrée, c'est à dire en dupliquant chaque ligne, sauf la première dont le double se trouve en fin de fichier.
    Je ne comprends pas, peux-tu réexpliquer stp ? Et en tout, cela te fait combien de données ? fichier de données = ensemble d'apprentissage, de test, de validation ?

    Sinon, en [ame="http://www.google.fr/search?sourceid=chrome&ie=UTF-8&q=tictactoe+neural+network"] Googlant "tictactoe neural network"[/ame], il y a pas mal de réponses, notamment :
    Fichiers attachés Fichiers attachés

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ca fait 4722492 ligne soit 2351456 exemple pour l'ensemble d'apprentissage.
    Ce qui représente tout les coup de toute les partie possible d'un jeu de morpion.

  6. #6
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Ce qui représente tout les coup de toute les partie possible d'un jeu de morpion.
    Pour l'apprentissage, ne faudrait-il pas lui faire apprendre seulement les "bons" coups ?

    (btw hésite pas à poster ton code de génération de tous les coups de toutes les parties possible d'un Tic Tac Toe sur http://www.developpez.net/forums/d11...outes-parties/ , cela peut toujours intéresser quelqu'un qui tombe sur le thrad)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse.
    Les bons coup ? Je comprends pas.

  8. #8
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Afin que le réseau de neurones apprenne à jouer correctement, ne faut-il pas lui faire apprendre un ensemble de couples (input : état du jeu ; output : bon coup) ? Pour définir un bon coup, tu pourrais prendre le coup issue de la stratégie http://en.wikipedia.org/wiki/Tic_tac_toe#Strategy par exemple :
    Citation Envoyé par http://en.wikipedia.org/wiki/Tic_tac_toe#Strategy
    1. Win: If the player has two in a row, play the third to get three in a row.
    2. Block: If the [opponent] has two in a row, play the third to block them.
    3. Fork: Create an opportunity where you can win in two ways.
    4. Block opponent's Fork:
    5. Option 1: Create two in a row to force the opponent into defending, as long as it doesn't result in them creating a fork or winning. For example, if "X" has a corner, "O" has the center, and "X" has the opposite corner as well, "O" must not play a corner in order to win. (Playing a corner in this scenario creates a fork for "X" to win.)
    6. Option 2: If there is a configuration where the opponent can fork, block that fork.
    7. Center: Play the center.
    8. Opposite corner: If the opponent is in the corner, play the opposite corner.
    9. Empty corner: Play in a corner square.
    10. Empty side: Play in a middle square on any of the 4 sides.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Afin que le réseau de neurones apprenne à jouer correctement, ne faut-il pas lui faire apprendre un ensemble de couples (input : état du jeu ; output : bon coup) ?
    Ben si, c'est ce qu'il me semble avoir fait.
    Je commence par un plateau vide.
    Je donne le coup suivant.
    Je donne le coup précédent
    Je donne le coup suivant.
    (ainsi de suite)


    (Désolé pour les liens en english, je capte pas. )

  10. #10
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Ben si, c'est ce qu'il me semble avoir fait.
    Je commence par un plateau vide.
    Je donne le coup suivant.
    Je donne le coup précédent
    Je donne le coup suivant.
    (ainsi de suite)
    Si tu donnes n'importe quel coup, comment le réseau peut-il apprendre à bien jouer (e.g. jouer des coups gagnants, ou au moins des coups qui ne sont pas perdants, étant donné qu'un jeu parfait conduit à un match nul) ?


    Citation Envoyé par jovalise Voir le message
    (Désolé pour les liens en english, je capte pas. )
    Utilise Gtranslate, ça marche bien à présent

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Si tu donnes n'importe quel coup, comment le réseau peut-il apprendre à bien jouer (e.g. jouer des coups gagnants, ou au moins des coups qui ne sont pas perdants, étant donné qu'un jeu parfait conduit à un match nul) ?
    A vrai dire, j'y ai pensé, j'ai également essayer de lui apprendre seulement les partie nulles et celle gagnées par le joueur 2.

    Pour être précis, je donne des couple de neuf réel 0.0 pour vide 1.0 pour le joueur 1 et -1.0 pour le joueur deux.
    Et je donne l'état du plateau complet à chaque coup.

  12. #12
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Personnellement, pour générer l'ensemble d'apprentissage, i.e. un ensemble de couples (input : état du jeu ; output : bon coup ), je génèrerais tous les états du jeu atteignables (en enlevant bien sûr les états terminaux, i.e. lorsqu'un joueur a déjà réussi à aligner 3 X ou O), puis calculerais le bon coup en suivant la stratégie http://en.wikipedia.org/wiki/Tic_tac_toe#Strategy par exemple :
    Citation Envoyé par http://en.wikipedia.org/wiki/Tic_tac_toe#Strategy
    1. Win: If the player has two in a row, play the third to get three in a row.
    2. Block: If the [opponent] has two in a row, play the third to block them.
    3. Fork: Create an opportunity where you can win in two ways.
    4. Block opponent's Fork:
    5. Option 1: Create two in a row to force the opponent into defending, as long as it doesn't result in them creating a fork or winning. For example, if "X" has a corner, "O" has the center, and "X" has the opposite corner as well, "O" must not play a corner in order to win. (Playing a corner in this scenario creates a fork for "X" to win.)
    6. Option 2: If there is a configuration where the opponent can fork, block that fork.
    7. Center: Play the center.
    8. Opposite corner: If the opponent is in the corner, play the opposite corner.
    9. Empty corner: Play in a corner square.
    10. Empty side: Play in a middle square on any of the 4 sides.
    Sinon, la PJ explique une autre méthode pour générer les données l'apprentissage (aucune idée à quel point elle efficace, je n'ai fait que survoler le fichier). En particulier, elle insiste sur l'utilité de repérer les situations symétriques.
    Fichiers attachés Fichiers attachés

  13. #13
    Invité
    Invité(e)
    Par défaut
    A partir du moment ou c'est toujours le joueur 1 qui commence, il me semble que toutes les partie à partir de là sont possible. Au réseau de faire sont travail.
    Si je commence à trier les coup pour sélectionner seulement les partie intéressante, il va me manquer un certain nombre de possibilité ou le réseau ne saura en aucun cas quoi jouer.

  14. #14
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Si je commence à trier les coup pour sélectionner seulement les partie intéressante, il va me manquer un certain nombre de possibilité ou le réseau ne saura en aucun cas quoi jouer.
    Euh, je proposais justement de générer tous les états du jeu atteignables. pourquoi manquerait-il des possibilités ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    A oui, mais non, j'ai tous les état.
    Je veux pas les générer, je les ai?.
    Maintenant, je veux les enseigner à un réseau de neurone pour jouer avec.

  16. #16
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Maintenant, je veux les enseigner à un réseau de neurone pour jouer avec.
    Pour cela, il faut un ensemble d'apprentissage (= training set).

    Citation Envoyé par http://en.wikipedia.org/wiki/Training_set
    In artificial intelligence or machine learning, a training set consists of an input vector and an answer vector, and is used together with a supervised learning method to train a knowledge database (e.g. a neural net or a naive bayes classifier) used by an AI machine.
    Dans ton cas, un ensemble d'apprentissage pourrait être un ensemble de couples (input : état du jeu ; output : bon coup).

    Je ne vois pas trop ce qui te bloque. Bon par contre rien ne dit que l'exemple d'ensemble d'apprentissage que je donne sera efficace.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Pour cela, il faut un ensemble d'apprentissage (= training set).
    Je l'ai, c'est la troisième fois que je le dis.
    Citation Envoyé par Franck Dernoncourt Voir le message

    Dans ton cas, un ensemble d'apprentissage pourrait être un ensemble de couples (input : état du jeu ; output : bon coup).

    Je ne vois pas trop ce qui te bloque. Bon par contre rien ne dit que l'exemple d'ensemble d'apprentissage que je donne sera efficace.
    T'as donné un exemple toi ... Ou ça.
    Façon, c'est pas le problème.
    J'ai l'exemple. Le réseau semble apprendre, mais il est nul pour jouer.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Bonjour,
    Je travaille depuis quelque heures sur un jeu de mopion contre un réseau de neurones.
    J'ai testé deux réseaux, un fourni par une bibliothèque Ada, PragmARC REM_NN_Wrapper, et dernièrement FAnn.

    pour obtenir un semblant de résultat, je met bien 9 neurones d'entrée, 9 neurones de sortie, et 9 ou 81 neurones de couche cachée.
    Pour les fonctions, j'utilise :
    Train_Data.Set_Training_Algorithm(Ann, FANN_TRAIN_INCREMENTAL);
    Train_Data.Set_Activation_Function_Output(Ann, FANN_SIGMOID_SYMMETRIC);
    Train_Data.Set_Activation_Function_HIDDEN(Ann, FANN_SIGMOID);

    Pour le fichier de donnée, je donne tous les coups à partir d'un plateau vides de manière à ce que chaque sortie soit une entrée, c'est à dire en dupliquant chaque ligne, sauf la première dont le double se trouve en fin de fichier.

    Le réseau semble apprendre mais pas de résultat à l'exploitation.

    Je me demande ce que je pourrait donner d'autre comme fichier de données.

    Mon fichier de donnée est donc constitué d'un suite de ligne double de 9 réel valant 0.0 pour les case vides, 1.0 pour le joueur 1 et -1.0 pour le joueur deux.
    Ca c'est la méthode que j'ai donné dix message plus haut.
    J'en ai essayé d'autre, plus ou moins rapide, mais rien n'y fais, il sais pas faire la différence entre le premier coup et un autre.

  19. #19
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Si le réseau semble apprendre, mais qu'il est nul pour jouer, cela ne veut-il par dire que l'ensemble d'apprentissage n'est pas bon ?
    J'ai l'impression qu'il y a quelque chose que je ne comprends pas

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Si le réseau semble apprendre, mais qu'il est nul pour jouer, cela ne veut-il par dire que l'ensemble d'apprentissage n'est pas bon ?
    J'ai l'impression qu'il y a quelque chose que je ne comprends pas
    Mon exemple est l'ensemble des coups de toute les partie en spécifiant l'état du jeu courant et l'état du jeu suivant.


    Peut-être qu'avec l'état courant et seulement le coup à jouer en output serait une solution.

    Je venais voir s'il y avais des paramètres de Fann connus pour entrainer un réseau, en admettant que mon exemple fut bon.

Discussions similaires

  1. Une réseau de neurones pour un agent de dialogue en langage naturel
    Par Invité dans le forum Méthodes prédictives
    Réponses: 23
    Dernier message: 19/10/2013, 23h49
  2. Réseau de neurones pour la commande
    Par liinna dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 10/11/2009, 14h58
  3. Réseau de neurones pour un OCR
    Par overlolo dans le forum Méthodes prédictives
    Réponses: 4
    Dernier message: 24/05/2009, 10h52
  4. Réseau de neurone pour prévision d'une série temporelle
    Par ranianwayra dans le forum Méthodes prédictives
    Réponses: 1
    Dernier message: 22/08/2008, 23h55
  5. Réseau de neurones pour la classification de signaux.
    Par jeanlouis_lecodeur dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 26/03/2008, 18h28

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