एक शतरंज इंजन लिखने के लिए सबसे अच्छा तरीका? [बन्द है]


15

मैं एक शतरंज के प्रति उत्साही और एक प्रोग्रामर हूं। मैंने हाल ही में अपने शतरंज और प्रोग्रामिंग ज्ञान का उपयोग करके एक शतरंज इंजन बनाने का निर्णय लिया है। तो यहाँ मेरा सवाल है:

शतरंज इंजन लिखते समय क्या भाषा (मैं जावा, सी ++ और पायथन से परिचित हूं) और कार्यप्रणाली को अनुकूलित करना चाहिए?

थोड़ा मार्गदर्शन बहुत सराहना की जाएगी।

संपादित करें:

इसलिए मैंने इसे जावास्क्रिप्ट में बनाने का फैसला किया। मैं इस शतरंज UI को github से डाउनलोड करता हूं और अब मैं सब सेट कर रहा हूं! मेरा पहला कदम इसके लिए कानूनी कदम लिखना होगा। तो क्या कोई मुझे सही दिशा में ले जा सकता है? (मैं jQuery के लिए नया हूं लेकिन प्रोग्रामिंग अनुभव का एक बहुत कुछ है)।

पुनश्च: मैं बहुत कुशल इंजन बनाने की कोशिश नहीं कर रहा हूं (मुझे इसका रास्ता बहुत कठिन मालूम है), मैं सिर्फ इस प्रक्रिया से परिचित होना चाहता हूं और रास्ते में कुछ नई तकनीकों को सीखना चाहता हूं।


5
मुख्यधारा की कोई भी भाषा और कार्यप्रणाली, एक शतरंज इंजन (उस संबंध में) के बारे में कुछ खास नहीं करेगी।
यानिस

3
मैं लक्ष्यों के बारे में अधिक विशिष्ट होगा। यदि आप बस इसे रॉट नियमों की एक श्रृंखला के लिए उबालना चाहते हैं, तो यह एक बड़ा काम है लेकिन कोई भी प्रोग्रामर उस क्रूर बल तरीके से हल कर सकता है। यदि आप पैटर्न की मान्यता या जोखिम बनाम इनाम जैसी चीजों में शामिल होना चाहते हैं, तो यह वह जगह है जहां जवाब रसपूर्ण हो सकते हैं।
एरिक रेपेन

क्या आपने शतरंज इंजन विकी के तहत शैक्षणिक खंड की जाँच की है। ये विशेष रूप से शतरंज प्रोग्रामिंग सिखाने के लिए बने हैं और सभी ओपन सोर्स हैं। यहां तक ​​कि अगर आप वास्तविक स्रोत कोड का उपयोग नहीं करते हैं, तो प्रलेखन आमतौर पर समझाएगा कि विकास के पीछे क्या है: en.wikipedia.org/wiki/Chess_engine#Categorifications
user60812

1
वास्तव में कठिन हिस्सा यह है कि किसी दिए गए स्थान का मूल्यांकन कैसे करें क्योंकि आपको यह देखने की आवश्यकता है कि क्या स्थिति A चुनने के लिए स्थिति B से बेहतर है।

1
यह बिल्कुल स्पष्ट नहीं है कि आप क्या जानना चाहते हैं। क्या आपने किसी पद के प्रतिनिधित्व पर निर्णय लिया है? यदि हां, तो अगला कदम एक कदम जनरेटर को लिखना और परीक्षण करना है। निश्चित नहीं है कि आपको क्या लगता है कि jQuery के साथ क्या करना है।
केविन क्लाइन

जवाबों:


19

2072-रेटेड शतरंज खिलाड़ी यहाँ। मैंने एक सप्ताह के अंत में शुद्ध जावास्क्रिप्ट में इस वेबसाइट को बनाया । यह एक शतरंज इंजन नहीं है (मैंने इसे एक व्यापक शतरंज 960 इंजन के रूप में मनोरंजक शुरुआती स्थिति बनाने के लिए डिज़ाइन किया है), लेकिन यह एक प्रारंभिक बिंदु है। स्रोत कोड है यहाँ

एक कार्यात्मक बोर्ड बनाने में बहुत सारी जटिलताएं शामिल हैं। इसमें शामिल है:

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

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

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

यह सब पहली बार में एल्गोरिथ्म को डिजाइन करने के शीर्ष पर है, जिस पर बहुत सारी जानकारी उपलब्ध है।

किस भाषा के साथ जाना है (हालांकि मुझे लगता है कि आपने पहले से ही जावास्क्रिप्ट पर निर्णय लिया है), मुझे लगता है कि यह आपके लक्ष्य पर किसी और चीज की तुलना में अधिक निर्भर करता है। मैं अपना ऑनलाइन बनाना चाहता था (और जावास्क्रिप्ट में बेहतर होना), इसलिए जावास्क्रिप्ट मेरी पसंद थी। कोई भी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा हालांकि करेगी।

एक बार जब आप जो कर रहे हैं, उसके साथ सहज हो जाते हैं, तो निम्नलिखित संसाधन संभवतः मददगार साबित होंगे:

सौभाग्य!


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

मैं सहमत हूँ। मैं वास्तव में विविध परियोजनाओं को फिर से शुरू करना चाहता था, लेकिन ईमानदारी से मैं सिर्फ शतरंज की चीजों को विकसित करने का आनंद लेता हूं।
एंड्रयू लैथम

डोमेन lathamcity.com वर्तमान में बिक्री के लिए है। क्या अब कोड एक अलग वेबसाइट पर उपलब्ध है?
IkWeetHetOokNiet

14

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

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


स्थापित इंटरफ़ेस प्रोटोकॉल में से एक के अनुरूप आप अपने इंजन के साथ किसी भी मौजूदा दृश्यपटल का उपयोग कर सकते हैं।

मुझे उम्मीद है कि अल्फा बीटा को लिखने में सालों नहीं लगेंगे
केविन

1
नहीं लिख साल, लेकिन साल grok की :)
ddyer

9

आप शतरंज के नियमों से परिचित हैं, बुनियादी तकनीकों के बारे में एक अच्छा प्रारंभिक बिंदु है http://www.frayn.net/beowulf/theory.html आप यहां पा सकते हैं सामग्री और लिंक की एक व्यापक संग्रह: http: // chessprogramming .wikispaces.com / और तीसरा: दूसरों के कोड से सीखें। Crafty के स्रोतों पर एक नजर है । यह अग्रणी ओपन सोर्स इंजन है। टेस्ट मामलों के बारे में सोचना बहुत महत्वपूर्ण है, यह देखने के लिए कि क्या आप सुधार करते हैं: उदाहरण के लिए 3 या 4 आंकड़ों के साथ कुछ आसान सरल अंत-गेम पदों के साथ शुरू करें।


3

जैसा कि उल्लेख किया गया है, शतरंज इंजन बनाने में कुछ भी कठिन नहीं है। शायद, आपको इस बात पर ध्यान केंद्रित करना चाहिए कि कैसे उपयोग करना चाहते हैं और (संभावित रूप से) इस एप्लिकेशन को तैनात करें क्योंकि यह संभवतः आपकी भाषा का चुनाव करेगा।

यदि यह केवल एक मजेदार अभ्यास है, तो आप इसे जावास्क्रिप्ट में कोड करना और इसे वेब पेज के रूप में तैनात करना चाह सकते हैं। यदि आप इसे एक विशेषज्ञ शतरंज के खेल में कभी नहीं बनाना चाहते हैं, तो कम से कम अन्य लोग इसके और इसके स्रोत कोड के साथ खेल सकेंगे।

यदि आप एक ही समय में एक विशेष तकनीक सीखना चाहते हैं, तो WPF कहते हैं, तो यह एक पत्थर से दो पक्षियों को मारने का एक अच्छा तरीका हो सकता है। MVVM इस ऐप के लिए ओवरकिल हो सकता है, लेकिन आप इसे कम से कम सीखेंगे।

यदि आप Android उपकरणों को लक्षित करना चाहते हैं, तो जावा एक अच्छा विकल्प होगा। इसी तरह, iOS उपकरणों के लिए Objective-C।

लंबी और छोटी, भाषा का चुनाव शून्य में नहीं होता है।


3

मुझे लगता है कि आप पहले से ही मिन-मैक्स, पेड़ों और छंटाई, हेयुरिस्टिक और अन्य मूल बातें की अवधारणा के बारे में जानते हैं और जो मैं यहां लिख रहा हूं वह केवल कुछ विवरण हैं जिन्हें कम करके आंका जा सकता है।

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

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

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

1 - अपनी बोर्ड प्रस्तुति के बारे में निर्णय लें

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

2 - अपने आप को एक शुरुआती किताब खोजें।

हमने ये किया, लेकिन फिर भी हम अच्छे होने से बहुत दूर थे:

3 - एक अच्छा शतरंज इंजन को 6 चाल (12 प्लाई) से आगे देखने में सक्षम होना चाहिए।

तो हमने जो किया, वह था मृत समय का उपयोग करना (यदि यह एक मानव बनाम कंप्यूटर इंजन है)।

4 - उस समय का उपयोग करें जब प्रतिद्वंद्वी आपके पेड़ के कुछ स्तरों को बनाने के लिए सोच रहा है।

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

5 - इस विशिष्ट समस्या (शतरंज) के लिए प्रोग्रामिंग चालें जानें

मैं और मेरा दोस्त, इस अवस्था में, अभी भी बुरे थे: / हम जो कर सकते थे -और हम आंशिक रूप से करते थे- परिकलित पदों को बचाने के लिए था। यदि आप एक स्थिति की गणना करते हैं, तो इसे भविष्य के लिए बचाएं! वही खोज वृक्ष में छोरों के लिए जाता है। बिंदु को कुशलतापूर्वक सहेजना / पुनः प्राप्त करना था:

6 - आपके द्वारा उत्पन्न डेटा को बचाओ ... कुशलता से!

और अंत में:

7 - अधिकतम अनुकूलन वाला कोड।

यह समस्या CPU समय और मेमोरी दोनों में बेहद महंगी है। अपने कोड को बहुत कुशलता से लिखना बहुत महत्वपूर्ण है। याद रखें कि हम 35 के शाखा कारक के बारे में बात कर रहे हैं। इसका मतलब बेकार है "अगर" कहीं आपके अनुमान में, 3.3792205e+18बेकार में बदल सकता है "अगर आपके खोज पेड़ में कहीं गहरा है।

शतरंज प्रोग्रामिंग एक बहुत ही दिलचस्प चुनौती है और यह समय है कि आप अपनी प्रोग्रामिंग क्षमताओं को एक गंभीर परीक्षा में डाल सकते हैं। कुछ और बिंदु हैं जो मैं सुझा सकता हूं लेकिन मुझे यकीन है कि आप उन्हें खुद से खोज लेंगे। और भी कई बाते जो मुझे नहीं पता लेकिन आप उन्हें इंटरनेट पर पा सकते हैं!

गुड लक और मजा करें!

ps मुझे जावास्क्रिप्ट अच्छी तरह से पता नहीं है, लेकिन कुछ मुझे समस्या की कठिनाई के आधार पर बता रहा है, हो सकता है कि C ++ की पेशकश करने वाले सभी को देखते हुए, जावास्क्रिप्ट को छोड़ना और C ++ में करना बेहतर होगा।


2

अपने संपादन के अनुसार, आप 'कानूनी' चालों को परिभाषित करने के चरण तक हैं।

शतरंज में चालों का वर्णन करने के दो तरीके हैं। वर्णनात्मक संकेतन और बीजगणितीय संकेतन। आप जो चाहते हैं, वह एक ऐसा कार्य है, जो टुकड़ा लेता है, स्थिति शुरू करता है और मापदंडों के रूप में स्थिति को समाप्त करता है। जैसे। QN1 से QB2 के लिए नाइट अमान्य है, लेकिन QN1 से Q2 के लिए नाइट मान्य है। इसके बारे में सोचकर, बीजगणितीय संकेतन आसानी से 'सापेक्ष' स्थिति की गणना करने की क्षमता के कारण सरल हो सकता है।

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

एक बार जब आप प्रत्येक टुकड़े के लिए कानूनी और गैरकानूनी चालों को पर्याप्त रूप से कवर कर लेते हैं, तो मैं अन्य चर (जैसे कि एक राजा को 'चेक' और 'मेट' की स्थिति में ले जाना) के लिए चेक में जोड़ना शुरू करूँगा।

मैं जावास्क्रिप्ट में व्यवहार परीक्षण के लिए यूनिट परीक्षणों और चमेली के लिए क्यूनिट की सलाह देता हूं ।


1

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

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

शुभ लाभ


1

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

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

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

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


0

आप वास्तव में किसी भी तरह से आप चाहते हैं जा सकते हैं, लेकिन ये विषय पर मेरे विचार हैं:

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

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

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


4
शतरंज इंजन का यूआई से कोई लेना-देना नहीं है, केवल "दिमाग" है, जो सबसे अच्छी चाल की गणना करता है।
सीएसई

@ सीएसई - यह इंजन की आपकी परिभाषा पर निर्भर करता है ।
डैनियल एए पल्सेमेकर

@ सीएसई - जैसा कि अदनान के शो से पता चलता है, वह वास्तव में एक यूआई की तलाश में था । तो मेरा जवाब प्रासंगिक है।
डैनियल एए Pelsmaeker

-8

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

अब अगर आप एक शतरंज खेलने वाले एआई को बनाना चाहते हैं जो खिलाड़ियों में से एक की भूमिका निभाएगा, तो वहीं चीजें मुश्किल हो सकती हैं। लेकिन फिर, भाषा का विकल्प यहां सबसे बड़ा मुद्दा नहीं है; शामिल AI सिद्धांतों को समझना है। यह एक बहुत अधिक महत्वपूर्ण कारक होगा।

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


15
मुझे लगता है कि आपको इस बारे में थोड़ा और विशिष्ट होना होगा कि पवित्र वार से बचने के लिए सी ++ इस विशेष कार्य के लिए क्यों अनुकूल है।
एरिक रेपेन

9
-1 एक पवित्र युद्ध शुरू करने के प्रयास के लिए।
डॉक्टर ब्राउन

1
आपको क्यों लगता है कि C ++ सामान्य रूप से बहुत खराब भाषा है?
एंथनी

मुझे लगता है कि आप निश्चित रूप से उसे गलत समझ गए। मैं एक राय के लिए साझा करता हूं, सी ++ शुरू करने के लिए एक अच्छी भाषा है, लेकिन जब आप जटिल सामान के साथ काम कर रहे हैं तो यह एक दर्द बन जाता है!
अदनान ज़ाहिद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.