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

Développement 2D, 3D et Jeux Discussion :

[Tutoriel morpion] comportement curieux de l'IA


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 260
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 260
    Points : 9 868
    Points
    9 868
    Billets dans le blog
    8
    Par défaut [Tutoriel morpion] comportement curieux de l'IA
    Bonjour tout le monde

    En cherchant des infos sur le MinMax et l'alpha beta je suis tombé sur ce tutoriel (très bien fait, et très intéressant ) :

    Un morpion en SDL

    En guise d'exercice et pour mieux visualiser ce que fait le programme, j'ai décidé de le retranscrire avec le langage que j'utilise, PureBasic.

    Jusqu'ici tout va bien, le programme tourne, et bien que PureBasic soit un langage procédural , j'ai réussi à reprendre le code original.

    Voici le résultat, l'archive contient les sources PureBasic et un exécutable pour tester sans PureBasic.

    http://herved25.free.fr/sources/morpion.zip

    Et j'arrive enfin à ma question, je constate un comportement curieux de l'IA, du moins il me semble curieux, mais peut-être est-ce normal ?

    Parfois alors que j'ai deux pions alignés, plutôt que de me contrer, l'IA joue une case qui non seulement ne me contre pas, mais ne la met pas dans une position gagnante. Par contre , dès qu'elle peut gagner, elle le fait très bien.

    Donc dans l'ensemble l'IA réagit assez bien, alors je reste perplexe !
    Ai-je fait une erreur quelque part ? Est-ce que le code original a le même comportement ?
    Autre point : il me semble que le niveau facile réagit mieux que le niveau difficile. Par exemple au début d'une partie , si je laisse la case centrale libre, au niveau facile l'IA va l'occuper dès le tour suivant, au niveau difficile non ! ça me parait curieux.

    J'ai beau comparer mon code avec l'original je ne vois pas de différence.
    Aussi je me demandais si quelqu'un ayant déjà bossé sur ce tutoriel pouvait me proposer une archive avec le code compilé que je puisse tester et comparer le programme écrit avec C++ et le mien ?
    Si le comportement est identique j'arrêterai de chercher un problème qui n'existe pas

    Ou si quelqu'un veut bien comparer le comportement de mon exécutable avec le sien et me dire si l'IA réagit de la même façon avec les deux programmes à la même configuration de jeu ? ça m'éviterait de m'arracher les cheveux pour rien !

    par avance merci.
    Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.

  2. #2
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par comtois Voir le message
    Parfois alors que j'ai deux pions alignés, plutôt que de me contrer, l'IA joue une case qui non seulement ne me contre pas, mais ne la met pas dans une position gagnante. Par contre , dès qu'elle peut gagner, elle le fait très bien.
    Je n'ai pas regardé le code donc ce n'est qu'une théorie, mais ça pourrait être "normal". Si elle a considéré toutes les évolutions possibles, elle a pu conclure qu'elle avait de toute façon perdu, et que donc tous les coups se valent, et jouer le premier qui se présente.

    Citation Envoyé par comtois Voir le message
    Autre point : il me semble que le niveau facile réagit mieux que le niveau difficile. Par exemple au début d'une partie , si je laisse la case centrale libre, au niveau facile l'IA va l'occuper dès le tour suivant, au niveau difficile non ! ça me parait curieux.
    Il est possible que l'IA soit trop évoluée pour son propre bien : Si les deux joueurs jouent correctement, toute partie est nulle donc tous les coups qui ne mènent pas à la défaite sont équivalents. C'est beau une IA nihiliste
    Il est aussi possible que jouer au centre à long terme (ce qui est très relatif à ce jeu) ne soit pas si terrible que ça.

    Par opposition, l'IA facile qui anticipe peu va certainement se baser sur ses heuristiques qui la poussent à viser le centre parce que "le centre c'est bien", ou "ça permet d'aligner deux pions plus vite".

  3. #3
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 260
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 260
    Points : 9 868
    Points
    9 868
    Billets dans le blog
    8
    Par défaut
    Merci pour ta réponse.

    J'ai passé un petite moment avant de trouver mon erreur. Je viens tout juste de corriger mon code et de mettre à jour l'archive (toujours le même lien). Ouf, cette fois ci l'IA se comporte bien.

    J'avais fait une erreur de pointeur dans la procédure qui vérifie la fin d'une partie. L'erreur était dans le test d'une diagonale, le reste était bon. D'où le comportement curieux de l'IA, si on pouvait finir la partie sans passer par cette diagonale, ça fonctionnait normalement

    Finalement ce bug m'aura permis d'approfondir ma connaissance de cet algo. Maintenant je comprends parfaitement son fonctionnement, encore un bravo à l'auteur du tutoriel, son code est parfaitement clair et lisible même pour quelqu'un qui comme moi ne connait pas le C++.
    Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TOMCAT5.5] Comportement curieux de la mémoire
    Par tnodev dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 02/11/2007, 12h26
  2. [JScrollBar] comportement curieux
    Par rems033 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/10/2007, 11h06
  3. [Cookies] Mes cookies ont un comportement curieux
    Par Jinx_ dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 17h11
  4. [Rewrite .htaccess] Comportement curieux aussi
    Par Bensor dans le forum Apache
    Réponses: 2
    Dernier message: 23/12/2006, 14h22
  5. comportement curieux font-bold sous ffx ?
    Par SpaceFrog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 22/06/2006, 12h51

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