¿Estructuras de datos para juegos de lógica / reglas de deducción / conjunto suficiente de pistas?


11

He estado reflexionando sobre el desarrollo de un juego de lógica similar al Einstein's Puzzle , que tendría diferentes conjuntos de pistas para cada nueva repetición del juego.

¿Qué estructuras de datos usaría para manejar las diferentes entidades (mascotas, colores de casas, nacionalidades, etc.), reglas de deducción, etc. para garantizar que las pistas que proporcione apunten a una solución única?

Me está costando mucho pensar cómo hacer que las reglas de deducción jueguen con las posibles pistas; Cualquier idea sería apreciada.


1
No creo que sea muy interesante jugar. Después de resolverlo una vez , hacerlo de nuevo con diferentes reglas no sería muy diferente de jugar sudoku.
o0 '.

44
Por otro lado, la gente hace cientos de sudoku antes de aburrirse con ellos. Y si vincula las respuestas a algún tipo de acción en el mundo en lugar de simplemente escribir un número o nombre, la gente ni siquiera se quejará de que es sudoku.

Esto me recuerda a este juego: nick.com/games/series.html
CeeJay

3
Sugeriría echar un vistazo a los juegos de Everett Kaser : ha hecho un montón de juegos de esta naturaleza, en particular Sherlock, que se inspiró en ese rompecabezas, pero también algunos de los otros juegos, como Honeycomb Hotel o su último juego. , la señora Hudson . Podría ayudarlo a ver este tipo de cosas en acción.
Michael Madsen

@ Joe: lo que dices es técnicamente correcto, pero lo importante aquí es saber lo que estás haciendo. Hacer un juego similar al sudoku está bien si eres consciente de que lo estás haciendo, mientras que casi con certeza te dará resultados de mierda si crees que estás haciendo otra cosa.
o0 '.

Respuestas:


4

Guau. Esto en realidad parece una situación en la que las redes semánticas de IA de la vieja escuela, como Richard Bartle pensó que serían importantes para el futuro de los juegos cuando escribiera Inteligencia artificial y juegos de computadora , serían útiles. Básicamente, tiene un par de listas de datos (tablas de bases de datos, lo que sea), la primera de las cuales especifica reglas sobre cómo las cosas pueden relacionarse entre sí, como:

a PERSON must LIVE IN a DOMICILE
a PERSON must OWN an ANIMAL
a PERSON must DRINK a BEVERAGE
a PERSON must SMOKE a CIGARETTE BRAND
a PERSON must BE OF a NATIONALITY
a DOMICILE must BE IN a POSITION
a DOMICILE must BE OF a COLOR

Entonces tienes instancias de las categorías:

ANIMAL: dog snail zebra fox horse
BEVERAGE: milk tea OJ coffee water
CIGARETTE BRAND: Kools Parliaments Luckies OldGold Chesterfields
NATIONALITY: Englishman Spaniard Ukrainian Japanese Norwegian
POSITION: first second third fourth fifth
COLOR: red green yellow ivory blue

Estas estructuras de datos no encapsulan completamente la situación: necesita las restricciones de unicidad, y algunas de las categorías necesitan meta-reglas, como el POSITIONmanejo de "a la derecha de", "a la izquierda de" y "siguiente a "conceptos, por ejemplo, pero la estructura del problema parece sugerirlos fuertemente.

No sé si esto te llevará muy lejos, pero espero que ayude.


4

Mi recomendación es mirar el código de Python para problemas de satisfacción de restricciones (CSP) que se proporciona con el proyecto AIMA . Utilizan un diccionario (matriz asociativa / tabla hash) para realizar un seguimiento de las restricciones válidas. Además, hay implementaciones de varios algoritmos utilizados para resolver CSP, como min-conflict y AC3.

El código incluye un ejemplo de problema de Zebra como ejemplo, como el que se vinculó.


1

Esto va muy profundo en realidad. Es extraño que Wikipedia nunca lo mencione.

Lo que está buscando son pruebas muy duras que, probablemente, se puedan alcanzar con cosas como las pruebas de Fitch . Así que estamos tratando de deducir cosas de nuestros datos dados. Hay muchos constructores a prueba de Fitch que hacen mucho trabajo por ti. Pero algunos ejercicios simplemente no son a prueba.

No sé si el usuario debe hacer los cálculos. Si es así, tenga en cuenta cosas como 3SAT , que son problemas que no se pueden deshacer para el tiempo polinómico.

En cuanto a las estructuras de datos que desea utilizar, creo que desea tener algún tipo de Ruleclase. La regla puede ser cualquier cosa, según el tipo. No hay muchas reglas en la lógica de predicados , por lo que esto se puede superar heredando (if, iff, and, or, not ...). Estas reglas solo tienen que ser evaluadas. Y lo único que puede hacer una regla es devolver verdadero o falso. Porque eso es lo que haces con la lógica de predicados. En la universidad, John Kelly me recomendó leer este libro .

Volviendo a las clases: debería ver estos problemas como vería la implementación de cálculos normales con las matemáticas. ¿Qué es un +operador? Contiene dos parámetros, que pueden ser una nueva ecuación por sí misma, o simplemente un número. Creo que tienes lo mismo con las reglas. Pueden tener nuevas Reglas como parámetro, o simplemente un booleano (llamado predicado).

Espero que esto te ayude mucho, especialmente las referencias. Si quieres saber más, o si voy en la dirección equivocada, dímelo.


El problema no es simplemente pruebas en la lógica de predicados sobre un modelo finito (¡y pequeño!), O habría respondido en lugar de ofrecer una recompensa. El objetivo no es resolver el problema - la meta es automáticamente hacer el problema, y de una manera interesante.

@ Joe El problema, incluso para un conjunto pequeño, seguiría siendo el problema 3SAT. Si solo crea AND y OR, esto podría llevar a cosas que no son satisfactorias, por lo que creo que sería muy difícil generar un rompecabezas aleatorio. El rompecabezas debe contener al menos algunas restricciones. A veces, al revés razonamiento podría ser la respuesta (tener una solución, dejar cosas de lado)
Marnix

La lógica general de predicados es en realidad más difícil que 3SAT; sin embargo, los algoritmos de prueba modernos son realmente bastante buenos en la práctica. Aparte de eso, simplemente generar un modelo, un rompecabezas y verificar una solución se puede hacer en tiempo lineal: el truco es asegurarse de que las restricciones proporcionadas produzcan una solución única y reconocible.

@ Joe, entonces, ¿hay alguna restricción de la que podamos estar seguros para crear este rompecabezas? La pregunta aún era: qué estructura de datos usar. Así que sigo pensando que la Ruleclase es una buena idea. El modelado de estas restricciones todavía se hace por lógica de predicados, creo.
Marnix

0

No tengo una buena respuesta, pero buscando pistas sobre el mismo tipo de problema, encontré este repositorio en github:

https://github.com/nateinaction/Zebra-Puzzle

Contiene algo de lógica para seleccionar pistas y decidir cuántas pistas necesitarías para resolver el rompecabezas.


-1

Hay esto en resolverlo.

Por supuesto, creo que no sería demasiado difícil trabajar hacia atrás; es decir, tener una lista como esta:

  • Fred Red Dog

  • Steve Blue Cat

  • Bill Ballena Púrpura

  • Eric Cyan Dolphin

Que podría generarse fácilmente y luego formar un conjunto de reglas a partir de eso.

En cuanto al almacenamiento, ¿por qué no un conjunto de cada cosa por separado, entonces [Fred, Steve, Bill, Eric] y un conjunto de la respuesta [Fred, Red, Dog]. Luego tenga 'NOMBRE (no) OBJETO DE ACCIÓN'.

Cuando te pones a ello, ¿realmente importa una solución única? Siempre que su juego pueda dividirlos en las listas, y marque 'el set 1 no contiene Whale'.


2
El truco es que quieres que el problema siga siendo difícil. Si las reglas que genera admiten el 90% de las combinaciones posibles como respuestas válidas, ya no es un rompecabezas interesante.

Supongo que es un punto válido, pero ¿no es la solución solo para reducir la cantidad de pistas dadas?
El pato comunista

1
No. La especificación inferior es más probable que conduzca a muchas conclusiones válidas. La sobreespecificación puede llevar a una conclusión muy obvia. Un buen rompecabezas lógico evita ambos.

Ah sí, me perdí eso de alguna manera. Intentaré agregar una mejor solución si puedo pensar en una.
El pato comunista

Joe: Exactamente correcto con tu primer comentario. Un rompecabezas que te permite juntar pistas, no es tanto un rompecabezas como un proyecto de arte de jardín de infantes.
Taserian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.