Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction d’évaluation d'une grille de morpion

Grille n*n avec 5 symboles pour alignement

    25 octobre 2010 à 15:04:00

    Bonjour,
    Je suis entrain de réaliser un jeu du morpion avec les règles de jeu suivant :
    -Grille à hauteur et largeur choisit à l’exécution.
    -Pour marquer un point il faut faire une séquence de 5 symboles identique.
    -Si on fait une séquence on à le droit de rejouer.
    -La partie se termine une fois la grille remplit.

    j'ai mit en place l'algorithme AlphaBeta mais mon problème réside dans la fonction évaluation je ne sais pas comment faire pour bien évaluer la situation de la grille à un instant t. Il faudrait que cette fonction prenne en compte que l'on favorise l'attaque.
    Autre exemple y faudrait que l'IA arrête de tenter un alignement si il ne reste que 2 cases et qu'au maximum elle peut aligner 4 symboles... :-°

    Voila si vous avez des idées pour m'aider a construire ma fonction d’évaluation ?
    Merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2010 à 19:56:01

      Plop,

      A mes yeux, le plus optimisé pour ta méthode d'évaluation serait de connaitre le dernier coup joué et de vérifier si :
      • - Il y a un alignement de 5 pions possibles pour l'IA (+1 point et rejouer)
      • - Il va y avoir un alignement de 5 pions possibles pour le joueur
      • - La grille est pleine (Arrêt de la partie)


      Sinon tu peux faire cela à la barbare avec deux boucles for imbriquées :D (je présume que tu utilises un tableau bidimensionnel comme plateau)
      • Partager sur Facebook
      • Partager sur Twitter
        25 octobre 2010 à 23:40:46

        Seulement ayant une grille à dimensions variables, imaginons une grille de 20 sur 20, pour connaitre le dernier coup il faut mettre une sacré profondeur à l'algorithme AlphaBeta et déjà qu'avec une profondeur de seulement 5 l'algo mais plus de 20s à faire sont choix. Autrement dit ce n'est pas envisageable. J'utilise effectivement deux boucles for dans l'algo pour jouer toutes les cases possible et avec une profondeur donné.
        J'aimerais une fois la profondeur terminé pouvoir évaluer la grille pour pouvoir faire bien marcher le MinMax.
        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2010 à 10:31:17

          Tu peux faire une fonction qui parcours toute la grille et qui compte :
          - 1 point par pion isolé
          - 3 points par alignement de 2 pions
          - 12 points par alignement de 3 pions
          - 60 points par alignement de 4 pions
          - 500 points par alignement de 5 pions
          A compter en positif ou en négatif selon que c'est pour l'IA ou pour toi.

          Sur une grille de puissance 4, ce genre d'algo marche assez bien... mais c'est aussi parce que pour une profondeur de n, on n'a au plus 7^n possibilités. C'est clair que pour une grille de w*h, au xième coup on a (w*h-x)! / (w*h-x-n)! possibilités à essayer, ce qui est forcément beaucoup plus.
          • Partager sur Facebook
          • Partager sur Twitter
            26 octobre 2010 à 18:42:14

            Ok, jvais tenter ça et je te dit après si mon IA joue correctement. Parce que là j'ai tenter un truc mais l'IA joue n'importe comment^^.
            • Partager sur Facebook
            • Partager sur Twitter
              26 octobre 2010 à 21:06:39

              Une amélioration que tu peux faire ensuite, c'est augmenter la profondeur à mesure que la partie avance. C'est un comportement qui me semble assez réaliste en plus.

              Si ta grille est de 20x20, une profondeur de 5 en début de partie c'est sûr que ça va faire ramer ton ordi: ça représente 3.94E+15 possibilités ! Il faut commencer avec une profondeur de 3, ou 4 grand maximum, pour assurer un coup en maximum quelques secondes. Par contre vers la fin de la partie, c'est clair qu'un humain peut faire des suppositions plus loin que 3 coups, donc si tu n'augmentes pas la profondeur, l'IA fera probablement des débuts acceptables mais des fins de parties complètement minables.
              • Partager sur Facebook
              • Partager sur Twitter
                26 octobre 2010 à 21:21:21

                oui bonne idée merci.
                Par contre ta proposition précédente y faut que je prenne en compte que après 5 pions il faut vérifier que l'on puisse faire encore un alignement derrière et pas continuer comme un abrutit et aligner les pions ^^
                Vérifier aussi qu'il n'y est pas d'intersection entre les alignements.
                • Partager sur Facebook
                • Partager sur Twitter
                  26 octobre 2010 à 21:55:54

                  Si tu t'arranges pour qu'un alignement de 6 pions ou plus ne vale pas plus qu'un alignement de 5 pions, alors ça sera automatique. L'ordinateur préfèrera poser où il peut gagner des points supplémentaires.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Fonction d’évaluation d'une grille de morpion

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown