2009-04-15 14 views
21

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

मेरा दृष्टिकोण 385 न्यूरॉन्स का नेटवर्क बनाना है: बोर्ड पर छह अद्वितीय शतरंज के टुकड़े और 64 फ़ील्ड हैं। तो हर क्षेत्र के लिए हम 6 न्यूरॉन्स (प्रत्येक टुकड़े के लिए 1) लेते हैं। यदि कोई सफेद टुकड़ा है, तो इनपुट मान 1 है। यदि कोई काला टुकड़ा है, तो मान -1 है। और यदि उस क्षेत्र पर उस तरह का कोई टुकड़ा नहीं है, तो मान 0 है। इसके अलावा खिलाड़ी के स्थानांतरित होने के लिए 1 न्यूरॉन होना चाहिए। यदि यह सफेद की बारी है, तो इनपुट मान 1 है और यदि यह ब्लैक की बारी है, तो मान -1 है।

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

तो यह अच्छा होगा अगर आप तंत्रिका नेटवर्क को कोडिंग भाषा में लागू करने में मेरी मदद कर सकें (सर्वोत्तम डेल्फी, अन्यथा छद्म कोड होगा)। अग्रिम में धन्यवाद!

+0

अभी तक आपके उत्तरों के लिए धन्यवाद। मुझे एहसास हुआ कि तंत्रिका नेटवर्क द्वारा शतरंज खेलना मुश्किल या असंभव है। लेकिन मेरे प्रश्न का दूसरा भाग यह था: आप एक तंत्रिका नेटवर्क को कैसे कोड करते हैं (उदाहरण के लिए मेरी कॉन्फ़िगरेशन)? मुझे नहीं पता कि मैं कुछ प्रस्ताव प्राप्त करने के लिए तत्पर हूं। – caw

+0

इसे जांचें: http://www.chesscircle.net/forums/showthread.php?13121- चेस- न्यूरल- नेटवर्क- अन्य-विक्या-FOR-OCTAVIUS! – Spider

+0

इस पर एक अद्यतन उत्तर होना चाहिए क्योंकि एसओटीए 200 9 से काफी बदल गया है! सुदृढ़ीकरण सीखने के साथ मिश्रित गहरी एनएल का उपयोग करके शतरंज खेलना सीखना निश्चित रूप से संभव है! –

उत्तर

4

वहां गया, ऐसा किया। चूंकि आपकी समस्या में कोई निरंतरता नहीं है (एक स्थिति का मूल्य एक इनपुट के मूल्य में केवल 1 परिवर्तन के साथ किसी अन्य स्थिति से निकटता से संबंधित नहीं है), एनएन काम करेगा बहुत कम संभावना है। और यह मेरे प्रयोगों में कभी नहीं किया।

मैं नहीं बल्कि एक तदर्थ अनुमानी (जिनमें से वहाँ बहुत सारे बाहर हैं) की स्थिति का मूल्यांकन करने के लिए मूल्य के साथ एक सिमुलेटेड एनिलिंग प्रणाली देखना होगा ...

हालांकि, अगर आप एक का उपयोग करने पर सेट कर रहे हैं, तो एनएन, प्रतिनिधित्व करने के लिए अपेक्षाकृत आसान है। एक सामान्य एनएन बस एक ग्राफ है, प्रत्येक नोड एक न्यूरॉन है। प्रत्येक न्यूरॉन में वर्तमान सक्रियण मान होता है, और इनपुट मानों के आधार पर अगले सक्रियण मान की गणना करने के लिए एक संक्रमण सूत्र होता है, यानी उन सभी नोड्स के सक्रियण मूल्य जिनके साथ लिंक होता है।

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

+4

लेकिन टीडी-गैमन ने बैकगैमौन को केवल एक तंत्रिका नेटवर्क का उपयोग करना भी सीखा। तो इसे किसी भी तरह से काम करना है, है ना? – caw

+1

ब्लैकगैमौन शतरंज से एक बहुत ही अलग गेम है ... यह नियम जटिलता और यादृच्छिकता के साथ संभावनाओं की विस्तृत शाखाओं को प्रतिस्थापित करता है। लेकिन एनएनएन सांख्यिकीय भविष्यवाणियों से निपटने में बहुत अच्छे हैं, इसलिए संभावित समाधानों के पेड़ को तोड़ने पर नहीं। – Varkhan

+0

निरंतरता पर्याप्त आंतरिक नोड्स (बैक-प्रोप एनएन के लिए) और प्रशिक्षण डेटा के साथ कोई समस्या नहीं होगी। समस्या यह है कि नोड्स की संख्या और प्रशिक्षण की मात्रा की आवश्यकता यह अक्षम हो जाएगी। मैं मानता हूं कि एनएन समस्या का एक बुरा समाधान है। – geofftnz

4

आपको एएनएन को प्रशिक्षित करने की आवश्यकता है या तो backpropagation learning या genetic algorithm का कुछ रूप है। लेकिन शतरंज इतना जटिल गेम है कि यह असंभव है कि एक साधारण एएनएन इसे खेलना सीख लेगा - सीखने की प्रक्रिया असुरक्षित होने पर और भी अधिक।

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

आगे आपको कई छिपी परतों की आवश्यकता होगी - एक इनपुट के साथ प्रतिनिधित्व किए जा सकने वाले कार्यों और छुपा परत के बिना आउटपुट परत वास्तव में सीमित हैं।

इसलिए मैं आपको इसे करने से रोकने के लिए नहीं रोकना चाहता हूं, लेकिन एक वर्ष या एक व्यावहारिक रूप से शून्य के भीतर एक सफल कार्यान्वयन और प्रशिक्षण की संभावना है।

मैंने 16 साल या उससे भी कम समय में टिक-टैक-टो खेलने के लिए एएनएन बनाने और प्रशिक्षित करने की कोशिश की ... और मैं असफल रहा। मैं पहले इस तरह के एक साधारण खेल को आजमाने का सुझाव दूंगा।

+0

तंत्रिका नेटवर्क केवल एक स्थिति का मूल्यांकन करना चाहिए। अन्य कार्य सभी संभावित चालों की गणना करते हैं। फिर प्रत्येक कदम के लिए, परिणामी स्थिति तंत्रिका नेटवर्क को दी जाती है जो मूल्यांकन के रूप में संख्यात्मक मूल्य प्रदान करती है। उदाहरण के लिए, व्हाइट -6.2 की तुलना में 4.5 की ओर बढ़ने वाला कदम उठाएगा। – caw

+0

वर्खन ने बताया कि स्कोर फ़ंक्शन बहुत भारी होगा और एएनएन के साथ प्रतिनिधित्व करना बहुत मुश्किल है। –

+0

मैं या तो टिक-टैक-टो प्रोग्राम नहीं कर सकता। मुझे पता नहीं है कि कैसे। इसलिए मैंने यहां पूछा कि इस तरह के तंत्रिका नेटवर्क को कैसे कार्यान्वित किया जाए। मेरी राय में, एक तंत्रिका नेटवर्क एक काफी अमूर्त बात है। मैं कल्पना कर सकता हूं कि यह कैसे काम करेगा, लेकिन मुझे नहीं पता कि उसे कैसे कोड किया जाए। तो मुझे उम्मीद है कि यहां कोई मेरी मदद कर सकता है। – caw

3

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

आपके विकल्प जैसे मैं उन्हें देखता हूं हैं:

  • बोर्ड राज्य का मूल्यांकन करने और नेटवर्क को प्रशिक्षित करने के लिए कुछ ह्युरिस्टिक फ़ंक्शन का विकास करें। लेकिन यह सवाल उठता है कि एएनएन का उपयोग क्यों करें, जब आप केवल अपने ह्युरिस्टिक का उपयोग कर सकते हैं।

  • कुछ सांख्यिकीय उपाय जैसे "इस बोर्ड कॉन्फ़िगरेशन से सफेद या काले से कितने गेम जीते थे?", जो आपको सफेद या काले रंग के बीच फिटनेस मान देगा। उसमें कठिनाई आपके समस्या स्थान के आकार के लिए आवश्यक प्रशिक्षण डेटा की मात्रा है।

दूसरे विकल्प के साथ

आप हमेशा यह ग्रैंडमास्टर खेल से बोर्ड दृश्यों को खिलाने और आशा है कि एएनएन एक समाधान विकसित करने के लिए पर्याप्त कवरेज नहीं है हो सकता है।

समस्या की जटिलता के कारण मैं सबसे बड़ा नेटवर्क (यानी: आंतरिक नोड्स के बहुत सारे) को फेंकना चाहता हूं क्योंकि मैं प्रशिक्षण को बहुत धीमा किए बिना कर सकता था।

+0

धन्यवाद। मैंने पहले से ही इसका परीक्षण किया है। यह काम करेगा लेकिन आपको पहले से ही लिखे गए प्रशिक्षण डेटा की एक अकल्पनीय राशि की आवश्यकता होगी। शतरंज में, लगभग 2,28x10^46 संभावित पद हैं, इसलिए आपके पास प्रत्येक स्थिति के लिए पर्याप्त प्रशिक्षण डेटा नहीं होगा। – caw

+0

हां, हालांकि एक तंत्रिका नेटवर्क का विचार यह है कि यह सीमित प्रशिक्षण सेट को सामान्यीकृत करने में सक्षम होना चाहिए। उस समारोह की जटिलता पर बहुत निर्भर करता है जिसे आप फिट करने की कोशिश कर रहे हैं, जो शतरंज के मामले में पागल हो जाएगा। – geofftnz

+0

ठीक है, आपने मुझे विश्वास दिलाया है। लेकिन आप इसे कैसे कोड कर सकते हैं, यद्यपि? मुझे इसका परीक्षण करना अच्छा लगेगा, हालांकि मुझे पता है कि मेरा इंजन कभी समर्थक खिलाड़ी नहीं होगा। – caw

9

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

+0

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

+2

@ एटिलाफिलिज नं। एक मैनुअल (प्रोग्रामर द्वारा लिखित) मूल्यांकनकर्ता + गहरी खोज एनएन को प्रशिक्षित करने के लिए उपयोग की जाती है, उम्मीद है कि एनएन + उथले खोज मैनुअल मूल्यांकनकर्ता + उथली खोज से बेहतर प्रदर्शन करें। यदि यह काम करता है, तो एनएन मैन्युअल मूल्यांकनकर्ता से बेहतर है। – maaartinus

0

यह कहने के लिए यहां आया कि सिलास ने क्या कहा। एक मिनीमैक्स एल्गोरिदम का उपयोग करके, आप एन चाल को आगे देखने में सक्षम होने की उम्मीद कर सकते हैं। अल्फा-बीटा छंटनी का उपयोग करके, आप इसे सैद्धांतिक रूप से 2 * एन चालों तक बढ़ा सकते हैं, लेकिन अधिक यथार्थवादी 3 * एन/4 चालें। तंत्रिका नेटवर्क वास्तव में यहां उपयुक्त हैं।

शायद एक आनुवांशिक एल्गोरिदम का उपयोग किया जा सकता है।

+0

डाउनवॉटेड - यह प्रश्न के लिए प्रासंगिक कैसे है, जो विशेष रूप से * तंत्रिका नेटवर्क * के बारे में पूछता है? – Arafangion

0

आपका इनपुट एल्गोरिदम ध्वनि है - सभी पदों, सभी टुकड़े, और दोनों खिलाड़ियों के लिए जिम्मेदार हैं। आपको गेमबोर्ड की हर पिछली स्थिति के लिए एक इनपुट परत की आवश्यकता हो सकती है, ताकि पिछली घटनाओं को फिर से इनपुट के रूप में उपयोग किया जा सके।

आउटपुट परत (कुछ रूप में) टुकड़ा को स्थानांतरित करने के लिए, और स्थान को स्थानांतरित करने के लिए देना चाहिए।

एक कनेक्टोम का उपयोग करके आनुवंशिक एल्गोरिदम लिखें जिसमें सभी न्यूरॉन वजन और synapse शक्तियां शामिल हैं, और प्रत्येक में बड़ी संख्या में कनेक्टम के साथ कई अलग-अलग जीन पूल शुरू करें।

उन्हें एक दूसरे को खेलते हैं, सबसे अच्छा मुट्ठी भर, क्रॉसओवर रखें और पूल को दोबारा लगाने के लिए सर्वोत्तम कनेक्टोम को म्यूट करें।

8

यदि कोई व्यक्ति यादृच्छिक रूप से इस पृष्ठ को पाता है। अब हम जो जानते हैं उसे देखते हुए, ओपी प्रस्ताव क्या निश्चित रूप से संभव है। वास्तव में हम इसे एक बहुत बड़े राज्य स्थान के साथ एक खेल के लिए करने में कामयाब रहे - जाओ (https://deepmind.com/alpha-go)।

3

यह संभव है, लेकिन किसी भी माध्यम से तुच्छ नहीं है।

https://erikbern.com/2014/11/29/deep-learning-for-chess/

उसके मूल्यांकन कार्य प्रशिक्षण के लिए उन्होंने कंप्यूटिंग शक्ति ऐसा करने के लिए का एक बहुत उपयोग किया।

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

संबंधित मुद्दे