Làm thế nào tôi có thể thực hiện thuật toán của câu hỏi 20


16

Ngay từ khi còn nhỏ, tôi đã tự hỏi làm thế nào trò chơi điện tử 20Q hoạt động. Bạn nghĩ về một vật thể, đồ vật hoặc động vật (ví dụ khoai tây hoặc lừa ). Sau đó, thiết bị sẽ hỏi bạn một loạt các câu hỏi như:

  • Nó có lớn hơn một ổ bánh mì không?
  • Nó được tìm thấy ngoài trời?
  • Nó được sử dụng để giải trí?

Đối với mỗi câu hỏi, bạn có thể trả lời , không , có thể hoặc không biết . Tôi luôn tưởng tượng nó hoạt động với các điều kiện to lớn, lồng nhau ( if-statements). Tuy nhiên, tôi nghĩ đó là một lời giải thích không thể xảy ra vì sự phức tạp của nó đối với lập trình viên.

Làm thế nào tôi có thể thực hiện một hệ thống như vậy?

Câu trả lời:


19

Tôi không biết 20Q đã làm điều đó cụ thể như thế nào, nhưng có rất nhiều thông tin về cách thực hiện trò chơi gồm 20 câu hỏi .

Có rất nhiều cách để giải quyết vấn đề này, nhưng tôi sẽ mô tả một cách. Những trò chơi này có thể thực hiện một số loại cây quyết định . Đối với một trò chơi điện tử như 20Q, cây này sẽ được tính toán trước và khá dễ dàng để vượt qua. Có các phương pháp để sử dụng cây quyết định học tập trong đó trò chơi có thể chấp nhận các đối tượng mới ở cuối câu hỏi nếu không thể đoán được người dùng đang hỏi gì.

Khi các câu hỏi là một chuỗi các câu trả lời có hoặc không, bạn kết thúc với một cây nhị phân. Mỗi nút là một câu hỏi và lá là câu trả lời. Khi các câu hỏi được trả lời không rõ hoặc không chắc chắn, các nút con có thể được kết hợp và các câu hỏi của chúng được hỏi theo chuỗi để tiếp tục loại bỏ các câu trả lời có thể.

nhập mô tả hình ảnh ở đây

Về cơ bản đây là quá trình:

  1. Bắt đầu với một danh sách đầy đủ của các đối tượng. Tất cả đều có thể bắt đầu với khả năng như nhau, hoặc chúng có thể được sắp xếp theo khả năng đối tượng được chọn trong thử nghiệm.
  2. Bắt đầu với câu hỏi đầu tiên trong cây quyết định. Đẩy nó vào hàng đợi câu hỏi.
  3. Đặt câu hỏi trên đầu hàng đợi.
  4. Quá trình đáp ứng:
    1. Có / Không câu trả lời loại bỏ / thêm số lượng xác suất được xác định trước từ mỗi câu trả lời dựa trên câu hỏi.
    2. Câu trả lời "Có thể" sẽ loại bỏ / thêm một phần số tiền được xác định trước là "có".
    3. "Unkn" không thay đổi xác suất
  5. Câu trả lời "Không xác định" hoặc "Có thể" sẽ đẩy cả hai câu hỏi của các nút tiếp theo vào hàng đợi câu hỏi. Câu trả lời "Có" hoặc "Không" chỉ thêm một nút có / không tương ứng vào hàng đợi câu hỏi.
  6. Chuyển đến bước 3 cho đến khi hết câu hỏi hoặc xác suất của một câu trả lời vượt quá ngưỡng "chắc chắn" được xác định trước.
  7. Cung cấp câu trả lời có thể xảy ra nhất.

Tạo cây có lẽ là chủ đề của một câu hỏi khác. Nhưng về cơ bản, nó chọn những câu hỏi phân chia câu trả lời càng nhiều càng tốt. Đặt các câu hỏi phân chia các câu hỏi gần như bằng nhau ngay từ đầu để số lượng câu hỏi nhiều nhất có thể được loại bỏ nhanh nhất.


15

Câu trả lời đơn giản là trò chơi cầm tay 20Q được tạo ra từ trí thông minh nhân tạo sống tại http://20Q.net . Tại 20Q.net, bạn có thể chơi các phiên bản khác nhau của trò chơi Twenty question, tương tự như đồ chơi ngoại trừ trò chơi học được từ mọi trò chơi đã chơi. Đồ chơi cầm tay sử dụng các thuật toán mạng thần kinh tương tự. Mạng lưới thần kinh chọn các câu hỏi để hỏi cũng như đoán. Cách tiếp cận này có nghĩa là AI sẽ thường đoán chính xác ngay cả khi bạn trả lời một câu hỏi khác với những gì AI đã được dạy. Một lợi thế khác là trò chơi sẽ đặt câu hỏi khác nhau cho mỗi trò chơi ngay cả khi bạn đang nghĩ về điều tương tự.

Các thuật toán và mạng lưới thần kinh của trò chơi tiếng Anh cổ điển (Động vật, Rau, Khoáng sản) được tạo ra vào năm 1988 bởi Robin Burgener. . . tôi.

Cam ơn vi đa hỏi.


1
Xin chào Robin, chào mừng đến với trang web. Ai tốt hơn để trả lời câu hỏi này hơn bản thân nhà phát minh. Thật thú vị khi biết 20Q thực sự phức tạp như thế nào. Cảm ơn sự đóng góp của bạn cho trang web và hơn thế nữa là sự đóng góp của bạn cho trí tuệ nhân tạo. Hy vọng thỉnh thoảng bạn sẽ truy cập trang web và trả lời các câu hỏi về AI :).
MichaelHouse

1
hehe, thích nó khi điều này xảy ra xD.
jmaceso

6

Tôi đã googled "mã 20q" và tìm thấy cái này: http : // mosaic.cn portfolio.com/B142LCW2008A197

Phiên bản này chỉ dành cho động vật nhưng 20 Câu hỏi thực tế có thể có một algoritm tương tự.

Dưới đây là tổng quan nhanh về mã tôi đã liên kết:
Có một số câu trả lời khác nhau được mã hóa cứng vào chương trình. Một số thuộc tính TRUE hoặc FALSE sau đó được gán cho chúng:

#define ANIMALS_LIST      "daddylonglegs bee penguin eagle giraffe octopus tiger elephant jellyfish bull \nparrot dolphin python crocodile cat leopard monkey zebra sheep rat \nowl spider frog polarbear snail tortoise rabbit salmon rhino fox"
#define MAMMALS                    "0 0 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 1 1"
#define FLYING_ANIMALS             "1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
#define WATER_ANIMALS              "0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 0"
#define BEAK                       "0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0"
...

Như bạn có thể thấy một con ong không phải là động vật có vú nhưng nó bay, v.v.

Có một mảng cho mỗi nhóm:

int   mammals[ TOTAL_ANIMALS ] = { 0 };
int   flying_animals[ TOTAL_ANIMALS ] = { 0 };
int   water_animals[ TOTAL_ANIMALS ] = { 0 };
...

Khi mỗi câu hỏi được hỏi:

  askUserQuestion( guesses, "\nQuestion %d: Is your animal a mammal? \n", mammals );

Chương trình xem xét định nghĩa của danh mục phù hợp và theo dõi con vật nào rất có thể là loài mà bạn đang nghĩ đến dựa trên các giá trị TRUE hoặc FALSE và câu trả lời Có hoặc Không trả lời cho câu hỏi của bạn.

Điều này được thực hiện trong:

void askUserQuestion( int guessNumber, char* question, int* animalData );

0

Đây không phải là một cây quyết định lớn hay một loạt các câu lệnh if / other được mã hóa cứng. Robin Burgener, nhà phát minh, đã hoàn toàn ghi lại thuật toán của mình trong hồ sơ bằng sáng chế năm 2005. Nó thật đơn giản.


4
Thay vì chọc vào các câu trả lời khác, bạn có thể muốn đưa ra một mô tả ngắn về thuật toán thay vì chỉ đăng một liên kết đến nó.
Jari Komppa
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.