Un algorithme pour produire des puzzles 'Lady or Tiger'?

8

Quel est mon problème:

Il y a un puzzle de Raymond Smullyan qui fonctionne comme ceci: vous êtes dans une pièce avec de nombreuses portes. Derrière certaines de ces portes, il y a des femmes; derrière les autres, il y a des tigres. Votre objectif est de choisir l'une des bonnes portes (celles avec les dames). Sur chaque porte, il y a un panneau qui dit quelque chose comme Il y a une dame derrière cette porte ou Il y a un lion derrière la porte II et VI et ainsi de suite. Maintenant, vous avez également des informations supplémentaires comme Un seul des panneaux dit la vérité ou Le panneau sur une porte n'est vrai que s'il y a une dame derrière cette porte et ainsi de suite. Par exemple, le premier puzzle se présente comme suit:

Il y a deux portes avec un panneau chacune. L'un des signes est vrai, l'autre est faux:

 ---------------------    ---------------------
|      DOOR I         |  |      DOOR II        |
| There's a lady in   |  | In one of those     |
| this room and a     |  | rooms, there's a    |
| a tiger in the      |  | lady, in the other  |
| other one           |  | one there's a tiger |
 ---------------------    ---------------------

Derrière quelle porte se trouve une dame?

Passons maintenant au sujet de cette question: je cherche des moyens possibles de générer automatiquement de tels puzzles. Le but (loin) est de construire un algorithme qui nécessite, comme paramètres, le nombre de portes (et peut-être la difficulté du puzzle résultant) et crée des textes correspondants pour les portes.

Ce que j'ai essayé jusqu'à présent:

Pas grand chose, car je ne sais pas trop par où commencer. Il est facile de créer un motif pour le texte sur les signes et il est également facile d'attribuer au hasard des déclarations vraies et fausses à ces signes, correspondant à la règle vraie-fausse que vous utilisez (par exemple, un seul signe dit la vérité ). Mais c'est la partie où cela devient délicat: comment créer un puzzle qui est résoluble et a une solution unique ? Ma première idée a été de créer un puzzle aléatoire et d'utiliser le retour arrière pour rechercher des solutions. Mais de cette façon, cela pourrait prendre très longtemps jusqu'à ce que l'algorithme ait finalement trouvé un ensemble de signes fonctionnel. De plus, de cette façon, vous ne pouvez pas facilement déterminer la difficulté d'un puzzle donné.

Donc, pour résumer: avez-vous une idée, des liens utiles, etc.? Toute aide est appréciée, je ne m'attends pas à ce que quelqu'un poste une solution parfaite et complète à mon problème.

(Remarque: j'ai initialement posé la question suivante sur stackoverflow mais on m'a dit que je serais plus susceptible d'obtenir une réponse ici!)

jauge
la source
Vous pourriez trouver aaai.org/Papers/AAAI/2007/AAAI07-361.pdf utile.
Adam
1
En fait, je pense que vous pouvez obtenir de meilleures réponses à la SE mathématique. Je dirais que c'est une variante du problème SAT, qui est naïvement O (2 ^ n), ce qui signifie que la solution d'un problème peut être prouvée unique via la force brute à des portes de 20 pouces très rapidement. Je dirais que la difficulté est directement liée à la longueur de l'expression et je créerais des expressions de manière semi-aléatoire avec des modèles de contraintes prédéfinis.
Panda Pyjama
Vous pouvez être intéressé par cette question aussi bien
Panda Pyjama

Réponses:

1

La génération de texte est un problème distinct, mais pour un petit nombre de portes, vous pourriez peut-être utiliser une carte de Karnaugh. Choisissez une cellule aléatoire qui sera vraie, toutes les autres seront fausses, puis utilisez un algorithme approprié pour trouver l'expression booléenne la plus efficace qui correspond à cette carte, par exemple

http://www.codeproject.com/Articles/37031/Karnaugh-Map-Minimizer-3-Variables

David Cummins
la source
Cela trouvera un casse-tête avec une solution valide, mais je ne peux pas garantir qu'il aura une solution unique ... Ou peut-il?
Panda Pyjama
En définissant chaque cellule sur zéro, vous garantissez qu'il n'y aura pas d'autre solution, je crois.
David Cummins