Algoritma untuk menghasilkan puzzle 'Nyonya atau Harimau'?

8

Apa masalah saya adalah:

Ada teka-teki dari Raymond Smullyan yang berfungsi seperti ini: Anda berada di ruangan dengan banyak pintu. Di balik beberapa pintu itu, ada wanita; di belakang yang lain, ada harimau. Tujuan Anda adalah untuk memilih salah satu pintu yang tepat (yang dengan wanita). Di setiap pintu, ada tanda yang mengatakan sesuatu seperti Ada wanita di balik pintu ini atau Ada singa di belakang pintu II dan VI dan seterusnya. Sekarang, Anda juga memiliki beberapa informasi tambahan seperti Hanya satu dari tanda-tanda yang mengatakan kebenaran atau Tanda di pintu itu benar hanya jika ada seorang wanita di balik pintu itu dan seterusnya. Misalnya, teka-teki pertama seperti ini:

Ada dua pintu dengan satu tanda masing-masing. Salah satu tanda itu benar, yang lain salah:

 ---------------------    ---------------------
|      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 |
 ---------------------    ---------------------

Di balik pintu mana seorang wanita?

Sekarang, sampai ke topik pertanyaan ini: Saya sedang mencari cara yang memungkinkan untuk secara otomatis menghasilkan teka-teki tersebut. Tujuan (jauh) adalah untuk membangun algoritma yang membutuhkan, sebagai parameter, jumlah pintu (dan mungkin kesulitan dari teka-teki yang dihasilkan) dan membuat teks yang sesuai untuk pintu.

Apa yang saya coba sejauh ini:

Tidak banyak, karena saya tidak tahu harus mulai dari mana. Sangat mudah untuk membuat pola untuk teks pada tanda-tanda dan juga mudah untuk secara acak menetapkan pernyataan benar dan salah untuk tanda-tanda itu, sesuai dengan aturan benar-salah yang Anda gunakan (mis. Hanya satu tanda yang mengatakan kebenaran ). Tapi itu bagian yang sulit: Bagaimana membuat puzzle yang bisa dipecahkan dan memiliki solusi yang unik ? Ide pertama saya adalah membuat puzzle acak dan menggunakan backtracking untuk mencari solusi. Tetapi dengan cara itu, bisa memakan waktu sangat lama sampai akhirnya algoritma menemukan set tanda yang berfungsi. Selain itu, dengan begitu Anda tidak dapat dengan mudah menentukan seberapa sulit teka-teki yang diberikan.

Jadi, simpulkan: Apakah Anda punya ide, tautan yang membantu, dll.? Setiap bantuan sangat dihargai, saya tidak mengharapkan siapa pun untuk memposting solusi yang sempurna dan lengkap untuk masalah saya.

(Catatan: Saya awalnya mengajukan pertanyaan berikut tentang stackoverflow tetapi diberitahu di sana bahwa saya akan lebih mungkin mendapatkan jawaban di sini!)

sangat besar
sumber
Anda mungkin menemukan aaai.org/Papers/AAAI/2007/AAAI07-361.pdf bermanfaat.
Adam
1
Bahkan, saya pikir Anda mungkin mendapatkan jawaban yang lebih baik di SE matematika. Saya akan mengatakan bahwa ini adalah varian dari masalah SAT, yang secara naif O (2 ^ n), yang berarti bahwa solusi dari suatu masalah dapat dibuktikan unik melalui brute force ke pintu 20-ish dengan sangat cepat. Saya akan mengatakan kesulitan terkait langsung dengan panjang ekspresi, dan saya akan membuat ekspresi semi-acak dengan pola kendala yang telah ditentukan.
Panda Pyajama
Anda mungkin tertarik pada pertanyaan ini juga
Panda Pajama

Jawaban:

1

Pembuatan teks adalah masalah terpisah, tetapi untuk sejumlah kecil pintu mungkin Anda bisa menggunakan peta Karnaugh. Pilih sel acak yang akan benar, semua yang lain akan salah, lalu gunakan algoritma yang sesuai untuk menemukan ekspresi boolean paling efisien yang cocok dengan peta itu, misalnya

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

David Cummins
sumber
Itu akan menemukan teka-teki dengan solusi yang valid, tetapi saya pikir tidak dapat menjamin itu akan memiliki solusi yang unik ... Atau bisakah itu?
Panda Pajama
Dengan menetapkan setiap sel lainnya sebagai nol, Anda menjamin tidak akan ada solusi lain yang saya yakini.
David Cummins