पृष्ठभूमि
मेंस ( M achine E ducable N oughts A nd C rosses E ngine) 1960 के दशक में ब्रिटिश कंप्यूटर वैज्ञानिक डोनाल्ड मिक्सी द्वारा बनाए गए गेम नॉट्स एंड क्रॉस के लिए एक अल्पविकसित उथली मशीन लर्निंग एल्गोरिदम है। यह मूल रूप से 304 माचिस के साथ लागू किया गया था, प्रत्येक को एक बोर्ड की स्थिति और रंगीन मोतियों से युक्त (नौ रंगों में से एक, संभव चालों का प्रतिनिधित्व करते हुए) के साथ लेबल किया गया था। मिक्सी ने गणना की कि ये 304 माचिस बोर्ड पर चलने वाले हर संयोजन के लिए पर्याप्त थे।
आपके बीच और अधिक गणितीय यह महसूस कर सकता है कि एन एंड सी बोर्ड पर वास्तव में नॉट्स, क्रॉस और ब्लैंक्स के 19,683 संभावित संयोजन हैं; हालाँकि, उन्होंने इस संख्या में कटौती करने के तरीकों की गणना की (एल्गोरिथ्म को गति देने के लिए, और माचिस की तीली से कटने की संभावना)। सबसे पहले, उन्होंने सभी संभावित कदमों को हटा दिया, जैसे:
-------
|X|0|X|
| |0| |
|X|X| |
-------
(दो नॉटीज़ और चार क्रॉस)
इसके बाद, उन्होंने रोटेशन के लिए मुआवजा दिया। उदाहरण के लिए, यदि हम माचिस देखते हैं:
-------
| |0|0|
|X| |X|
| |0| |
-------
हम उसी बॉक्स का उपयोग कर सकते हैं
-------
| |X| |
|0| |0|
| |X|0|
-------
इसलिए, उपरोक्त रंग के मोती सापेक्ष स्थिति का प्रतिनिधित्व करते हैं, न कि निरपेक्ष। उदाहरण के लिए, अगर हमने कहा कि एक लाल मनका का मतलब शीर्ष-बाएँ है, तो हम बॉक्स के शीर्ष पर स्थित छवि को देखेंगे और देखेंगे:
-------
| |0|0|
|X| |X|
| |0| |
-------
तो हम जानते हैं कि इस मामले में यह बोर्ड है, तो लाल मनका का अर्थ होगा:
-------
|R|0|0|
|X| |X|
| |0| |
-------
लेकिन अगर यह बोर्ड है:
-------
| |X| |
|0| |0|
| |X|0|
-------
लाल मनका मतलब होगा
-------
| |X|R|
|0| |0|
| |X|0|
-------
इन परिवर्तनों ने घूर्णन और अकशेरुकी के लिए (सभी दिशाओं में, विकर्ण सहित) के लिए आवेदन किया। एक बार फिर, आपको केवल एक बार इस तरह से प्रत्येक माचिस को बचाने की आवश्यकता है: प्रत्येक परिवर्तन के लिए अलग-अलग वर्चुअल बॉक्स न बनाएं!
एक और सरलीकरण मिक्सी ने यह सुनिश्चित करने के लिए किया था कि कंप्यूटर पहले चला जाए। इस तरह, वह सभी प्रथम-स्तरीय चालों को हटा सकता है, शेष बचे हुए पांचवे हिस्से को हटा सकता है। अंत में, उन्होंने सभी गेम-एंडिंग बॉक्स को हटा दिया (क्योंकि इन चरणों पर आगे 'सामग्री' या चाल की आवश्यकता नहीं थी)।
अभी, एल्गोरिथ्म पर ही (यह बहुत सरल है):
- सबसे पहले, यह तय करें कि मोतियों के रंग क्या दर्शाते हैं। बोर्ड पर प्रत्येक स्थान का प्रतिनिधित्व करने के लिए आपको 9 रंगों की आवश्यकता होगी।
- खेल की शुरुआत में, 304 माचिस की प्रत्येक माला में मोती होते हैं। हालांकि मोतियों यादृच्छिक रंग के होते हैं (इसलिए डुप्लिकेट ठीक हैं), उन्हें संभव चालें होना चाहिए (इसलिए यदि बोर्ड राज्य की छवि मध्य-दाईं ओर 'O' दर्शाती है, तो आप उस बीड का उपयोग नहीं कर सकते हैं जो मध्य का प्रतिनिधित्व करता है- सही)।
- हर बार जब यह मेंस (एक्स) मोड़ होता है, तो उस पर छपे वर्तमान बोर्ड की स्थिति (या इसके कुछ परिवर्तन) के साथ माचिस खोजें।
- माचिस खोलें, और यादृच्छिक रूप से वहां कोई भी मनका चुनें।
- पता करें कि माचिस की डिब्बी पर चित्र को प्राप्त करने के लिए बोर्ड की स्थिति कैसे बदल दी गई है (उदाहरण के लिए 90 डीजी प्रतिस्वेदक घुमाया गया)। फिर, उस परिवर्तन को मनके पर लागू करें (जैसे शीर्ष-बाएँ बाएँ-बाएँ हो जाता है)।
- उस वर्ग में एक X रखें। माचिस से चयनित मनका निकालें। यदि बॉक्स को परिणामस्वरूप खाली छोड़ दिया जाता है, तो बॉक्स में तीन यादृच्छिक (संभव) मोतियों को डालें, और उनमें से एक को इस कदम के लिए चुनें।
- खेल खत्म होने तक 3-6 दोहराएं।
- अगर मेन्सक गेम जीत गया, तो हर माचिस के माध्यम से वापस जाएं। फिर, उस चाल पर किस रंग के मनके का उपयोग किया जाता है, इसे वापस ट्रेस करें। बॉक्स में मनके के उस रंग के दो रखो (ताकि मूल मनका + एक और हो, जिससे मेंस की संभावना बढ़ जाए जो अगली बार उस स्थिति में पहुंच जाए)
- यदि मेंस ने खेल को खो दिया, तो कुछ भी न करें ( मोतियों को प्रतिस्थापित न करें )।
- यदि मेंस ने खेल को आकर्षित किया है, तो उसके प्रत्येक चाल में उपयोग किए गए मनका को बदलें, लेकिन एक अतिरिक्त न जोड़ें, ताकि आप जो शुरू करते हैं उसके साथ छोड़ दें।
यह हमें एक एल्गोरिथ्म के साथ छोड़ देता है जो बहुत सरल है, लेकिन इसे लागू करना मुश्किल है। यह आपकी चुनौती का आधार बनता है।
यदि आप अभी भी भ्रमित हैं, तो http://chalkdustmagazine.com/features/menace-machine-educable-noughts-crosses-engine/ देखें - यह वही है जो मैंने तब पढ़ा जब मैंने पहली बार इस एल्गोरिथ्म के बारे में सीखा
चुनौती
कंप्यूटर के साथ टिक-टैक-टो का गेम खेलें। प्रत्येक चरण में, सभी माचिस की सामग्री का उत्पादन करें।
इनपुट
- कार्यक्रम की शुरुआत में एक नंबर, जिसमें कहा गया था कि आप कितने गेम मेंस के खिलाफ खेलना चाहते हैं
- फिर, मेंस की पहली बारी के बाद, आप अपनी चाल को दो वर्ण स्ट्रिंग के रूप में इनपुट करते हैं, पहला अक्षर "L", "R" या "M" (बाएं, दाएं या मध्य) Y अक्ष का संदर्भ देता है। फिर आप एक अन्य पत्र (फिर से, "एल", "आर", या "एम") इनपुट करते हैं, इस बार एक्स अक्ष का जिक्र करते हैं। सभी चाल और खेल के लिए दोहराएँ।
आउटपुट
- प्रत्येक नए गेम की शुरुआत में, आउटपुट "नया गेम"।
- खिलाड़ी द्वारा प्रत्येक चाल के बाद, बोर्ड को किसी भी उचित प्रारूप में आउटपुट करें। यह सुंदर दिखने की जरूरत नहीं है (जैसे बोर्ड के पदों का प्रतिनिधित्व करने वाले सरणियों की एक सरणी ठीक है)।
- खिलाड़ी द्वारा प्रत्येक कदम के बाद, मेंस को एक कदम उठाना चाहिए। मेंस के कदम के बाद बोर्ड का आउटपुट
- प्रत्येक गेम के बाद, सभी 304 माचिस की सामग्री का उत्पादन करें। बीड्स को एक अक्षर, एक रंग, चरित्र या जो भी स्ट्रिंग या पूर्णांक आपको पसंद है (कोई संकेत, अनाम फ़ंक्शन आदि) का प्रतिनिधित्व किया जा सकता है ।
नियम
- यह कोड-गोल्फ है , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
- मेंस की प्रतिक्रिया को देखने के बाद मुझे इनपुट चालों में सक्षम होना चाहिए। कोई भी 'इस समारोह में अपने सभी चालें पास नहीं करता है, और देखो कि खेल कैसे खेलता है'।
- खेलों के बीच बोर्ड को मंजूरी देनी चाहिए।
- माचिस बॉक्स को गेम के बीच साफ नहीं किया जाना चाहिए (यह मशीन लर्निंग को रीसेट कर देगा)
- आपके पास 304 माचिस होनी चाहिए। कोई भी इस एल्गोरिथ्म को सभी 19,683 माचिस के साथ लागू कर सकता है, लेकिन सीखना धीमा है (क्योंकि इसमें उपयोगी सामग्री के साथ उन सभी को प्राप्त करने के लिए बहुत सारे गेम की आवश्यकता होती है )।
- आउटपुट किसी भी उचित प्रारूप में हो सकता है, और इनपुट पीपीसीजी मानकों के अनुसार लिया जा सकता है (जब तक यह नियम 2 का अनुपालन करता है)। यदि आपको इनपुट प्रारूप को समायोजित करने की आवश्यकता है (जैसा कि ' इनपुट ' अनुभाग में वर्णित है ) तो यह ठीक है जब तक यह समझ में आता है।
- एक गेम तब समाप्त होता है जब कोई खिलाड़ी जीतता है (तीन पंक्ति में तिरछे, क्षैतिज या लंबवत रूप से) या यदि कोई ड्रॉ होता है (बोर्ड भरा हुआ है और कोई विजेता नहीं है)
- जबकि मेंस को संभावित चालें बनाने की जरूरत होती है (और प्रत्येक माचिस के अंदर केवल संभव मोती होते हैं), चुनौती के लिए आपको उपयोगकर्ता के इनपुट को मान्य करने की आवश्यकता नहीं है। यदि वे कुछ गलत टाइप करते हैं, तो आपका प्रोग्राम जो कुछ भी कर सकता है (पूरी तरह से पागल हो, त्रुटि फेंक, आदि) - आप मान सकते हैं कि इनपुट सही है।
[[0, 2, 6], [4, 8, 4, 3, 3], [7, 7, 7, 7, 7, 7, 7, 8], [1], ... [3, 3, 5, 4]]
:।