ฉันจะใช้อัลกอริทึม "20 คำถาม" ได้อย่างไร


16

นับตั้งแต่วัยเด็กฉันสงสัยว่าเกมอิเล็กทรอนิกส์20Qทำงานอย่างไร คุณคิดว่าสิ่งของสิ่งของหรือสัตว์ (เช่นมันฝรั่งหรือลา ) จากนั้นอุปกรณ์จะถามชุดคำถามเช่น:

  • มันใหญ่กว่าก้อนขนมปังไหม?
  • พบกลางแจ้งหรือไม่
  • มันใช้สำหรับการพักผ่อนหย่อนใจหรือไม่?

สำหรับแต่ละคำถามคุณสามารถตอบใช่ , ไม่มี , อาจจะหรือไม่รู้จัก ฉันมักจะจินตนาการว่ามันใช้งานได้กับเงื่อนไขที่ใหญ่โตและซ้อนกัน (- สถานะif) อย่างไรก็ตามฉันคิดว่านั่นเป็นคำอธิบายที่ไม่น่าเป็นไปได้เพราะความซับซ้อนของมันสำหรับโปรแกรมเมอร์

ฉันจะใช้ระบบดังกล่าวได้อย่างไร

คำตอบ:


19

ผมไม่ทราบว่าวิธี 20Q ไม่ได้เฉพาะ แต่มีความอุดมสมบูรณ์ของข้อมูลเกี่ยวกับวิธีการใช้เกมของ20 คำถาม

มีวิธีมากมายในการแก้ปัญหานี้ แต่ฉันจะอธิบายวิธีหนึ่ง เกมเหล่านี้สามารถใช้การจัดเรียงของบางต้นไม้ตัดสินใจ สำหรับเกมอิเล็กทรอนิกส์เช่น 20Q ทรีนี้จะถูกคำนวณไว้ล่วงหน้าและค่อนข้างง่ายที่จะสำรวจ มีวิธีการในการใช้แผนภูมิการเรียนรู้ที่เกมสามารถยอมรับวัตถุใหม่ได้ในตอนท้ายของคำถามหากไม่สามารถเดาได้ว่าผู้ใช้ถามอะไร

เมื่อคำถามเป็นชุดของคำตอบใช่หรือไม่ใช่คุณจะจบลงด้วยต้นไม้ไบนารี แต่ละโหนดเป็นคำถามและใบไม้เป็นคำตอบ เมื่อตอบคำถามโดยไม่ทราบหรือไม่แน่ใจโหนดลูกสามารถรวมกันและคำถามของพวกเขาจะถามเป็นชุดเพื่อเลือกคำตอบที่เป็นไปได้ต่อไป

ป้อนคำอธิบายรูปภาพที่นี่

โดยทั่วไปนี่คือกระบวนการ:

  1. เริ่มด้วยรายการทั้งหมดของวัตถุ สิ่งเหล่านี้สามารถเริ่มต้นได้อย่างเท่าเทียมกันหรือสามารถเรียงลำดับตามความเป็นไปได้ที่วัตถุจะถูกเลือกในการทดสอบ
  2. เริ่มต้นด้วยคำถามแรกในแผนผังการตัดสินใจ ส่งไปยังคิวคำถาม
  3. ถามคำถามที่ด้านบนของคิว
  4. กระบวนการตอบสนอง:
    1. ใช่ / ไม่ใช่คำตอบลบ / เพิ่มจำนวนความน่าจะเป็นที่กำหนดไว้ล่วงหน้าจากแต่ละคำตอบตามคำถาม
    2. คำตอบ "อาจจะ" ลบ / เพิ่มเศษส่วนของจำนวนที่กำหนดไว้ล่วงหน้าของ "ใช่"
    3. "ไม่ทราบ" ไม่เปลี่ยนความน่าจะเป็น
  5. การตอบสนอง "ไม่ทราบ" หรือ "อาจจะ" ตอบคำถามทั้งสองข้อของโหนดถัดไปลงในคิวคำถาม การตอบสนอง "ใช่" หรือ "ไม่" เพียงเพิ่มโหนดใช่ / ไม่ใช่ตามลำดับลงในคิวคำถาม
  6. ไปที่ขั้นตอนที่ 3 จนกระทั่งคำถามหรือความน่าจะเป็นของคำตอบเดียวนั้นเกินเกณฑ์ "ความแน่นอน" ที่กำหนดไว้ล่วงหน้า
  7. ให้คำตอบที่เป็นไปได้มากที่สุด

การสร้างทรีอาจเป็นหัวข้อของคำถามอื่น แต่โดยพื้นฐานแล้วมันคือการเลือกคำถามที่แบ่งคำตอบให้มากที่สุด ใส่คำถามที่แบ่งคำถามอย่างเท่าเทียมกันมากที่สุดใกล้จุดเริ่มต้นเพื่อให้คำถามจำนวนมากที่สุดสามารถเลือกได้เร็วที่สุด


15

คำตอบง่ายๆคือว่าเกม 20Q มือถือที่ถูกสร้างขึ้นจากปัญญาประดิษฐ์ว่าชีวิตที่http://20Q.net ที่ 20Q.net คุณสามารถเล่นเกมต่าง ๆ ของ Twenty Questions คล้ายกับของเล่นยกเว้นว่าเกมเรียนรู้จากทุกเกมที่เล่น ของเล่นมือถือใช้อัลกอริทึมเครือข่ายประสาทเดียวกัน โครงข่ายประสาทเทียมเลือกคำถามที่จะถามและทำการเดา วิธีการนี้หมายความว่า AI มักจะคาดเดาได้อย่างถูกต้องแม้ว่าคุณจะตอบคำถามแตกต่างจากสิ่งที่ AI ได้รับการสอน ข้อดีอีกอย่างคือเกมจะถามคำถามที่แตกต่างกันทุกเกมแม้ว่าคุณจะคิดถึงสิ่งเดียวกัน

อัลกอริทึมและเครือข่ายประสาทของเกมภาษาอังกฤษคลาสสิก (สัตว์, ผัก, แร่) สร้างขึ้นในปี 1988 โดย Robin Burgener . . ฉัน.

ขอบคุณที่ถาม.


1
สวัสดีโรบินยินดีต้อนรับสู่เว็บไซต์ ใครจะตอบคำถามนี้ได้ดีกว่านักประดิษฐ์เอง เป็นเรื่องที่น่าสนใจที่จะทราบว่า 20Q นั้นซับซ้อนเพียงใด ขอขอบคุณสำหรับการมีส่วนร่วมในเว็บไซต์ของคุณและอื่น ๆ เพื่อให้คุณมีส่วนร่วมในปัญญาประดิษฐ์ หวังว่าคุณจะเยี่ยมชมเว็บไซต์เป็นครั้งคราวและตอบคำถาม AI :)
MichaelHouse

1
ฮิฮิรักเมื่อ xD เกิดขึ้น
jmacedo

6

ฉัน googled "20q code" และพบสิ่งนี้: http://mosaic.cnfolio.com/B142LCW2008A197

รุ่นนี้มีไว้สำหรับสัตว์ แต่ 20 คำถามจริงอาจมี algoritm ที่คล้ายกัน

นี่คือภาพรวมโดยย่อของรหัสที่ฉันเชื่อมโยง:
มีคำตอบต่าง ๆ มากมายที่เข้ารหัสไว้ในโปรแกรม แอตทริบิวต์ TRUE หรือ FALSE จำนวนมากจะถูกกำหนดให้กับพวกเขา:

#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"
...

อย่างที่คุณเห็นผึ้งไม่ใช่สัตว์เลี้ยงลูกด้วยนม แต่มันบินได้ ฯลฯ

มีอาร์เรย์สำหรับแต่ละกลุ่ม:

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

เมื่อถามคำถามแต่ละข้อ:

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

โปรแกรมจะพิจารณาคำจำกัดความของหมวดหมู่และแทร็กที่เหมาะสมว่าสัตว์ชนิดใดน่าจะเป็นสัตว์ที่คุณคิดว่าเป็นไปตามค่า TRUE หรือ FALSE และป้อนใช่หรือไม่ใช่คำตอบสำหรับคำถาม

สิ่งนี้ทำใน:

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

0

มันไม่ได้เป็นต้นไม้การตัดสินใจขนาดใหญ่หรืองบยากหาก / อื่นงบ Robin Burgener ผู้ประดิษฐ์จัดทำเอกสารอัลกอริทึมของเขาอย่างสมบูรณ์ในการยื่นจดสิทธิบัตรปี 2005 มันง่ายอย่างชาญฉลาด


4
แทนที่จะพูดถึงคำตอบอื่น ๆ คุณอาจต้องการคำอธิบายสั้น ๆ เกี่ยวกับอัลกอริทึมแทนที่จะเพียงแค่โพสต์ลิงค์ไปยังมัน
Jari Komppa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.