शतरंज इंजनों का प्रोग्रामिंग बहुत जटिल क्षेत्र है, इसलिए ठीक सामने मैं आपको शतरंज प्रोग्रामिंग विकी के बारे में बताता हूं , जिसमें इस विषय पर बहुत अधिक जानकारी है।
पृष्ठभूमि
शतरंज की गणना (और इसी तरह की कई चीजें) आमतौर पर "गेम ट्री" या " डिसीजन ट्री " के रूप में की जाती हैं। मोटे तौर पर, यह पेड़ एक निर्देशित ग्राफ है, जिसके शीर्ष पर एक नोड (वर्तमान स्थिति) है, जिससे प्रत्येक संभव चाल के लिए एक नोड होता है, जिनमें से प्रत्येक प्रत्येक अगले अगले कदम के लिए अधिक नोड की ओर जाता है , और इसी तरह।
उनके सबसे सरल, ब्रूट-फोर्स फॉर्म में, शतरंज इंजन इस पेड़ पर कुछ गहराई सीमा ("प्लाई") तक सभी स्थिति उत्पन्न करते हैं, कुछ जटिल मानदंडों 1 के आधार पर प्रत्येक परिणामी स्थिति का मूल्यांकन करते हैं । फिर यह उस चाल को निभाता है जो सबसे अच्छे परिणाम की ओर ले जाता है। आजकल, बहुत सी जटिल तकनीकों को विकसित किया गया है कि इंजन को देखने के लिए कितने पदों को सीमित करना है, लेकिन मैं इस उत्तर के उद्देश्य के लिए उन लोगों को अनदेखा करने जा रहा हूं, क्योंकि वे वास्तविक मुद्दे को बदलते नहीं हैं हाथ।
गणित स्पर्शक
प्रत्येक चाल पर विचार करने के लिए आमतौर पर इंजन की समान मात्रा के बारे में जो मूल कारण होता है, वह यह है कि निर्णय वृक्ष का आकार गहराई ( k
) के साथ तेजी से बढ़ता है ।
प्रारंभिक स्थिति पर विचार करें। पेड़ का शीर्ष ( k=0
) एक नोड है। व्हाइट के लिए बीस संभव पहली चालें हैं, इसलिए गहराई पर बीस नोड हैं k=1
। फिर, ब्लैक के पास व्हाइट के प्रत्येक विकल्प के लिए बीस उपलब्ध चालें हैं: इसलिए k=2
, 20 * 20 = 400
संभावित स्थान हैं! और यह केवल खराब हो जाता है क्योंकि खिलाड़ी अपने टुकड़ों को विकसित करते हैं!
उदाहरण के लिए, आइए दिखाते हैं कि किसी भी समय 2 पर प्रत्येक खिलाड़ी के लिए हमेशा बीस संभव चालें हैं । आप कंप्यूटर को प्रत्येक खिलाड़ी (दस प्लाई) के लिए पाँच चालों को देखने का निर्देश देते हैं। आइए प्रत्येक स्तर पर जानवर बल के पेड़ के आकार को देखें। मज़े के लिए, हम पेड़ में कुल पदों की संख्या (ऊपर से दिए गए स्तर तक) को देखेंगे।
Ply | Positions | Total Tree Size
----------------------------------------
0 | 1 | 1
1 | 20 | 21
2 | 400 | 421
3 | 8000 | 8421
4 | 160000 | 168421
5 | 3200000 | 3368421
6 | 64000000 | 67368421
7 | 1280000000 | 1347368421
8 | 25600000000 | 26947368421
9 | 512000000000 | 538947368421
10 | 10240000000000 | 10778947368421
प्रत्येक स्तर के पिछले स्तर की तुलना में तेजी से बड़ा होने का परिणाम यह है कि पूरे पेड़ का आकार नीचे के स्तर पर हावी है । ऊपर दिए गए उदाहरण पर विचार करें: अकेले अंतिम स्तर में दस ट्रिलियन नोड्स होते हैं। पूरे पेड़ में केवल पाँच सौ बिलियन होते हैं। दसवें प्लाई में पूरे पेड़ में लगभग 95% नोड्स होते हैं (यह वास्तव में प्रत्येक स्तर पर सच है)। व्यवहार में, इसका मतलब यह है कि सभी खोज समय "अंतिम" चाल का मूल्यांकन करने में बिताया जाता है।
उत्तर
तो यह आपके प्रश्न से कैसे संबंधित है? ठीक है, मान लें कि कंप्यूटर दस प्लाई पर सेट है, जैसा कि ऊपर है, और आगे यह अपने मूल्यांकन के परिणामों को "याद" करता है। यह एक चाल की गणना करता है, इसे खेलता है, और फिर आप एक चाल बनाते हैं। अब दो चालें बनाई गई हैं, इसलिए यह चाल से संबंधित मेमोरी से सभी पदों को चुभता है जो कि नहीं हुआ, और एक पेड़ के साथ छोड़ दिया जाता है जो शेष आठ चालों से नीचे चला जाता है जो पहले से ही गणना करता है: 26,947,368,421 स्थिति!
ठीक है! इसलिए हमें केवल अंतिम दो प्लाई की गणना करने की आवश्यकता है! हमारे 20-चाल-पर-प्रत्येक-गहराई अनुमान का उपयोग करते हुए, हमें यहां गणना करने के लिए कुल चालों की संख्या अभी भी दस ट्रिलियन से अधिक है। जिन पदों की हम पहले ही गणना कर चुके हैं, उनमें केवल 2.5% संभावनाओं का ही हिसाब है! तो अंतिम चाल के परिणामों को कैशिंग करके भी, हम जिस सर्वश्रेष्ठ की उम्मीद कर सकते हैं, वह गति में 2.5% की वृद्धि है! दिल से, यही कारण है कि भले ही आपका कार्यक्रम पिछले परिणामों को कैश करता है, आप आमतौर पर चालों के बीच एक महत्वपूर्ण स्पीडअप नहीं देखते हैं (मामलों को छोड़कर जब कंप्यूटर एक मजबूर साथी या कुछ और पाता है, निश्चित रूप से!)।
सरलीकरण अस्वीकरण
नहीं है एक बहुत यह सवाल है, जिसके कारण मैं बहुत शीर्ष पर प्रोग्रामिंग विकि से जुड़ा हुआ है और केवल व्यापक गणितीय संदर्भ में जवाब की व्याख्या करने का प्रयास किया में शामिल जटिलता की। वास्तव में, कार्यक्रम आम तौर पर पेड़ के कुछ हिस्सों को स्थानांतरित करने के लिए कदम से कैश करते हैं, और अन्य कारण हैं कि यह अपने आप में अपर्याप्त है - कुछ सरल कारण (उदाहरण के लिए एक निश्चित लाइन आठ चालों तक अच्छी दिख सकती है, लेकिन एक पीठ के साथ समाप्त होती है (नौ चाल पर दोस्त पीते हैं!) और कई उच्च जटिल वाले (आमतौर पर विभिन्न चतुर छंटाई विधियों से संबंधित)। इसलिए कंप्यूटर को पिछली चाल की कट-ऑफ गहराई के आधार पर खराब धारणाओं से बचने के प्रयास में आगे की ओर देखते रहना चाहिए।
1 मैं यहाँ हेयूरिस्टिक फ़ंक्शंस में नहीं जा रहा हूँ, क्योंकि यह अपना खुद का अविश्वसनीय जटिल क्षेत्र है, लेकिन अक्सर कुछ ऐसे लाभ होते हैं जिन्हें यहाँ स्थिति कैशिंग योजनाओं के माध्यम से भी प्राप्त किया जा सकता है।
2 20 की औसत ब्रांचिंग फैक्टर शायद बहुत कम है ।