इंजन प्ले में बेतरतीबपन


11

अगर मुझे एक ही रंग के साथ एक दूसरे के खिलाफ खेलने के लिए दो इंजन मिलते हैं, तो क्या हर बार एक ही खेल का परिणाम होगा? यदि नहीं, तो इंजन प्ले में यादृच्छिकता कहाँ से आती है? (शुरुआती किताब की उपेक्षा करना, जहां अगर मैं गलत नहीं हूं तो पुस्तक इंजन को दो चालों के बीच यादृच्छिक रूप से चुनने के लिए कह सकती है क्योंकि वे बहुत अच्छे हैं।)

मैं मान रहा हूँ कि अल्फ़ाज़ो बनाम स्टॉकफ़िश मैच में बेतरतीबी है, हमें एक ही गेम कई बार नहीं मिला। हालाँकि मुझे समझ नहीं आता कि क्यों। संभवतः ऐसा करने का एकमात्र तरीका यह है कि इंजन को कुछ समय के लिए एक सबपर खेलने के लिए इंजन मिल जाए, जो सीपुकू की तरह लगता है।


अल्फाज़ो खेलकर सीखता है, इसलिए प्रत्येक गेम के बाद यह मॉडल अपडेट किया जाता है।
फेरिट

मूल्यांकन के लिए छोटे यादृच्छिक मूल्य जोड़ना संभव तरीकों में से एक है। मुझे लगता है कि स्टॉकफिश ऐसा कर रही है।
Hoacin

जवाबों:


8

अल्फ़ाज़ेरो बनाम स्टॉकफ़िश मैच के बारे में, यह सवाल स्मॉलचेज़ द्वारा पहले ही यहाँ कवर किया जा चुका है

अल्फ़ाज़ेरो एक तरफ (जो कि एक विशेष मोंटे कार्लो 1 रूटीन को खेल की रेखाओं के अन्वेषण में नियोजित करता है ), जो निर्माण द्वारा गैर-नियतात्मक बनाया जाता है , सामान्य हेराटिक्स आधारित शतरंज इंजनों के लिए, जैसे स्टॉकफिश और अन्य (हालांकि अन्य हैं) जिन इंजनों में MC- आधारित रूटीन होते हैं, AFAIK Rybka में ऐसी सुविधा होती थी), यादृच्छिकता का स्रोत आमतौर पर कार्यान्वयन में तकनीकी पहलुओं का एक परिणाम है, बजाय जानबूझकर यादृच्छिकता इंजन के निर्णय लेने में एल्गोरिदम पेश किया जा रहा है। संक्षेप में, इसका एक कारण यह तथ्य है कि इंजन विशुद्ध रूप से अनुक्रमिक तरीके से नहीं चल रहे हैं (एक कार्य को दूसरे के बाद निष्पादित करना)। इसके बजाय, इंजनों को अधिक कुशल बनाने के लिए, वे संभावित चालों के पेड़ की विभिन्न शाखाओं में समानांतर खोज करते हैं। वे मल्टी-थ्रेडिंग (या -प्रोसेसिंग लेकिन इसे थोड़ा अलग कहते हैं) के माध्यम से ऐसा करते हैं । सीपीयू के कई सूत्र समवर्ती हैंपेड़ को खोजने के लिए ऑपरेशन निष्पादित करना (और विज़िट किए गए पदों के मूल्यांकन को कैश करना), इसलिए कल्पना करें कि प्रत्येक धागे को एक सबट्री सौंपी जा रही है। इस तरह के कार्यान्वयन के साथ समस्या यह है कि थ्रेड्स का समग्र निष्पादन सभी प्रकार की स्थितियों (प्रतीक्षा समय, रैम स्वैप, ...) पर अत्यधिक निर्भर हो जाता है, इसलिए अंत में अन्य सभी की अनुमति के बिना एक प्रमुख भिन्नता को चुना जा सकता है। अपनी खोज समाप्त करने के लिए थ्रेड।

यह वास्तव में अक्सर होता है क्योंकि इंजन एक निश्चित समय के तहत निर्णय लेने के लिए निर्धारित होता है, इसलिए समय प्रबंधन व्यवहार को बदल देता है। आप इस कथन को यह कहकर भी वापस कर सकते हैं: एल्गोरिथ्म को जानना और नियतकालिक थ्रेडिंग दिनचर्या को लागू करना किसी भी समय टी के बाद कार्यक्रम की स्थिति का विश्वसनीय रूप से अनुमान लगाने के लिए पर्याप्त नहीं है। बेशक, यदि कोई हमेशा सभी थ्रेड्स को अपनी खोज को समाप्त करने की अनुमति देता है, और उस निष्पादन के दौरान निर्णायक मुद्दे नहीं हैं (उदाहरण के लिए एक थ्रेड एक निश्चित कैश तक पहुंचने की कोशिश कर रहा है जो सुलभ नहीं है), तो व्यवहार वास्तव में पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य होगा बाकी सब कुछ दिया ही है 2


1 : इस तथ्य के साथ कि अतिरिक्त प्रशिक्षण (उदाहरण के लिए सेल्फ-प्ले) के माध्यम से इसका तंत्रिका नेटवर्क विकसित हो रहा है (पुन: समायोजित पैरामीटर), या यदि आप इसका मूल्यांकन कार्य करेंगे तो स्थिर, निश्चित परिभाषा नहीं होगी (ह्यूरिस्टिक्स आधारित इंजन के विपरीत) )।

2 : फिर भी, जैसा कि आपने कहा, शुरुआती स्तर पर, एक शुरुआती किताब के साथ, कभी-कभी जानबूझकर यादृच्छिक निर्णय होते हैं जो इंजन द्वारा किए जाते हैं, जिसमें भिन्नता को चुनना है। इसी तरह, उद्घाटन के चरण के बाहर, ऐसे क्षण हो सकते हैं जहां कई भिन्नताएं समान मूल्यांकन के करीब होती हैं (ईवैल के लिए चुने गए संकल्प के भीतर), फिर डिजाइन के आधार पर, यह एक यादृच्छिक रूप से चुनने का अंत हो सकता है। अंत में, इंजन सेटिंग्स के स्तर पर आपको सावधान रहना होगा, उदाहरण के लिए प्रत्येक इंजन के लिए चुनी गई खोज और विचारशील समय की गहराई (और क्या वे एक दूसरे के समय के दौरान गणना कर सकते हैं)।


6

मेरे पिछले उत्तरों को विवरणों में शामिल करने के लिए @ फॉनन को धन्यवाद। मैं एक और बिंदु जोड़ना चाहता हूं: समय नियंत्रण

एकमात्र नियतात्मक समय नियंत्रण नोड्स की संख्या से है , लेकिन यह असामान्य है। बहुत अधिक सामान्य समय नियंत्रण - सेकंड या गेम के समय की निश्चित संख्या आमतौर पर नियतात्मक नहीं होती है।

आइए एक उदाहरण की कोशिश करते हैं। अपने टर्मिनल पर स्टॉकफ़िश चलाएं। प्रकार:

20000 पर जाएँ

यह कमांड इंजन को 20 सेकंड के बाद एक चाल बनाने का निर्देश देता है। मेरे परिणाम:

info depth 23 seldepth 32 multipv 1 score cp 6 upperbound nodes 24325860 nps 1216171 hashfull 999 tbhits 0 time 20002 pv g1f3 d7d5
bestmove g1f3 ponder d7d5

चाल थी 1.Nf3। इसके बाद, मैंने अपने स्टॉकफिश को मार डाला, एक नई शुरुआत की। फिर से, 20 सेकंड। मुझे मिला:

info depth 23 seldepth 32 multipv 1 score cp 20 nodes 26185280 nps 1309067 hashfull 999 tbhits 0 time 20003 pv d2d4
bestmove d2d4 ponder g8f6

यह 1.d4 है! एक ही स्थिति, दोनों 20 सेकंड खोज!

क्या तुम देखते हो? इस कदम के लिए दोनों 20 सेकंड, लेकिन लिनक्स ऑपरेटिंग सिस्टम में उतार-चढ़ाव के कारण मेरे दूसरे रन की गहरी खोज (26185280> 24325860) थी।

कृपया ध्यान दें कि यह छोटा प्रयोग भी मल्टीथ्रेडेड नहीं था (थ्रेड्स की संख्या = 1)। मल्टीथ्रेडिंग चीजों को और अधिक गैर-नियतात्मक बना देगा।

Google अल्फ़ाज़ेरो मैच में स्टॉकफ़िश को प्रति मिनट एक कदम दिया गया था। थ्रेड्स की संख्या 64 थी। मैच में स्टॉकफिश के फैसले संभवतः निर्णायक नहीं हो सकते थे


वास्तव में, बहुत शिक्षाप्रद उदाहरण और टिप्पणी।
15:

अच्छा! 1 थ्रेड केस दिखाने के लिए अच्छा विचार।
ऐली

जवाब के लिए धन्यवाद। बेवकूफ अनुवर्ती प्रश्न: एक नोड (शतरंज-खेल इंजन के संदर्भ में) क्या है?
एल्योर

@ user3727079 नोड्स खेल के पेड़ में कोने (अद्वितीय स्थान) हैं । उदाहरण के लिए यदि रूट नोड प्रारंभिक स्थिति है, तो इसमें 20 बाल नोड हैं, जो कि 20 अद्वितीय कानूनी स्थान हैं जो रूट से एक-प्लाई दूर हैं।
ऐली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.