मैं डीप ब्लू के लिए उपयोग किए जाने वाले एल्गोरिदम के लिए बात नहीं कर सकता, लेकिन मैं शतरंज प्रोग्रामिंग में सुधार की कोशिश करने और समझाने जा रहा हूं। गति सबसे बड़ा सुधार है। डीप ब्लू ने मल्टी-प्रोसेसर समर्पित कंप्यूटरों का उपयोग किया है, इसलिए वास्तव में तुलना संभव नहीं है।
https://chessprogramming.wikispaces.com/ एक बेहतरीन स्रोत है, लेकिन इसे नेविगेट करना कठिन है।
शतरंज के इंजन को बेहतर बनाने के लिए 3 मुख्य कार्य हैं जिन्हें मूल्यांकन, चाल पीढ़ी, और खोज कार्य हैं।
मूल्यांकन कार्यक्रम के लिए सबसे कठिन है, क्योंकि नियमों के कई अपवाद हैं। हार्ड ड्राइव स्पेस सस्ता होने के साथ, एक्वल फ़ंक्शन अधिक अपवादों का मूल्यांकन करने की अनुमति देता है।
मूव जनरेशन, एक मूव बनाने और अनमेक करने के साथ, बहुत मेमोरी खा जाती है क्योंकि इसे कई बार प्रीफ़ॉर्म करना पड़ता है। सबसे आम पीढ़ी के कार्य हैं मेलबॉक्स, बिटबोर्ड, 0x88, 8x8, विस्तारित बोर्ड (10x10, 10x12), और एक पूर्व निर्धारित चाल सरणी / तालिका (* मैं अनुक्रमित चाल तालिका का उपयोग करता हूं)। वर्तमान राय है कि बिटबोर्ड तेज होते हैं, और मैजिक बिटबोर्ड का उपयोग करके यह 30% तक बढ़ जाता है। डॉ। रॉबर्ट हयात, क्रैटी शतरंज इंजन के प्रोफेसर और निर्माता, कोई महत्वपूर्ण गति वृद्धि का दावा नहीं करते हैं।
प्रारंभिक खोज समारोह आदिम न्यूनतम-अधिकतम फ़ंक्शन था। मूल रूप से आप प्रतिद्वंद्वी के स्कोर को स्थानांतरित करने और कम करने के लिए पक्ष के स्कोर को अधिकतम करने की कोशिश कर रहे थे। अल्फा-बीटा पहले सुधार था। उन्होंने ट्रांसपोज़ेशन टेबल, कट-ऑफ वैल्यूज़, एस्पिरेशन विंडो और हिस्ट्री हेयर्सिस्टिक्स द्वारा खोजे जा रहे मूव्स की संख्या कम कर दी। ये गहराई-पहली खोज हैं। आंतरिक पुनरावृति गहन खोज भी है जो "सर्वश्रेष्ठ" चाल (ओं) को खोजने की कोशिश करता है सबसे गहरी उम्मीद है कि अन्य चालों को खोजना फलहीन साबित होगा।
नोट: मेरी सूचकांक तालिका GNUChess और Jester दोनों अपनी चाल उत्पन्न करने के लिए एक सूचकांक सरणी का उपयोग करते हैं। वे संभावित चालों के साथ सरणी को भरने के द्वारा इंजन को इनिशियलाइज़ करते हैं। छह टुकड़े लें और उन कानूनी चालों की गणना करें जो प्रत्येक वर्ग से उपलब्ध हैं। इसलिए प्रत्येक टुकड़े में एक [64] [8] सरणी थी। मैंने इस विचार को लिया और इसे दो अनुक्रमित और एक तालिका में संपीड़ित किया। तालिका एक मान रखती है जो बताता है कि 16 चालें संभव हैं, एक सूचकांक चाल की ऑफसेट रखता है, और दूसरा मुखौटा धारण करता है।
ऑफसेट [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};
मास्क [] = {१, २, ४, 1, १६, ३२, ६४, १२,, २५६, २ ...};
फिर एक स्लाइडिंग चाल की पीढ़ी के रूप में आसान के रूप में यह मुखौटा की वैधता को देख रहा है यह कदम तालिका के खिलाफ स्वीकार्य ऑफसेट है।