2012-07-06 5 views
8

J'ai besoin de mettre en œuvre un solveur Démineur. J'ai commencé à mettre en œuvre un agent basé sur des règles. J'ai mis en place certaines règles. J'ai une fonction heuristique pour choisir la meilleure règle de correspondance pour la cellule actuelle (avec des informations sur les cellules environnantes) en cours de traitement. Ainsi, pour chaque cellule choisie, elle peut décider que 8 cellules environnantes les ouvrent, les marquent ou ne font rien. Je veux dire. pour l'instant, l'agent obtient comme entrée une cellule révélée et décide quoi faire avec les cellules environnantes (pour l'instant, l'agent ne sait pas, comment décider quelle cellule traiter).Projet de dragueur de mines AI

Ma question est, quel algorithme mettre en œuvre pour décider quelle cellule à traiter? Supposons que, pour le premier mouvement, l'agent révèle une cellule d'angle (ou une autre, selon une règle pour le premier mouvement). Que faire après ça? Je comprends que j'ai besoin de mettre en œuvre une sorte de recherche. Je connais beaucoup d'algorithmes de recherche (BFS, DFS, A-STAR et autres), ce n'est pas le problème, je ne comprends tout simplement pas comment je peux utiliser ces recherches.

Je dois le mettre en œuvre dans un des principes de l'intelligence artificielle: Une approche moderne.

Répondre

8

BFS, DFS et A * ne sont probablement pas appropriés ici. Ces algorithmes sont bons si vous essayez de planifier un plan d'action lorsque vous avez une connaissance complète du monde. Dans Minesweeper, vous n'avez pas cette connaissance. Au lieu de cela, je suggère d'essayer d'utiliser certaines des techniques d'inférence logique de la section III du livre, en particulier en utilisant SAT ou les techniques du chapitre 10. Cela vous permettra de tirer des conclusions sur l'utilisation de faits tels que " l'un des huit carrés suivants est une mine, et exactement deux des huit carrés suivants sont une mine. " Faire cela à chaque étape vous aidera à identifier où sont les mines, ou réaliser que vous devez deviner avant de continuer.

Espérons que cela aide!

+0

J'ai implémenté certaines de ces techniques dans les règles, j'ai implémenté certaine méthode: treatCell (i_CellToTreat), elle correspond à la meilleure règle et l'exécute. Je ne sais tout simplement pas dans quel ordre traiter les cellules révélées, et lequel d'entre elles doit choisir de traiter, pour le moment il ne fait qu'illiter tout au long de la collection de cellules révélées et les traite. Cela fonctionne plutôt bien sur une petite carte, mais j'ai besoin de mettre en place un meilleur algorithme. – Nikita

Questions connexes