2009-10-28 10 views
6

में वजन करने के लिए कौन से इनपुट का निर्धारण करना मैंने एक बार टेट्रिस एआई लिखा था जिसने टेट्रिस को काफी अच्छी तरह से खेला था। मैंने उपयोग किया गया एल्गोरिदम (described in this paper) दो-चरणीय प्रक्रिया है।एक विकासवादी एल्गोरिदम

पहले चरण में, प्रोग्रामर समस्या को ट्रैक करने का निर्णय लेता है जो समस्या के लिए "दिलचस्प" है। टेट्रिस में हमें यह जानने में दिलचस्पी हो सकती है कि पंक्ति में कितने अंतर हैं क्योंकि कम से कम अंतराल भविष्य के टुकड़ों को और आसानी से रखने में मदद कर सकता है। एक और औसत कॉलम ऊंचाई हो सकता है क्योंकि यदि आप खोने वाले हैं तो जोखिम लेने का बुरा विचार हो सकता है।

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

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

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

+1

+1 मैं इस क्षेत्र में आरंभ करने के लिए कोशिश कर रहा हूँ। मेरे पास कुछ पालतू डेमो कार्यक्रम हैं लेकिन अभी तक कुछ भी बड़ा नहीं है। यह देखने में रूचि है कि आप इस पर किस प्रकार के उत्तर वापस प्राप्त करते हैं। –

उत्तर

1

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

+0

इस संदर्भ में "वर्गीकरण के साथ सहसंबंध" का क्या मतलब है? – Kai

+0

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

+0

आह, मैं देखता हूँ! मैंने पूर्व-मौजूदा नमूना डेटा का उपयोग करने का उपयोग नहीं किया था (टेट्रिस में कल्पना करना मुश्किल है)। वास्तव में, मुझे लगता है कि रिकैप्चा (http://recaptcha.net/learnmore.html) यह करता है। यह तब तक नहीं हुआ जब तक कि मैं आपका उदाहरण नहीं पढ़ता। – Kai

0

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

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

+0

मुझे लगता है कि आपका पहला सुझाव उस मॉडल को बदलना है जिसके साथ समस्या का प्रतिनिधित्व किया जाता है। कोड को आसान करना आसान हो सकता है लेकिन मुझे आश्चर्य है कि क्या यह वास्तव में सीखने में मदद करेगा। मुझे वास्तव में अन्य स्रोतों का उपयोग करने का विचार पसंद है। – Kai

+0

मैं अपने स्वयं के उत्तर से पूरी तरह संतुष्ट नहीं हूं। अगर मुझे लगता है, तो मुझे लगता है कि यह शायद परिमाण के लगभग 2 आदेशों से सीखने का समय बढ़ाता है। – SingleNegationElimination

0

हां, एक तरीका है।

यदि आप एम चुनिंदा विशेषताओं को चुनते हैं तो 2^एम सबसेट हैं, इसलिए देखने के लिए बहुत कुछ है। निम्न के मैं करूंगा:

For each subset S 
    run your code to optimize the weights W 
    save S and the corresponding W 

फिर प्रत्येक जोड़ी एस डब्ल्यू के लिए, आप प्रत्येक जोड़ी के लिए जी खेल चलाने के लिए और हर एक के लिए स्कोर एल बचा सकता है। अब आप इस तरह एक मेज है:

feature1 feature2 feature3 featureM subset_code game_number scoreL 
1   0   1   1   S1   1    10500 
1   0   1   1   S1   2    6230 
... 
0   1   1   0   S2   G + 1   30120 
0   1   1   0   S2   G + 2   25900 

अब आप कुछ घटक चयन एल्गोरिथ्म (उदाहरण के लिए पीसीए) चलाने के लिए और तय जो सुविधाओं Scorel की व्याख्या करने के लायक हैं कर सकते हैं।

एक टिप: जब कोड चलाने डब्ल्यू अनुकूलन करने के लिए,, यादृच्छिक संख्या जनरेटर बीज ताकि प्रत्येक अलग 'विकसित मस्तिष्क' ही टुकड़े अनुक्रम के खिलाफ परीक्षण किया जाता है।

मुझे आशा है कि यह कुछ में मदद करता है!

संबंधित मुद्दे