ABK-GOFAI: Abak Evolution Backgammon खेलने के लिए एक Good Old-Fashion Artificial Intelligence।
Neural Network की मदद के बिना, Abak के लिए Artificial Intelligence (AI) विकसित करना एक कठिन काम साबित हुआ और समय के साथ एक स्पष्ट सीमा तक पहुँच गया। फिर भी इसे बनाना मज़ेदार था, और यह आज भी "easy", "normal" और "advanced" level पर खेलने के लिए काम कर रहा है। यह पोस्ट बताती है कि यह कैसे काम करता है और इसे कैसे बनाया गया।
Fase 1, GOFAI PHP
Abak का पहला AI version PHP में लिखा गया था और उसे 'out of memory' errors के साथ system crash कर देने वाला माना गया, लेकिन उसी ने C++ version का रास्ता खोला। मेरे लिए यह वह prototyping playground था जहाँ मैं समझने की कोशिश कर रहा था कि आखिर AI कैसे बनाई जाती है। पहली बार जब मैंने इसे webserver से जोड़ा (यानी मैं वास्तव में इसके खिलाफ खेल रहा था), तो इसे एक चाल चुनने में 15 बहुत लंबे सेकंड लगे, और जब मैंने server को अपने आप चलते देखा, तो मैं खुशी से पागल हो गया और शायद थोड़ा नाचा भी। पक्का नहीं।
Fase 2, GOFAI C
तो, AI का C/C++ Version — जो production environment में जाने वाला पहला version था — मेरा प्रिय GOFAI engine, PHP की राख से पैदा हुआ। यह nanoseconds में हजारों positions पर 29 analysis algorithms चलाता है, और इसका प्रवाह कुछ ऐसा है:
- एक board position और dice के set से शुरू करें।
- एक state की गणना करें
- हर संभव movement प्राप्त करें।
- हर movement का विश्लेषण करें और उसे score दें।
- 'best' Score चुनें।
यहाँ प्रक्रिया का एक diagram है।
यह चार मुख्य functions से मिलकर बना है :
- Get Actions (वैध Movements की गणना):
किसी Board Position और dice roll को देखकर यह हर वैध movement की गणना करता है।
वैध movements की संख्या 0 से लेकर कई दसियों हजार तक जा सकती है।
मैंने इसे जिस भी language में लिखा है, हर बार एक अनावश्यक recursive approach अपनाई है, जो code को debug करना बहुत कठिन बना देती है, लेकिन वह बहुत सुंदर लगती है। इसमें कुछ सौ lines of code हैं, लेकिन इसे लिखने में मुझे हफ्ते लगे, और फिर C में अनुवाद करने में भी कई हफ्ते लगे।
- Get state (Board state की गणना):
किसी Board Position को देखकर यह एक semantic state की गणना करता है; ये लगभग अपने आप समझ में आने वाले हैं:
- Starting
- MiddleGame
- Running without Hope
- Running with Hope
- EndGame
- Entering Home
-
Analyse Movement (Board Position के Scores की गणना):
यह अब तक का सबसे विस्तृत algorithm है। यह board की features का विश्लेषण करता है, जिनमें से हर एक score लौटाती है, और फिर पहले से गणना की गई state के आधार पर उन पर factors लागू करता है, ताकि game-state के अनुसार analysis के अलग-अलग पहलुओं को अलग महत्व दिया जा सके।
AI की शुरुआत 8 algorithms से हुई थी और यह 29 तक पहुँची, बस एक झलक:
- Columns Height
- Risk of Being hit
- Risk of Being trapped
- Home Strenght
- Pivots of escape
- Checkers at Bar
- Safe Checkers
इनमें से कई algorithms शुरुआत में बहुत बुनियादी थे या अस्तित्व में ही नहीं थे।
समय के साथ मैंने उन पर काम किया, features जोड़े और factors को fine-tune किया।
-
Select Action ("Best" Movement चुनना):
यदि आपको सिर्फ सबसे ऊँचा score चाहिए (जैसा Advanced Level करता है), तो यह algorithm अपेक्षाकृत सरल है।
Normal और Easy Level के लिए, यह best actions की सूची में से किसी move को random तरीके से चुनता है; उस सूची का size (या खराब moves के प्रति उसकी tolerance) level द्वारा निर्धारित होता है।
C की वजह से यह engine बिजली की तरह तेज है, इसलिए मैं इसे हमेशा primary get-actions function के रूप में उपयोग करूँगा।
Fase 3, GOFAI C Tune Up
इस engine को debug करने, troubleshoot करने और fine-tune करने के लिए मुझे कई tools बनाने पड़े ताकि decision-making process की निगरानी की जा सके। Neural Network के विपरीत, यहाँ हर decision की audit की जा सकती थी, तो कम-से-कम वह सुविधा थी।
यह प्रक्रिया मज़ेदार थी लेकिन दर्दनाक रूप से धीमी। मैंने CPU के खिलाफ बहुत खेला, और जब भी कोई खराब move दिखता, तो मैं इन tools पर आता कि देखें क्या गलत हुआ। कभी यह किसी algorithm को ठीक करने, किसी factor को tune करने, या नया analysis model बनाने तक ले जाता। और कभी-कभी — और यह सुंदर था — इसने मुझे अपनी Abak Evolution Strategies पर फिर से विचार करने पर मजबूर किया।
समय के साथ मेरे पास एक काफ़ी मजबूत AI थी, लेकिन उसे और बेहतर बनाना दिन-ब-दिन कठिन होता जा रहा था। code की इतनी सारी lines, इतने scenarios, इतने भारी operations थे कि code level पर debugging बहुत कठिन कार्य बन गया था, और factors को manually fine-tune करने से परिणाम नहीं मिल रहे थे।
Fase 4, निराशा
लेकिन मैं और चाहता था, क्योंकि मैं खुद Abak खेलता हूँ, और मज़े के लिए मुझे एक मजबूत खिलाड़ी चाहिए था, जबकि उस समय (और यहाँ तक कि जब मैं यह लिख रहा हूँ) इसे खेलने वाले इंसान बहुत कम थे।
और इस approach की कई कमियाँ हैं:
- यह board की current position के आधार पर state की गणना करता है, और उसी state का उपयोग हर valid action के लिए analysis algorithms के factors बदलने में किया जाता है। लेकिन वह action खुद state को बदल सकता था, और engine इसे ध्यान में नहीं रखता।
- factors की manual fine-tuning में बहुत अधिक समय लगता था। मज़ेदार समय थे, लेकिन बहुत अधिक।
- संभावित scenarios की संख्या को देखते हुए state की गणना करना बेहद कठिन है। यह हमेशा से एक flawed algorithm रहा है।
- Game Equity को सटीक रूप से गणना करना असंभव है, क्योंकि इस engine में हर analysis algorithm के लिए एक arbitrary score system है, और final score जीत की probability नहीं दर्शाता; यह केवल अलग-अलग board positions की तुलनात्मक score के रूप में काम करता है। आप कह सकते हैं कि इसका value absolute नहीं, relative है।
Fase 5, जागरण
और फिर, एक दिन, 2018 में, Google ने अपने AlphaGo Neural Network से GO Champion को हरा दिया, और बहुत हलचल मच गई। नई शानदार open source Machine Learning libraries उपलब्ध होने लगीं, और training process तेज करने के लिए home-GPUs का उपयोग किया जाने लगा।
बेशक, मुझे Neural Networks के बारे में थोड़ा-बहुत पहले से पता था, लेकिन मैंने कभी एक बनाई नहीं थी, और सच कहूँ तो मुझे लगता था कि यह मेरे सामर्थ्य से बाहर का काम है।
इसलिए मैं खुद को रोक नहीं पाया, और expert level अब GOFAI engine पर नहीं चलता — get-actions वाले हिस्से को छोड़कर।
लेकिन यह कहानी यहीं समाप्त होती है।
यदि आपने यहाँ तक सब पढ़ लिया, तो मैं सचमुच चकित हूँ।
यह पाठ SEO purposes के लिए ईमानदार Abak Evolution Team द्वारा लिखा गया था,
उर्फ Samy Garib।