Thuật toán để tạo ra các câu đố 'Lady hoặc Tiger'?


8

Vấn đề của tôi là:

Có một câu đố của Raymond Smullyan có tác dụng như thế này: Bạn đang ở trong một căn phòng có nhiều cửa. Đằng sau một số cánh cửa đó, có những người phụ nữ; Đằng sau những người khác, có những con hổ. Mục tiêu của bạn là chọn một trong những cánh cửa phù hợp (những cánh cửa với phụ nữ). Trên mỗi cánh cửa, có một dấu hiệu cho biết một cái gì đó như Có một phụ nữ đằng sau cánh cửa này hoặc Có một con sư tử đằng sau cánh cửa II và VI , v.v. Bây giờ, bạn cũng có một số thông tin bổ sung như Chỉ một trong những dấu hiệu cho biết sự thật hoặc Dấu hiệu trên một cánh cửa chỉ đúng nếu có một phụ nữ đằng sau cánh cửa đó và cứ thế. Ví dụ, câu đố đầu tiên diễn ra như sau:

Có hai cửa với một dấu hiệu mỗi. Một trong những dấu hiệu là đúng, một dấu hiệu khác là sai:

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

Đằng sau cánh cửa nào là một quý cô?

Bây giờ, đi đến chủ đề của câu hỏi này: Tôi đang tìm cách có thể để tự động tạo ra các câu đố như vậy. Mục tiêu (ở xa) là xây dựng một thuật toán yêu cầu, như các tham số, số lượng cửa (và có thể là độ khó của câu đố kết quả) và tạo ra các văn bản tương ứng cho các cửa.

Những gì tôi đã cố gắng cho đến nay:

Không nhiều lắm, vì tôi không thực sự biết bắt đầu từ đâu. Thật dễ dàng để tạo một mẫu cho văn bản trên các dấu hiệu và cũng dễ dàng gán ngẫu nhiên các tuyên bố đúng và sai cho các dấu hiệu đó, tương ứng với quy tắc đúng-sai mà bạn sử dụng (ví dụ: Chỉ một dấu hiệu cho biết sự thật ). Nhưng đó là phần khó hiểu: Làm thế nào để tạo ra một câu đố có thể giải được và có một giải pháp độc đáo ? Ý tưởng đầu tiên của tôi là tạo ra một câu đố ngẫu nhiên và sử dụng quay lui để tìm kiếm giải pháp. Nhưng theo cách đó, có thể mất rất nhiều thời gian cho đến khi thuật toán cuối cùng đã tìm thấy một bộ dấu hiệu hoạt động. Ngoài ra, theo cách đó bạn không thể dễ dàng xác định mức độ khó của một câu đố nhất định.

Vì vậy, tóm tắt nó: Bạn có bất kỳ ý tưởng, bất kỳ liên kết hữu ích, vv? Bất kỳ trợ giúp đều được đánh giá cao, tôi không mong đợi bất cứ ai đăng một giải pháp hoàn hảo và đầy đủ cho vấn đề của tôi.

(Lưu ý: Ban đầu tôi đã hỏi câu hỏi sau đây về stackoverflow nhưng được cho biết rằng tôi sẽ có nhiều khả năng nhận được câu trả lời ở đây!)


Bạn có thể thấy aaai.org/Papers/AAAI/2007/AAAI07-361.pdf hữu ích.
Adam

1
Trong thực tế, tôi nghĩ rằng bạn có thể nhận được câu trả lời tốt hơn tại SE toán học. Tôi có thể nói rằng đây là một biến thể của vấn đề SAT, một cách ngây thơ O (2 ^ n), điều đó có nghĩa là giải pháp của một vấn đề có thể được chứng minh là duy nhất thông qua lực lượng vũ phu đối với cửa 20-ish rất nhanh. Tôi muốn nói rằng khó khăn được liên kết trực tiếp với độ dài của biểu thức và tôi sẽ tạo các biểu thức bán ngẫu nhiên với các mẫu ràng buộc được xác định trước.
Panda Pajama

Bạn có thể quan tâm trong câu hỏi này cũng
Panda Pajama

Câu trả lời:


1

Tạo văn bản là một vấn đề riêng biệt, nhưng đối với một số ít cửa có lẽ bạn có thể sử dụng bản đồ Karnaugh. Chọn một ô ngẫu nhiên sẽ đúng, tất cả các ô khác sẽ sai, sau đó sử dụng thuật toán thích hợp để tìm biểu thức boolean hiệu quả nhất phù hợp với bản đồ đó, ví dụ:

http://www.codeproject.com/Articles/37031/Karnaugh-Map-Minimizer-3- Biến


Điều đó sẽ tìm ra một câu đố với một giải pháp hợp lệ, nhưng tôi nghĩ không thể đảm bảo nó sẽ có một giải pháp duy nhất ... Hay là nó?
Panda Pajama

Bằng cách đặt mọi ô khác là 0, bạn đảm bảo sẽ không có giải pháp nào khác tôi tin.
David Cummins
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.