Cấu trúc dữ liệu cho các trò chơi logic / Quy tắc khấu trừ / Tập hợp đầy đủ các đầu mối?


11

Tôi đã hợp tác về việc phát triển một trò chơi logic tương tự như Puzzle của Einstein, trò chơi sẽ có các manh mối khác nhau cho mỗi lần chơi lại trò chơi mới.

Những cấu trúc dữ liệu nào bạn sẽ sử dụng để xử lý các thực thể khác nhau (vật nuôi, màu sắc của ngôi nhà, quốc tịch, v.v.), quy tắc khấu trừ, v.v. để đảm bảo rằng manh mối bạn cung cấp chỉ ra một giải pháp duy nhất?

Tôi đang có một thời gian khó khăn để suy nghĩ làm thế nào để có được các quy tắc khấu trừ để chơi cùng với các manh mối có thể; Bất kỳ cái nhìn sâu sắc sẽ được đánh giá cao.


1
Tôi không nghĩ nó sẽ rất thú vị khi chơi. Sau khi bạn giải quyết nó một lần , thực hiện lại với các quy tắc khác nhau sẽ không khác nhiều so với chơi sudoku.
o0 '.

4
Mặt khác, mọi người làm hàng trăm sudoku trước khi chán chúng. Và nếu bạn buộc các câu trả lời vào một loại hành động nào đó trong thế giới thay vì chỉ gõ một số hoặc tên, mọi người thậm chí sẽ không phàn nàn đó là sudoku.

Điều này làm tôi nhớ đến trò chơi này: nick.com/games/series.html
CeeJay

3
Tôi sẽ đề nghị tham gia một cái nhìn tại Everett Kaser trò chơi 's - ông đã thực hiện một tấn của các trò chơi có tính chất này, đặc biệt là Sherlock được lấy cảm hứng từ đó câu đố rất, nhưng cũng có một số trong những trò chơi khác, như Honeycomb sạn hoặc trò chơi mới nhất của mình , Bà Hudson . Nó có thể giúp bạn thấy loại hành động này.
Michael Madsen

@Joe: những gì bạn nói là đúng về mặt kỹ thuật, nhưng điều quan trọng ở đây là phải biết bạn (anh ấy) đang làm gì. Làm một trò chơi giống như sudoku là tốt nếu bạn biết bạn đang làm điều đó, trong khi nó gần như chắc chắn sẽ dẫn đến kết quả tào lao nếu bạn nghĩ rằng bạn đang làm một việc khác.
o0 '.

Câu trả lời:


4

Ồ Đây thực sự có vẻ giống như một tình huống mà các web ngữ nghĩa AI trường học cũ, như Richard Bartle nghĩ sẽ rất quan trọng đối với tương lai của các trò chơi khi ông viết Trí tuệ nhân tạo và Trò chơi máy tính , sẽ hữu ích. Về cơ bản, bạn có một vài danh sách dữ liệu (bảng cơ sở dữ liệu, bất cứ thứ gì), trong đó đầu tiên chỉ định các quy tắc về cách mọi thứ có thể liên quan đến nhau, như:

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

Sau đó, bạn có thể hiện của các thể loại:

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

Các cấu trúc dữ liệu này không hoàn toàn gói gọn tình huống - bạn cần các ràng buộc về tính duy nhất và một số danh mục cần các quy tắc meta, như POSITION cần xử lý "bên phải", "bên trái" và "tiếp theo ví dụ như "các khái niệm - nhưng cấu trúc của vấn đề dường như đề xuất mạnh mẽ cho chúng.

Dunno nếu điều này sẽ đưa bạn đi rất xa, nhưng tôi hy vọng nó sẽ giúp.


4

Đề nghị của tôi là xem xét mã Python về các vấn đề thỏa mãn ràng buộc (CSP) được cung cấp với dự án AIMA . Họ sử dụng một Từ điển (mảng kết hợp / bảng băm) để theo dõi các ràng buộc hợp lệ. Ngoài ra, có các triển khai của một số thuật toán được sử dụng để giải quyết các CSP, như xung đột tối thiểu và AC3.

Mã này bao gồm một vấn đề Zebra mẫu làm ví dụ, giống như vấn đề bạn liên kết đến.


1

Điều này thực sự đi rất sâu. Kỳ lạ là Wikipedia không bao giờ đề cập đến nó.

Những gì bạn đang tìm kiếm là bằng chứng rất khó mà có thể, có thể, đạt được với những thứ như bằng chứng Fitch . Vì vậy, chúng tôi đang cố gắng để khấu trừ những thứ ra khỏi dữ liệu nhất định của chúng tôi. Có rất nhiều người xây dựng bằng chứng Fitch làm rất nhiều việc cho bạn. Nhưng một số bài tập chỉ là không để chứng minh.

Tôi không biết người dùng có nên thực hiện các phép tính hay không. Nếu vậy, hãy lưu ý những thứ như 3SAT , đây là những vấn đề không thể khắc phục trong thời gian đa thức.

Đối với các cấu trúc dữ liệu bạn muốn sử dụng, tôi nghĩ rằng bạn muốn có một số loại Rulelớp. Quy tắc có thể là bất cứ điều gì, tùy thuộc vào loại. Không có nhiều quy tắc trong logic vị ngữ , vì vậy điều này có thể được khắc phục bằng cách kế thừa (nếu, iff, và, hoặc, không ...). Những quy tắc này chỉ phải được đánh giá. Và điều duy nhất một quy tắc có thể làm, là trả về đúng hay sai. Bởi vì đó là những gì bạn làm với logic vị ngữ. Ở trường đại học, tôi được đề nghị đọc cuốn sách này của John Kelly .

Quay trở lại các lớp học: Bạn sẽ thấy những vấn đề này giống như bạn sẽ thấy việc thực hiện các phép tính bình thường với toán học. Một +nhà điều hành là gì? Nó chứa hai tham số, có thể là một phương trình mới của chính nó, hoặc chỉ là một số. Tôi nghĩ bạn có cùng quy tắc. Họ có thể có các Quy tắc mới dưới dạng tham số hoặc chỉ là một boolean (nên được gọi là vị ngữ).

Tôi hy vọng điều này sẽ giúp bạn rất nhiều, đặc biệt là các tài liệu tham khảo. Nếu bạn muốn biết thêm, hoặc nếu tôi đang đi sai hướng, xin vui lòng cho tôi biết.


Vấn đề không chỉ đơn giản là bằng chứng về logic vị ngữ trên một mô hình hữu hạn (và nhỏ bé!), Hoặc tôi sẽ trả lời thay vì đưa tiền thưởng lên. Mục tiêu không phải là để giải quyết vấn đề - mục tiêu là tự động tạo ra vấn đề và theo một cách thú vị.

@Joe Vấn đề, ngay cả đối với một tập nhỏ, vẫn sẽ là vấn đề 3SAT. Nếu bạn chỉ tạo AND và OR, điều này có thể dẫn đến những điều không thỏa mãn, vì vậy tôi nghĩ sẽ rất khó để tạo ra một câu đố ngẫu nhiên. Câu đố nên chứa ít nhất một số hạn chế. Đôi khi, lý luận ngược có thể là câu trả lời (có giải pháp, bỏ qua mọi thứ)
Marnix

Logic vị ngữ chung thực sự khó hơn 3SAT; tuy nhiên, các thuật toán bằng chứng hiện đại thực sự khá tốt trong thực tế. Bên cạnh đó, chỉ cần tạo một mô hình, câu đố và kiểm tra giải pháp có thể được thực hiện trong thời gian tuyến tính - mẹo là đảm bảo các ràng buộc được cung cấp tạo ra một giải pháp độc đáo, có thể khám phá.

@Joe vậy có bất kỳ ràng buộc nào mà chúng ta có thể chắc chắn về việc tạo ra câu đố này không? Câu hỏi vẫn là: cơ sở hạ tầng để sử dụng. Vì vậy, tôi vẫn nghĩ rằng Rulelớp học là một ý tưởng tốt. Tôi nghĩ rằng việc mô hình hóa các ràng buộc này vẫn được thực hiện bằng logic vị ngữ.
Marnix

0

Tôi không có câu trả lời hay, nhưng tìm kiếm gợi ý về cùng loại vấn đề, tôi đã tìm thấy kho lưu trữ này trên github:

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

Nó chứa một số logic để chọn manh mối và quyết định bạn cần bao nhiêu manh mối để giải câu đố.


-1

Có cái này để giải quyết nó.

Tất nhiên, tôi nghĩ sẽ không quá khó để làm việc ngược; có một danh sách như thế này:

  • Chó đỏ Fred

  • Mèo xanh

  • Cá voi tím

  • Cá heo Eric Cyan

Mà có thể dễ dàng được tạo ra, và sau đó tạo thành một bộ quy tắc từ đó.

Về phần lưu trữ, tại sao không phải là một tập hợp của từng thứ riêng biệt, vì vậy [Fred, Steve, Bill, Eric] và một bộ câu trả lời [Fred, Red, Dog]. Sau đó, có 'TÊN (không) ĐỐI TƯỢNG HÀNH ĐỘNG'.

Khi bạn nhận được nó, một giải pháp duy nhất thực sự quan trọng? Miễn là trò chơi của bạn có thể chia chúng thành các danh sách và kiểm tra 'bộ 1 không chứa Cá voi'.


2
Bí quyết là, bạn muốn vấn đề vẫn còn khó khăn. Nếu các quy tắc bạn tạo thừa nhận 90% các kết hợp có thể là câu trả lời hợp lệ, thì đó không còn là một câu đố thú vị.

Tôi đoán đó là một điểm hợp lệ - nhưng không phải là giải pháp chỉ để giảm số lượng manh mối đưa ra?
Vịt Cộng sản

1
Không xác nhận thiếu có nhiều khả năng dẫn đến nhiều kết luận hợp lệ. Quá mức có thể dẫn đến một kết luận rất rõ ràng. Một câu đố logic tốt tránh được cả hai.

À đúng rồi, tôi đã bỏ lỡ điều đó. Tôi sẽ thử và thêm một giải pháp tốt hơn nếu tôi có thể nghĩ ra.
Vịt Cộng sản

Joe: Chính xác với bình luận đầu tiên của bạn. Một câu đố cho phép bạn ghép các manh mối lại với nhau không phải là một câu đố như một dự án nghệ thuật mẫu giáo.
Taserian
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.