मैं "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 पर आप ट्वेंटी क्वेश्चन के गेम के विभिन्न संस्करणों को खेल सकते हैं, खिलौने के समान, सिवाय इसके कि गेम खेले गए हर गेम से सीखता है। हैंडहेल्ड खिलौना समान तंत्रिका नेटवर्क एल्गोरिदम का उपयोग करता है। तंत्रिका नेटवर्क अनुमान लगाने के साथ-साथ सवाल पूछने के लिए चुनता है। इस दृष्टिकोण का अर्थ है कि AI अक्सर सही ढंग से अनुमान लगाएगा भले ही आप किसी प्रश्न का उत्तर अलग से दें जो AI को पढ़ाया गया हो। एक और लाभ यह है कि खेल हर खेल से अलग तरह से सवाल पूछेगा भले ही आप एक ही चीज के बारे में सोच रहे हों।

एल्गोरिदम और क्लासिक इंग्लिश गेम (एनिमल, वेजिटेबल, मिनरल) के तंत्रिका नेटवर्क को रॉबिन बर्गेनर ने 1988 में बनाया था। । । मुझे।

पूछने के लिए धन्यवाद।


1
हैलो रॉबिन, साइट पर आपका स्वागत है। इस प्रश्न का उत्तर देने के लिए आविष्कारक से बेहतर कौन है। यह जानना दिलचस्प है कि 20Q वास्तव में कितना जटिल है। साइट पर आपके योगदान के लिए धन्यवाद और कृत्रिम बुद्धिमत्ता में आपका योगदान। उम्मीद है कि आप कभी-कभार साइट पर जाएंगे और एआई के सवालों का जवाब देंगे :)।
MichaelHouse

1
हे, यह प्यार करता हूँ जब यह होता है xD।
jmacedo

6

मैंने "20q कोड" जाना और यह पाया: http://mosaic.cnfolio.com/B142LCW2008A197

यह संस्करण केवल जानवरों के लिए है, लेकिन वास्तविक 20 प्रश्नों में संभवतः समान रूप से एक अल्गोरिथम है।

यहां मेरे द्वारा लिंक किए गए कोड का एक त्वरित अवलोकन है:
कार्यक्रम में हार्ड कोडित कई अलग-अलग उत्तर हैं। कई 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

यह बड़े पैमाने पर निर्णय पेड़ या हार्ड-कोडेड का एक गुच्छा नहीं है अगर / और बयान। आविष्कारक रॉबिन बर्गनर ने 2005 की पेटेंट फाइलिंग में अपने एल्गोरिदम को पूरी तरह से प्रलेखित किया । यह सरलता से सरल है।


4
अन्य उत्तरों पर विचार करने के बजाय, आप केवल एक लिंक पोस्ट करने के बजाय एल्गोरिथ्म का संक्षिप्त विवरण देना चाह सकते हैं।
जरी कोमप्पा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.