विज़ुअल इनपुट का उपयोग करके डियाब्लो 2 खेलने के लिए एक कृत्रिम तंत्रिका नेटवर्क को कैसे प्रशिक्षित किया जाए?


139

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

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

चीजों को ठोस बनाने के लिए, कार्य अपने चरित्र x अनुभव बिंदुओं को अपने स्वास्थ्य ड्रॉप 0 के बिना प्राप्त करना है, जहां अनुभव बिंदु को मारने वाले राक्षसों के माध्यम से प्राप्त किया जाता है। यहाँ गेमप्ले का एक उदाहरण दिया गया है:

यहाँ

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

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

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

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

अद्यतन (04/27/12):

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

अभी भी अधिक मूल्यवान इनपुट की तलाश है, विशेष रूप से वास्तविक समय में कार्रवाई के चयन की समस्या पर और कैसे ANN प्रसंस्करण के लिए रंग छवियों को सांकेतिक शब्दों में बदलना करने के लिए :-)

अद्यतन (10/21/15):

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


1
इस पेपर को देखें। : D ri.cmu.edu/pub_files/pub2/pomerleau_dean_1992_1/……
zerglord

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

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

@zerglord यदि आप यह कह सकते हैं कि आप अपने एकमात्र इनपुट स्रोत के रूप में स्क्रीन पर खींचे गए पिक्सेल का उपयोग करके एक) प्ले डियाब्लो 2 और बी) के अपने मानदंडों को कितनी मजबूती से रखना चाहते हैं। यदि आप अपने आप पर चीजों को आसान बनाना चाहते हैं, तो मुझे लगता है कि आपको उन लोगों में से एक (या दोनों) को आराम करना होगा - क्या आप ऐसा करने के लिए तैयार हैं?
स्टॉम्पचेन

1
बहुत व्यापक के रूप में बंद करने के लिए मतदान।
सिरो सेंटिल्ली 郝海东 冠状 iro i 法轮功 '

जवाबों:


54

मैं देख सकता हूं कि आप चिंतित हैं कि एएनएन को कैसे प्रशिक्षित किया जाए, लेकिन यह परियोजना एक ऐसी जटिलता को छिपाती है जिसके बारे में आपको जानकारी नहीं होगी। छवि प्रसंस्करण के माध्यम से कंप्यूटर गेम पर ऑब्जेक्ट / चरित्र की पहचान यह एक अत्यधिक चुनौतीपूर्ण कार्य है ( एफपीएस और आरपीजी गेम के लिए पागल नहीं कहेंगे )। मुझे आपके कौशल पर संदेह नहीं है और मैं यह भी नहीं कह रहा हूं कि यह नहीं किया जा सकता है, लेकिन आप एएनएन को लागू करने की तुलना में सामान को पहचानने पर काम करने में 10 गुना अधिक समय आसानी से खर्च कर सकते हैं (यह मानते हुए कि आपके पास पहले से ही डिजिटल इमेज प्रोसेसिंग तकनीकों का अनुभव है )।

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

मुझे याद है कि कोई और एक अलग तरह की युक्तियों की तलाश में आया था, लेकिन किसी भी तरह की परियोजना बहुत पहले नहीं थी। इसकी जाँच करना उचित है।

दूसरी ओर, यदि आप सुझाव स्वीकार कर रहे हैं, तो खेल में वस्तुओं की पहचान के लिए बेहतर / आसान दृष्टिकोण हो सकते हैं। लेकिन पहले, आइए इस परियोजना को आप जो चाहते हैं, उसके लिए कहें: एक स्मार्ट-बॉट

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

एक अन्य विधि , जो खेल के तहत काम करती है, इसमें प्रतिपादन जानकारी में हेरफेर करना शामिल है। खेल की सभी वस्तुओं को स्क्रीन पर प्रस्तुत किया जाना चाहिए। इसका मतलब यह है कि सभी 3 डी वस्तुओं के स्थानों को अंततः प्रसंस्करण के लिए वीडियो कार्ड पर भेजा जाएगा। कुछ गंभीर डिबगिंग के लिए तैयार रहें।

इस उत्तर में मैंने इमेज प्रोसेसिंग के माध्यम से जो आप चाहते हैं उसे पूरा करने के लिए 2 विधियों का संक्षेप में वर्णन किया है। यदि आप उन में रुचि रखते हैं, तो आप उनके बारे में अधिक जानकारी पा सकते हैं ऑनलाइन खेल (अध्याय 6), विषय पर एक उत्कृष्ट पुस्तक।


43

अद्यतन 2018-07-26: यह बात है! अब हम उस बिंदु पर आ रहे हैं, जहाँ इस तरह का खेल सॉल्व होगा! OpenAI का उपयोग करते हुए और DotA 2 के खेल के आधार पर, एक टीम एक AI बना सकती है जो अर्ध-पेशेवर गेमर्स को 5v5 गेम में हरा सकती है । यदि आप DotA 2 को जानते हैं, तो आप जानते हैं कि यह खेल यांत्रिकी के संदर्भ में डियाब्लो जैसे गेम से काफी मिलता-जुलता है, लेकिन कोई यह तर्क दे सकता है कि टीम खेलने के कारण यह और भी जटिल है।

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

5 अगस्त 2018 (10 दिनों में!) पर , इस एआई को शीर्ष डॉट 2 गेमर्स के खिलाफ गड्ढे में डालने की योजना है। यदि यह काम करता है, तो एक बड़ी क्रांति की उम्मीद करें, शायद गो गेम को सुलझाने के रूप में ध्यान न दिया जाए, लेकिन यह खेल एआई के लिए एक बहुत बड़ा मील का पत्थर होगा!

UPDATE 2017-01: अल्फ़ागो की सफलता के बाद से यह क्षेत्र बहुत तेजी से आगे बढ़ रहा है, और लगभग हर महीने गेम पर मशीन लर्निंग एल्गोरिदम के विकास की सुविधा के लिए नए ढांचे हैं। यहाँ नवीनतम लोगों की एक सूची है जो मैंने पाया है:

  • OpenAI's यूनिवर्स : मशीन लर्निंग का उपयोग करके वस्तुतः किसी भी खेल को खेलने के लिए एक मंच । एपीआई पायथन में है, और यह वीएनसी रिमोट डेस्कटॉप वातावरण के पीछे गेम चलाता है, इसलिए यह किसी भी गेम की छवियों को कैप्चर कर सकता है! आप शायद मशीन सीखने के एल्गोरिथ्म के माध्यम से डियाब्लो II खेलने के लिए यूनिवर्स का उपयोग कर सकते हैं!
  • OpenAI का जिम : यूनिवर्स के समान लेकिन सुदृढीकरण सीखने वाले एल्गोरिदम को विशेष रूप से लक्षित करना (इसलिए यह अल्फागो द्वारा उपयोग किए जाने वाले ढांचे के सामान्यीकरण की तरह है लेकिन बहुत अधिक गेम के लिए)। उदमी पर एक कोर्स है जो ओपनएआई जिम का उपयोग करके ब्रेकआउट या डूम जैसे खेलों के लिए मशीन सीखने के आवेदन को कवर करता है।
  • टॉर्चर : मशाल (मशीन लर्निंग फ्रेमवर्क) और स्टारक्राफ्ट: ब्रूड वॉर के बीच एक सेतु ।
  • pyGTA5 : केवल स्क्रीन कैप्चर ( ऑनलाइन बहुत सारे वीडियो के साथ) का उपयोग करके GTA5 में सेल्फ-ड्राइविंग कार बनाने का प्रोजेक्ट ।

बहुत ही रोमांचक समय!

महत्वपूर्ण अद्यतन (2016-06): जैसा कि ओपी ने उल्लेख किया है, केवल दृश्य इनपुट का उपयोग करके गेम खेलने के लिए कृत्रिम नेटवर्क को प्रशिक्षित करने की यह समस्या कई गंभीर संस्थानों द्वारा दी जा रही है, जिसमें काफी आशाजनक परिणाम हैं, जैसे डीपमाइंड डीप-क्लेर्निंग-नेटवर्क (DQN) )

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

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

और परिणाम काफी आश्चर्यजनक हैं, उनके वेबपेज पर वीडियो और अच्छे ट्यूटोरियल (पायथन में) देखें!

Quake 3 Arena के लिए भी एक ऐसी ही परियोजना है, जिसे Quagents कहा जाता है , जो अंतर्निहित गेम डेटा को आसान API एक्सेस प्रदान करता है, लेकिन आप इसे स्क्रैप कर सकते हैं और केवल अपने एजेंट को नियंत्रित करने के लिए स्क्रीनशॉट और एपीआई का उपयोग कर सकते हैं।

अगर हम केवल स्क्रीनशॉट का उपयोग करते हैं तो ऐसा प्लेटफॉर्म क्यों उपयोगी है? यहां तक ​​कि अगर आप अंतर्निहित गेम डेटा तक नहीं पहुंचते हैं, तो ऐसा प्लेटफॉर्म प्रदान करता है:

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

संक्षेप में, इन प्लेटफार्मों के बारे में महान बात यह है कि वे पिछले तकनीकी मुद्दों से बहुत कुछ कम करते हैं , जिनसे आपको निपटना था (गेम इनपुट में हेरफेर कैसे करें, परिदृश्यों को कैसे सेटअप करें, आदि) ताकि आपको बस सीखने के एल्गोरिथ्म से निपटना पड़े। अपने आप।

तो अब, काम करने के लिए और हमें सबसे अच्छा एआई दृश्य बॉट बनाने के लिए;)


पुरानी पोस्ट केवल दृश्य इनपुट पर निर्भर एक एआई को विकसित करने के तकनीकी मुद्दों का वर्णन:

ऊपर मेरे कुछ सहयोगियों के विपरीत, मुझे नहीं लगता कि यह समस्या असाध्य है। लेकिन यह निश्चित रूप से एक हेला कठिन है!

ऊपर बताई गई पहली समस्या यह है कि खेल की स्थिति का प्रतिनिधित्व : आप केवल एक छवि के साथ पूर्ण राज्य का प्रतिनिधित्व नहीं कर सकते, आपको कुछ प्रकार के संस्मरण बनाए रखने की आवश्यकता है(स्वास्थ्य लेकिन यह भी सुसज्जित वस्तुओं और उपयोग करने के लिए उपलब्ध वस्तुओं, quests और लक्ष्यों, आदि)। इस तरह के informations को लाने के लिए आपके पास दो तरीके हैं: या तो सीधे गेम डेटा तक पहुंचकर, जो सबसे विश्वसनीय और आसान है; या तो आप कुछ सरल प्रक्रियाओं (खुली सूची, स्क्रीनशॉट लेने, डेटा निकालने) को लागू करके इन informations का एक सार प्रतिनिधित्व बना सकते हैं। बेशक, एक स्क्रीनशॉट से डेटा निकालने के लिए या तो आपको कुछ पर्यवेक्षण प्रक्रिया में डाल दिया जाएगा (जो आप पूरी तरह से परिभाषित करते हैं) या अनसुनी (मशीन सीखने के एल्गोरिथ्म के माध्यम से, लेकिन फिर यह बहुत जटिलता को स्केल करेगा ...)। अनुपयोगी मशीन लर्निंग के लिए, आपको संरचनात्मक सीखने के एल्गोरिदम (जो उन्हें वर्गीकृत करने या किसी मूल्य का अनुमान लगाने के बजाय डेटा की संरचना सीखते हैं) नामक एक बहुत हाल के एल्गोरिदम का उपयोग करने की आवश्यकता होगी।http://techtalks.tv/talks/54422/

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

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

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

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

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

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

सौभाग्य, और अगर यह काम करता है, तो एक लेख प्रकाशित करना सुनिश्चित करें, आप इस तरह की कठिन व्यावहारिक समस्या को हल करने के लिए निश्चित रूप से प्रसिद्ध हो सकते हैं!


27

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

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

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


काफी उचित। आप एक नेटवर्क ANN से मिलते जुलते कुछ भी कह सकते हैं, लेकिन यह शायद ही कभी चर्चा का कारण बन सकता है। :)
डॉन रेबा

हे हाँ ... मुझे और अधिक गहराई में अपनी प्रेरणा समझानी चाहिए थी। मुझे पता है कि गेम एआई बनाने के बेहतर तरीके हैं, लेकिन मैं एएनएन सिम्युलेटर के उन्नयन को आगे बढ़ाने के लिए ऐसा कर रहा हूं। देखें: stanford.edu/group/pdplab/pdphandbook
zerglord

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

18

इस परियोजना के दिल की तरह लगता है कि एक एएनएन के साथ क्या संभव है, इसलिए मैं एक गेम चुनने का सुझाव दूंगा जहां आपको छवि प्रसंस्करण से निपटने की ज़रूरत नहीं है (जो यहां पर अन्य के जवाबों से लगता है, वास्तव में एक मुश्किल काम है वास्तविक समय खेल)। आप अपने बॉट के निर्माण के लिए Starcraft API का उपयोग कर सकते हैं, वे आपको सभी प्रासंगिक गेम स्थिति तक पहुंच प्रदान करते हैं।

http://code.google.com/p/bwapi/


2

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

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


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

1

किसी भी समय यह मानकर कि आप सभी संभावित 'चालों' के एक सेट से 'परिणाम' (संभावनाओं को शामिल कर सकते हैं) का एक सेट उत्पन्न कर सकते हैं, और यह कि खेल में निरंतरता की कुछ धारणा है (उदाहरण के लिए आप स्तर X को बार-बार खेल सकते हैं) फिर से), आप यादृच्छिक वजन के साथ एन तंत्रिका नेटवर्क के साथ शुरू कर सकते हैं, और उनमें से प्रत्येक निम्नलिखित तरीके से खेल खेलते हैं:

1) हर संभव 'चाल' के लिए, संभावित 'परिणामों' (सम्बद्ध संभावनाओं के साथ) की एक सूची उत्पन्न करें 2) प्रत्येक परिणाम के लिए, 'परिणाम' के एक संबद्ध 'मूल्य' (स्कोर) को निर्धारित करने के लिए अपने तंत्रिका नेटवर्क का उपयोग करें (जैसे एक -1 और 1 के बीच संख्या, 1 सबसे अच्छा संभव परिणाम है, -1 सबसे खराब है) 3) 'प्रोब' चुनें जो उच्चतम प्रोब को ले जाता है * स्कोर 4) यदि इस कदम से 'जीत' या 'हार' हुई, तो बंद करो, अन्यथा चरण 1 पर वापस जाएं।

एक निश्चित समय के बाद (या 'जीत' / 'हार'), मूल्यांकन करें कि तंत्रिका नेटवर्क 'लक्ष्य' के कितना करीब था (इसमें संभवतः कुछ डोमेन ज्ञान शामिल होगा)। फिर एनएन के 50% (या कुछ अन्य प्रतिशत) को फेंक दें जो लक्ष्य से सबसे दूर थे, शीर्ष 50% का क्रॉसओवर / म्यूटेशन करें और फिर से एनएन के नए सेट को चलाएं। एक संतोषजनक एनएन बाहर आने तक जारी रखें।


आह, मिश्रण में एक जीए जोड़ना, दिलचस्प। दुर्भाग्य से, जब से मैं नेटवर्क को वास्तव में क्रियाओं / माउस आंदोलनों को क्रियाओं के रूप में भेज रहा हूं, मुझे प्रति नेटवर्क एक भौतिक कंप्यूटर की आवश्यकता होगी> <। <एक और समस्या यह है कि पर्यावरण की स्थिति अंतरिक्ष असतत नहीं है (अच्छी तरह से तकनीकी रूप से यह है, लेकिन एक बहुत अच्छा अनाज)। उदाहरण के लिए, एक माउस क्लिक से जुड़े संभावित परिणाम की कल्पना करें: नेट के नियंत्रण में एक चरित्र हिल सकता है या हमला कर सकता है, लेकिन दुश्मन भी आगे बढ़ सकते हैं, और छाया और मौसम के प्रभाव जैसी चीजों से वातावरण में पिक्सेल-वार अंतर होगा। ।
19

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

1

मुझे लगता है कि आपका सबसे अच्छा दांव कुछ / नेटवर्क वाले एक जटिल आर्किटेक्चर होगा: यानी एक आइटम के लिए पहचानने और जवाब देने के लिए, एक दुकान के लिए, एक लड़ाई के लिए (शायद यहां आपको दुश्मन की पहचान के लिए एक की जरूरत होगी, हमलों के लिए एक), आदि। ।

फिर सबसे सरल संभव डियाब्लो II गेमप्ले के बारे में सोचने की कोशिश करें, शायद एक जंगली। फिर इसे पहले से सरल रखें, जैसे अधिनियम I, पहला क्षेत्र।

तब मुझे लगता है कि मूल्यवान 'लक्ष्य' दुश्मन वस्तुओं के गायब होने, और स्वास्थ्य पट्टी के कम होने (विपरीत रूप से स्कोर किए गए) होंगे।

एक बार जब आपके पास इन अलग, 'सरल' कार्यों का ध्यान रखा जाता है, तो आप यह निर्धारित करने के लिए एक 'मास्टर' एएनएन का उपयोग कर सकते हैं कि कौन सा उप-एएनएन सक्रिय करने के लिए है।

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

आपकी सभी परियोजना बहुत महत्वाकांक्षी है। लेकिन मुझे लगता है कि यह 'सिद्धांत रूप में किया जा सकता है', पर्याप्त समय दिया।

आशा है कि यह मदद करता है और शुभकामनाएँ!

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