2011-04-20 4 views
4

Je veux représenter le jeu connect6 wiki (peut-être la pierre de prédicat (P, X, Y), où P est un joueur, X, Y sont des coords par bien). Aussi je veux utiliser n'importe quelle bonne heuristique pour résoudre le problème (pour faire l'adversaire). Pouvez-vous me donner un indice sur n'importe quel article sur le jeu AI dans Prolog? MerciReprésentation et heuristique du jeu Connect6 dans Prolog

+2

Oui, c'est. Mais je ne veux pas copier-coller du code. Je veux juste trouver la meilleure solution. –

Répondre

2

Vous voulez probablement rechercher http://en.wikipedia.org/wiki/Minimax arbres de jeu. Pour optimiser la recherche, vous ne voulez probablement pas considérer tous les mouvements possibles. Peut-être juste des mouvements qui sont en ligne avec une pièce existante et 6 espaces ou moins de celle-ci. Vous avez besoin d'un http://en.wikipedia.org/wiki/Evaluation_function. Probablement quelque chose comme l'attribution d'un score à "à quel point suis-je à compléter une ligne" dans l'ensemble des lignes en cours.

Construire et optimiser un arbre de jeu est plus un processus mécanique. Créer une fonction d'évaluation est la partie amusante qui donnera à votre adversaire IA sa saveur unique.

Recherche google pour tournée « Prolog arbre jeu Minimax » une belle powerpoint: http://staff.science.uva.nl/~arnoud/education/ZSB/2009/

+0

Merci! Ce message était très utile. –

2

Si vous implémentez Connect6 sur une planche finie, puis une représentation possible pour ce jeu serait une liste de listes de variables, initialement non consolidées. Vous "placez une pierre" en unifiant une variable avec l'un des atomes black ou white. Vous pouvez ensuite tester si une position P est encore vide avec var(P). Cette représentation devrait être beaucoup plus rapide à manipuler qu'une liste de stone/3 termes. Cela fonctionne parce que dans Connect6, vous ne pouvez jamais enlever une pierre.

Je suppose que par heuristique vous voulez dire une fonction d'évaluation appropriée à la recherche minimax, negamax ou alpha-bêta. Considérant les règles du jeu, je suggère que pour chaque joueur, vous comptez le nombre de rangées de longueur 5 et marquez-les 5, notez celles de longueur 4 4, etc. Cela vous donne deux scores S et S . Soustraire S de S donne l'avantage relatif pour le joueur 1. Puis trouver un moyen de normaliser ceux-ci dans la gamme [-1,1] ou marquer une situation où le jeu est sur l'infini de moins l'infini. (Comment représenter tout ce qui dans Prolog est laissé comme un exercice.)

+0

var (P) est un bon point. Merci! –