एपीआई के साथ शतरंज इंजन


11

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

कम अस्पष्ट होने के लिए, यहां इस API की मुझे आवश्यकता है:

  • इंजन में विशिष्ट खेल लोड करने में सक्षम हो
  • खेल की स्थिति का मूल्यांकन करने में सक्षम हो
  • एक चाल बनाने में सक्षम हो

तो, क्या किसी को एक इंजन पता है जो इसके कार्यों के लिए एक स्पष्ट एपीआई प्रदान करता है?


2
यूसीआई एक एपीआई है जो कमांड लाइन स्विच और मानक इनपुट के माध्यम से कमांड प्राप्त करता है। आप उन कमांड के चारों ओर एक आवरण लिख सकते हैं और फ़ंक्शन द्वारा कॉल कर सकते हैं।
मसूद

हां, यूसीआई ठीक वही है जो आप ढूंढ रहे हैं। वे सभी कार्यक्रम यूसीआई का समर्थन करते हैं, जो कि कैसे उन्हें चेसबेस जैसे कार्यक्रमों में एकीकृत किया जाता है।
dfan

जवाबों:


6

जैसा कि दूसरों ने कहा है, यूसीआई वह एपीआई है जो आप चाहते हैं। प्रोटोकॉल के पूर्ण विनिर्देशों यहाँ है (एक पाठ फ़ाइल के लिए ज़िप फ़ाइल अर्क): http://download.shredderchess.com/div/uci.zip

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

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

यहां कमांड लाइन पर कार्रवाई में UCI का एक उदाहरण है:

bash-3.2$ ./stockfish-5-64 
Stockfish 5 64 by Tord Romstad, Marco Costalba and Joona Kiiski
uci
id name Stockfish 5 64
id author Tord Romstad, Marco Costalba and Joona Kiiski

option name Write Debug Log type check default false
option name Write Search Log type check default false
option name Search Log Filename type string default SearchLog.txt
option name Book File type string default book.bin
option name Best Book Move type check default false
option name Contempt Factor type spin default 0 min -50 max 50
option name Mobility (Midgame) type spin default 100 min 0 max 200
option name Mobility (Endgame) type spin default 100 min 0 max 200
option name Pawn Structure (Midgame) type spin default 100 min 0 max 200
option name Pawn Structure (Endgame) type spin default 100 min 0 max 200
option name Passed Pawns (Midgame) type spin default 100 min 0 max 200
option name Passed Pawns (Endgame) type spin default 100 min 0 max 200
option name Space type spin default 100 min 0 max 200
option name Aggressiveness type spin default 100 min 0 max 200
option name Cowardice type spin default 100 min 0 max 200
option name Min Split Depth type spin default 0 min 0 max 12
option name Threads type spin default 1 min 1 max 128
option name Hash type spin default 32 min 1 max 16384
option name Clear Hash type button
option name Ponder type check default true
option name OwnBook type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Emergency Move Horizon type spin default 40 min 0 max 50
option name Emergency Base Time type spin default 60 min 0 max 30000
option name Emergency Move Time type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 80 min 10 max 1000
option name UCI_Chess960 type check default false
uciok
isready
readyok
quit
bash-3.2$ 

मेरे द्वारा जारी किए गए आदेश यूसीआई, पहले से ही थे और छोड़ दिए गए थे।

यूसीआई कमांड का उपयोग करने के लिए आपके पास अनिवार्य रूप से दो मुख्य विकल्प हैं; आप एक मौजूदा इंटरफ़ेस (जैसे शतरंज, अखाड़ा और दूसरों का एक मेजबान) का उपयोग कर सकते हैं या आप इंजन या इंजन के समूह को निर्देश जारी करने के लिए अपना कोड लिख सकते हैं। मेरा मानना ​​है कि यूसीआई इंजन तक पहुँचने के लिए पहले से ही पायथन रैपर हो सकते हैं, लेकिन मुझे दोबारा जाँच करने की आवश्यकता होगी। निश्चित रूप से अजगर-शतरंज (आयात शतरंज) और pychess (आयात pychess) है, मैं सिर्फ उनके कार्यों की सीमा को याद नहीं कर सकता। मुझे याद नहीं आ रहा है कि पाइकस कहां दुबक रहा है (शायद गिथब या गूगल कोड), लेकिन पाइथन-शतरंज को पाइप के साथ स्थापित किया जा सकता है।


यूसीआई टुकड़ों के मूल्य को निर्धारित करने के लिए एपीआई प्रदान नहीं करता है।
स्नोक्रैश

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

मैं असहमत हूं। standardमूल्य नहीं हैं।
स्नोक्रैश

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

3

मैंने "शतरंज के इंजन आपी" पर गुगली की है, लेकिन किसी भी वास्तविक एपीआई को नहीं देखा है। जैसा कि आपके प्रश्न की टिप्पणियों में सुझाया गया है, मैं यूसीआई के साथ जाऊंगा। यह जीयूआई के शतरंज इंजनों के साथ संवाद का तरीका भी है।

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

http://stockfishchess.org/


1
स्टॉकफिश से बात करने के लिए एपीआई भी यूसीआई है।
dfan

1
वास्तव में यह है। लेकिन यूसीआई या कोड में डाइविंग का उपयोग इस बात पर निर्भर करेगा कि इंजन का उपयोग कैसे किया जा रहा है और क्या नहीं। उस पर सवाल स्पष्ट नहीं था।
रफीक

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

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

क्षमा करें, लेकिन मुझे समझ में नहीं आ रहा है कि आप इंजन का उपयोग करने के लिए कैसे जा रहे हैं इसका क्या मतलब है। क्या आप कृपया इसे स्पष्ट कर सकते हैं?
साल्वाडोर डाली


1

बैच फर्स्ट एक JIT संकलित शतरंज इंजन है जिसे पायथन में लिखा गया है, जिसे Numba का उपयोग करके संकलित किया गया है, जो आसान C ++ इंटरफेसिंग और यहां तक ​​कि पायथन इंटरफेसिंग को आसान बना देगा।

जबकि बैच फर्स्ट खुद एक इंजन है जो एपीआई नहीं है, यह पायथन-शतरंज पैकेज पर बहुत अधिक उपयोग करता है और निर्भर करता है , जो एक भयानक एपीआई है।

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

इंजन का कोर एक शून्य-खिड़की k-best-पहला खोज एल्गोरिदम है जिसका उपयोग बैचों में ANN का मूल्यांकन करने के लिए किया जाता है।

पूर्ण प्रकटीकरण, मैं बैच फर्स्ट इंजन का लेखक हूं।


-1

यहाँ स्टॉकफ़िश का एक पोर्ट संस्करण .Net: https://github.com/bpfliegel/Portfish है

इस इंजन का उपयोग करने के लिए (एक बार संकलित होने के बाद), आप Arena http://wwww.playwitharena.com या ScidVSPC http://scidvspc.sourceforge.net जैसे GUI को nedd करेंगे । इन एप्लिकेशन का उपयोग एक अच्छा इंटरफ़ेस प्रदान करने और आपको गेम / पोजीशन लोड करने, उन्हें विश्लेषण करने के लिए किया जाता है (मुझे पूरा यकीन है कि आप किसी गेम को pgn पर लोड कर सकते हैं और इंजन द्वारा इसका विश्लेषण कर सकते हैं जैसे "n सेकंड प्रति चाल" या " एन प्रति चाल "), इंजनों के बीच मैच चलाएं, आदि

प्रत्येक (लगभग) प्रत्येक शतरंज इंजन में आपको uci.cs या xboard.cs फ़ाइल जैसी कोई चीज़ मिलनी चाहिए जो इस संचार कार्य के लिए प्रतिबद्ध है।

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

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