शतरंज इंजन लिखने के लिए किस प्रतिमान का उपयोग करना है?


9

यदि आप एक शतरंज खेल इंजन लिखने जा रहे हैं, तो आप किस प्रोग्रामिंग प्रतिमान का उपयोग करेंगे (OOP, प्रक्रियात्मक, आदि) और आप इसे क्यों चुनते हैं? शतरंज इंजन द्वारा, मेरा मतलब है कि एक प्रोग्राम का हिस्सा जो वर्तमान बोर्ड का मूल्यांकन करता है और कंप्यूटर के अगले कदम का फैसला करता है।

मैं पूछ रहा हूं क्योंकि मुझे लगा कि शतरंज का इंजन लिखना मजेदार हो सकता है। फिर यह मुझे समझ में आया कि मैं इसे कार्यात्मक प्रोग्रामिंग सीखने के लिए एक परियोजना के रूप में उपयोग कर सकता हूं। तब यह मुझे समझ में आया कि कुछ समस्याएं कार्यात्मक प्रतिमान के अनुकूल नहीं हैं। तब यह मुझे समझ में आया कि यह अच्छी चर्चा का चारा हो सकता है।


1
यह खरोंच से सी कंपाइलर लिखने के लिए समान है। मैं पहिए को फिर से नहीं लगाऊंगा। मैं पहले वाले का अध्ययन करूंगा।
जॉब

10
@ जॉब: मेरा लक्ष्य परिणाम के बजाय प्रक्रिया है। यहां तक ​​कि अगर मैं एक बहुत खराब इंजन के साथ समाप्त होता हूं, तो मुझे लगता है कि समस्या का विश्लेषण करने और उस पर हमला करने का एक तरीका विकसित करने की प्रक्रिया में मूल्य हो सकता है, खासकर अगर मैंने प्रक्रिया में कुछ नए प्रोग्रामिंग तरीके सीखे।
प्रहार

1
सौभाग्य। कोई भी वास्तविक नियोक्ता कभी भी आपको खरोंच से विकसित करने के लिए नहीं कहेगा, लेकिन एक साक्षात्कार के दौरान वे पूछ सकते हैं कि आप समस्या पर कैसे हमला करेंगे।
नौकरी '

6
@Job प्रोग्रामिंग लाइफ को अपनाने का एक बड़ा हिस्सा चीजों को कोड करना है, क्योंकि उनके लिए कोई निश्चित आवश्यकता नहीं है, लेकिन क्योंकि आप कर सकते हैं।

1
@ मर्क, जीवन को गले लगाने के बारे में?) = यात्रा, भाषाएं, थिएटर, कविता, सड़क पर, आदि। मुझे प्रोग्रामिंग पसंद है, लेकिन जब मैं इसे प्रति से नहीं कर रहा हूं, तो मेरे पास 1000 अन्य चीजें हैं।
जॉब

जवाबों:


7

जहाँ तक मुझे पता है कि मूल्यांकन एक समांतर समस्या नहीं है, लेकिन विभिन्न श्रृंखलाओं का मूल्यांकन करना है, इसलिए मैं निश्चित रूप से इसे कई कोर और मल्टीथ्रेडिंग का उपयोग करने के लिए लिखूंगा।

चाहे आप कार्यात्मक हैं या अर्ध-कार्यात्मक स्वाद का मामला हैं। व्यक्तिगत रूप से मैं OOP जाऊंगा और कार्यात्मक प्रोग्रामिंग और समानांतरकरण के लिए समर्थन का उपयोग करूँगा जो उदाहरण C # के लिए मौजूद है

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

वास्तव में मुश्किल स्थिति खेलने और मजबूत चाल के साथ कुछ गेम ढूंढें (वे चिह्नित हैं! या !!) और अपने इंजन को प्रशिक्षित और परीक्षण करने के लिए उनका उपयोग करें।


2

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


2

मैंने अपने शतरंज इंजन में OOP प्रतिमान को तुर्क नाम से चुना है । मेरे शतरंज इंजन का पहला संस्करण OOP के बजाय अधिक प्रक्रियात्मक लिखा गया था। तब मुझे लंबे कोड ब्लॉक और खराब डिज़ाइन के कारण मेरे शतरंज इंजन में सुधार करने में इतनी मेहनत मिली।

यह इस बात पर निर्भर करता है कि शतरंज इंजन लिखते समय आप क्या हासिल करना चाहते हैं। यदि आप एक शतरंज इंजन बनाना चाहते हैं, जो बहुत मजबूत है, तो धीमी गति से होने वाली बाइंडिंग के कारण ओओपी भाषाओं में ऐसा करना संभव नहीं है। अगर आप सिर्फ प्रोग्रामिंग सीखना चाहते हैं और शतरंज इंजन लिख कर भी मजा लेना चाहते हैं तो प्रबंधित भाषाएं और OOP आपका दोस्त होगा। मैं आपको सी # चुनने का सुझाव दे सकता हूं क्योंकि शतरंज इंजन को इसके साथ अधिक प्रक्रियात्मक तरीके से लिखना भी संभव है।


यह ईएलओ-वार दर कैसे करता है? चालाक की तुलना में?

@ Thorbjørn Ravn Andersen - C में लिखा गया एक श्रेष्ठ ओपन सोर्स शतरंज इंजन है और डॉ। रॉबर्ट एम। हयात द्वारा लिखा गया है, जो शतरंज की प्रोग्रामिंग में अपना जीवन बिता रहे हैं। दुर्भाग्यवश मैंने एलो रेटिंग का परीक्षण नहीं किया है क्योंकि अभी भी परीक्षण एलो रेटिंग से पहले कई चीजें हैं। वर्तमान में मूल्यांकन केवल टुकड़ा मूल्यों का मूल्यांकन कर रहा है, इसलिए इसका काफी कमजोर मूल्यांकन है और अभी भी मैंने सभी आवश्यक एल्गोरिदम को अभी तक लागू नहीं किया है। इस समय इस परियोजना पर खर्च करने के लिए मेरे पास दुर्भाग्य नहीं है। मुझे उम्मीद है कि एक दिन इस पर जारी रहना संभव होगा।
फ्रेशबल्ड फ्लड

माफ करना, मुझे लगा कि यह वास्तव में खेल सकता है। मेरी गलती।

@ Thorbjørn रावन एंडरसन - मैंने कुछ रिलीज़ प्रकाशित किए हैं और नवीनतम रिपॉजिटरी बदलाव के लिए तैयार है। मैं सिर्फ यह कहना चाहता था कि यह इस समय काफी कमजोर है।
फ्रेशबल्ड फ्लड 11'11

2

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

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

मैं अभी भी किसी को कार्यात्मक भाषा का उपयोग करते हुए शीर्ष 100 शतरंज इंजनों में तोड़ने का प्रयास करना चाहता हूं।

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