Strutture di dati per i giochi di logica / Regole di detrazione / Set di indizi sufficienti?


11

Ho cercato di sviluppare un gioco di logica simile a Puzzle di Einstein , che avrebbe diversi tipi di indizi per ogni nuovo replay di gioco.

Quali strutture di dati useresti per gestire le diverse entità (animali domestici, colori delle case, nazionalità, ecc.), Regole di detrazione, ecc. Per garantire che gli indizi forniti forniscano una soluzione unica?

Sto facendo fatica a pensare a come far giocare le regole di detrazione insieme ai possibili indizi; qualsiasi intuizione sarebbe apprezzata.


1
Non penso che sarebbe molto interessante suonare. Dopo averlo risolto una volta , farlo di nuovo con regole diverse non sarebbe molto diverso dal giocare a sudoku.
o0 '.

4
D'altra parte, le persone fanno centinaia di sudoku prima di annoiarsi con loro. E se leghi le risposte a una sorta di azione nel mondo piuttosto che semplicemente digitando un numero o un nome, la gente non si lamenterà nemmeno che è sudoku.

Questo mi ricorda questo gioco: nick.com/games/series.html
CeeJay

3
Suggerirei di dare un'occhiata ai giochi di Everett Kaser - ha realizzato tantissimi giochi di questo tipo, in particolare Sherlock che è stato ispirato da quel puzzle, ma anche alcuni altri giochi, come Honeycomb Hotel o il suo ultimo gioco , Signora Hudson . Potrebbe aiutarti a vedere questo genere di cose in azione.
Michael Madsen,

@Joe: quello che dici è tecnicamente giusto, ma la cosa importante qui è sapere cosa stai (sta facendo). Fare un gioco simile al sudoku va bene se sei consapevole di farlo, mentre quasi sicuramente porterà a risultati di merda se pensi di fare qualcos'altro.
o0 '.

Risposte:


4

Wow. Questa in realtà sembra una situazione in cui le reti semantiche di intelligenza artificiale della vecchia scuola, come pensava Richard Bartle, sarebbero state importanti per il futuro dei giochi quando avrebbe scritto Intelligenza artificiale e giochi per computer , sarebbe stato utile. Fondamentalmente hai un paio di elenchi di dati (tabelle di database, qualunque cosa), il primo dei quali specifica le regole su come le cose possono essere correlate tra loro, come:

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

Quindi hai istanze delle categorie:

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

Queste strutture di dati non incapsulano completamente la situazione: sono necessari i vincoli di unicità e alcune categorie hanno bisogno di meta-regole, come la POSITIONgestione di "a destra di", "a sinistra di" e "successivo ai "concetti, per esempio - ma la struttura del problema sembra suggerirli fortemente.

Non so se questo ti porterà molto lontano, ma spero che ti aiuti.


4

La mia raccomandazione è di esaminare il codice Python per i problemi di soddisfazione dei vincoli (CSP) forniti con il progetto AIMA . Usano un dizionario (array associativo / tabella hash) per tenere traccia dei vincoli validi. Inoltre, ci sono implementazioni di numerosi algoritmi utilizzati per risolvere i CSP, come i conflitti minimi e AC3.

Il codice include un esempio di problema Zebra come esempio, come quello a cui si è collegati.


1

Questo in realtà è molto profondo. Strano che Wikipedia non lo menzioni mai.

Quello che stai cercando sono prove molto dure che possono, probabilmente, essere raggiunte con cose come le prove Fitch . Quindi stiamo provando a dedurre le cose dai nostri dati dati. Ci sono molti costruttori a prova di Fitch che fanno molto lavoro per te. Ma alcuni esercizi non sono solo per provare.

Non so se l'utente dovrebbe fare i calcoli. In tal caso, prestare attenzione a cose come 3SAT , che sono problemi inevitabili per il tempo polinomiale.

Per quanto riguarda le strutture di dati che vuoi usare, penso che tu voglia avere un qualche tipo di Ruleclasse. La regola può essere qualsiasi, a seconda del tipo. Non ci sono molte regole nelle logiche predicate , quindi questo può essere superato ereditando (if, iff, e, o, no ...). Queste regole devono solo essere valutate. E l'unica cosa che una regola può fare è restituire vero o falso. Perché è quello che fai con le logiche predicate. All'università, mi è stato consigliato di leggere questo libro di John Kelly .

Tornando alle lezioni: dovresti vedere questi problemi come se dovessi vedere l'implementazione di calcoli normali con la matematica. Che cos'è un +operatore? Contiene due parametri, che può essere una nuova equazione da solo o solo un numero. Penso che tu abbia lo stesso con le Regole. Possono avere nuove regole come parametro o solo un valore booleano (cosiddetto predicato).

Spero che questo ti aiuti molto, specialmente i riferimenti. Se vuoi saperne di più o se sto andando nella direzione sbagliata, per favore dimmelo.


Il problema non è semplicemente la dimostrazione della logica predicata su un modello finito (e minuscolo!), Altrimenti avrei risposto invece di dare una taglia. L'obiettivo non è quello di risolvere il problema - l'obiettivo è quello automaticamente rendere il problema, e in un modo interessante.

@Joe Il problema, anche per un piccolo set, sarebbe comunque il problema 3SAT. Se crei solo AND e OR, questo potrebbe portare a cose che non sono soddisfacenti, quindi penso che sarebbe molto difficile generare un puzzle casuale. Il puzzle dovrebbe contenere almeno alcune restrizioni. A volte, il ragionamento all'indietro potrebbe essere la risposta (avere una soluzione, lasciare fuori le cose)
Marnix,

La logica del predicato generale è in realtà più difficile di 3SAT; tuttavia, gli algoritmi di prova moderni sono davvero abbastanza buoni nella pratica. A parte questo, semplicemente generare un modello, un puzzle e verificare una soluzione può essere fatto in tempo lineare - il trucco è assicurarsi che i vincoli forniti producano una soluzione unica e rilevabile.

@Joe quindi ci sono dei vincoli di cui possiamo essere certi per la creazione di questo puzzle? La domanda era ancora: quale struttura dati utilizzare. Quindi penso ancora che la Rulelezione sia una buona idea. Penso che modellare questi vincoli sia ancora fatto dalla logica del predicato.
Marnix,

0

Non ho una buona risposta, ma cercando suggerimenti sullo stesso tipo di problema, ho trovato questo repository su github:

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

Contiene alcune logiche per selezionare gli indizi e decidere quanti indizi avresti bisogno per rendere il puzzle risolvibile.


-1

C'è questo per risolverlo.

Certo, penso che non sarebbe troppo difficile lavorare all'indietro; che ha un elenco come questo:

  • Fred Red Dog

  • Steve Blue Cat

  • Bill Purple Whale

  • Eric Cyan Dolphin

Che potrebbe essere facilmente generato e quindi creare un insieme di regole da quello.

Per quanto riguarda l'archiviazione, perché non un insieme di ogni cosa separata, quindi [Fred, Steve, Bill, Eric] e un insieme di risposta [Fred, Red, Dog]. Quindi avere 'NAME fa (non) AZIONE OGGETTO'.

Quando ci si arriva, una soluzione unica conta davvero? Finché il gioco può dividerli negli elenchi e selezionare "il set 1 non contiene balena".


2
Il trucco è che vuoi che il problema sia ancora difficile. Se le regole che generi ammettono il 90% delle possibili combinazioni come risposte valide, non è più un puzzle interessante.

Immagino che sia un punto valido, ma la soluzione non è solo quella di ridurre il numero di indizi forniti?
Il comunista Duck il

1
No. La comprensione specifica ha maggiori probabilità di portare a molte conclusioni valide. È probabile che un'eccessiva specificazione porti a una conclusione molto ovvia. Un buon puzzle logico evita entrambi.

Ah sì, mi è mancato in qualche modo. Proverò ad aggiungere una soluzione migliore se riesco a pensarne una.
Il comunista Duck il

Joe: Esatto esattamente con il tuo primo commento. Un enigma che ti consente di confondere indizi volenti o nolenti non è tanto un puzzle quanto un progetto artistico per la scuola materna.
taseriano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.