J'ai réfléchi au développement d'un jeu de logique similaire à Einstein's Puzzle , qui aurait différents ensembles d'indices pour chaque nouveau jeu.
Quelles structures de données utiliseriez-vous pour gérer les différentes entités (animaux domestiques, couleurs des maisons, nationalités, etc.), les règles de déduction, etc. pour garantir que les indices que vous fournissez indiquent une solution unique?
J'ai du mal à réfléchir à la façon de faire jouer les règles de déduction avec les indices possibles; toute perspicacité serait appréciée.
logic
data-structure
puzzle
taserian
la source
la source
Réponses:
Sensationnel. Cela semble en fait être une situation où les sites sémantiques de l'IA à l'ancienne, comme Richard Bartle pensait qu'ils allaient être importants pour l'avenir des jeux lorsqu'il écrivait l'intelligence artificielle et les jeux informatiques , seraient utiles. Vous avez essentiellement quelques listes de données (tables de base de données, peu importe), dont la première spécifie des règles sur la façon dont les choses peuvent être liées les unes aux autres, comme:
Ensuite, vous avez des instances des catégories:
Ces structures de données n'encapsulent pas complètement la situation - vous avez besoin des contraintes d'unicité, et certaines des catégories ont besoin de méta-règles, comme la
POSITION
gestion des besoins "à droite de", "à gauche de" et "suivant" aux "concepts, par exemple - mais la structure du problème semble les suggérer fortement.Je ne sais pas si cela vous mènera très loin, mais j'espère que cela vous aidera.
la source
Ma recommandation est de regarder le code Python pour les problèmes de satisfaction de contraintes (CSP) fourni avec le projet AIMA . Ils utilisent un dictionnaire (tableau associatif / table de hachage) pour garder une trace des contraintes valides. En outre, il existe des implémentations de plusieurs algorithmes utilisés pour résoudre les CSP, comme les min-conflits et AC3.
Le code inclut un exemple de problème Zebra comme exemple, comme celui auquel vous avez lié.
la source
Cela va très loin en fait. Étrange que Wikipedia ne le mentionne jamais.
Ce que vous cherchez, ce sont des épreuves très dures qui peuvent probablement être atteintes avec des choses comme les épreuves de Fitch . Nous essayons donc de déduire des choses de nos données données. Il existe de nombreux constructeurs à l'épreuve de Fitch qui font beaucoup de travail pour vous. Mais certains exercices ne sont tout simplement pas à prouver.
Je ne sais pas si l'utilisateur doit faire les calculs. Si c'est le cas, soyez conscient de choses comme 3SAT , qui sont des problèmes insolubles pour le temps polynomial.
Quant aux structures de données que vous souhaitez utiliser, je pense que vous voulez avoir une sorte de
Rule
classe. La règle peut être n'importe quoi, selon le type. Il n'y a pas beaucoup de règles dans les logiques de prédicat , donc cela peut être surmonté en héritant (if, iff, et, or, not ...). Ces règles doivent seulement être évaluées. Et la seule chose qu'une règle peut faire, c'est retourner vrai ou faux. Parce que c'est ce que vous faites avec les logiques de prédicat. À l'université, on m'a recommandé de lire ce livre de John Kelly .Revenons aux classes: vous devriez voir ces problèmes comme vous verriez implémenter des calculs normaux avec les mathématiques. Qu'est-ce qu'un
+
opérateur? Il contient deux paramètres, qui peuvent être une nouvelle équation en soi, ou juste un nombre. Je pense que vous avez la même chose avec les règles. Ils peuvent avoir de nouvelles règles comme paramètre, ou simplement un booléen (appelé prédicat).J'espère que cela vous aide beaucoup, surtout les références. Si vous voulez en savoir plus ou si je vais dans la mauvaise direction, dites-le moi.
la source
Rule
classe est une bonne idée. Je pense que la modélisation de ces contraintes se fait toujours par une logique de prédicat.Je n'ai pas de bonne réponse, mais à la recherche d'indices sur le même type de problème, j'ai trouvé ce référentiel sur github:
https://github.com/nateinaction/Zebra-Puzzle
Il contient une certaine logique pour sélectionner les indices et décider du nombre d'indices dont vous auriez besoin pour résoudre le puzzle.
la source
Il y a ceci pour le résoudre.
Bien sûr, je pense qu'il ne serait pas trop difficile de travailler en arrière; c'est avoir une liste comme celle-ci:
Fred Red Dog
Steve Blue Cat
Bill Purple Whale
Eric Cyan Dolphin
Qui pourrait être facilement généré, puis créer un ensemble de règles à partir de cela.
En ce qui concerne le stockage, pourquoi pas un ensemble de chaque chose distincte, donc [Fred, Steve, Bill, Eric] et un ensemble de réponses [Fred, Red, Dog]. Ensuite, indiquez «NAME does (not) ACTION OBJECT».
En fin de compte, une solution unique est-elle vraiment importante? Tant que votre jeu peut les diviser en listes, et cochez «l'ensemble 1 ne contient pas de baleine».
la source