एक इलाके जनरेटर का विकास


12

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

मैं काफी निश्चित हूं कि जीपी को एक नए इलाके जनरेटर को खोजने में मदद करने के लिए तैनात किया जा सकता है। सवाल मैं यह है कि यह कैसे प्राप्त किया जा सकता है?

सभी GP में कुछ मूल भाग होते हैं जिन्हें सभी GP (मूल चयन, पुनर्संयोजन, उत्परिवर्तन, उत्तरजीविता) के लिए सामान्यीकृत किया जा सकता है। मैं उन लोगों का पता लगा सकता हूं। समस्या विशिष्ट भागों में समस्या उत्पन्न होती है। ये आप कोड में समस्या का प्रतिनिधित्व करते हैं (यह आमतौर पर एक पेड़ का उपयोग करता है), और आप कैसे मूल्यांकन करते हैं कि जनरेटर कितना अच्छा हो सकता है (यह एक या अधिक मूल्य हो सकता है)।

संक्षेप में प्रश्न:

  • आप एक तरह से एक इलाके के जनरेटर का प्रतिनिधित्व कैसे करेंगे जो एक पेड़ में पार्स किया जा सकता है?

  • इससे किस तरह का इलाका पैदा होगा? (ऊंचाई, शिखर ग्राफ, ...)

    जितना कम यह एक हाईमैप बेहतर पर आधारित है।

  • एक समाधान की फिटनेस का मूल्यांकन करने के लिए क्या इस्तेमाल किया जाएगा?

    पूर्व: हम दिलचस्प भूभाग चाहते हैं ताकि हम मान सकें कि इलाके में प्रत्येक शीर्ष के लिए मानदंड में औसत परिवर्तन हो सकता है।


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

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

जवाबों:


11

कार्ल सिम्स की आनुवांशिक छवियों के समान एक दृष्टिकोण के साथ आपको कुछ भाग्य हो सकता है ।

वह एक LISP जैसी भाषा में ऑपरेटरों के एक सरल सेट का उपयोग करता है, जैसे कि किसी भी ऑपरेटर का आउटपुट छवि को प्रभावित करने के लिए उपयोग किया जा सकता है, इसी तरह कुछ shader भाषाओं में (यानी। एक स्केलर एक ग्रेस्केल मूल्य, एक vector3होगा RGB, आदि)। )।

हालांकि मुझे लगता है कि यह लागू करने वाला सामान है, इसलिए आप जो चाहते हैं, वह उनके कीवर्ड हैं, जिनमें (iirc) सभी मूल बातें हैं:

  • ट्रिगर कार्य ( sin, cos, tan, आदि ..)
  • स्थिति ( x, y)
  • मूल गणित संचालक ( sqrt, pow, abs, inverse)
  • शोर कार्यों ( fBm, noise2, noise3)
  • अन्य भग्न ( mandelbrot, julia)
  • प्रक्षेप कार्य ( lerp, quad, step, smoothstep)

(उपर्युक्त में से कुछ उनके कार्यान्वयन में नहीं हो सकते हैं; मैंने उनका काम बहुत समय पहले पाया था और वास्तव में कुछ प्रयास किए हैं जो आप वर्षों से वर्णन कर रहे हैं - इसलिए यादें लीक हो सकती हैं :)

इसे दिलचस्प (और तेज़) रखना

मेरे पास एक बहुस्तरीय दृष्टिकोण के साथ भाग्य का एक सा था जो बड़े पैमाने पर मृत प्रस्तावों की मात्रा को कम कर देता है।

  1. प्रत्येक ऑपरेटर के लिए श्रेणियों का एक सेट उत्पन्न होता है (या पिछले राउंड से उत्परिवर्तित)
    • ये आदर्श रूप से प्रत्येक फ़ंक्शन के लिए "समझदार" सीमा के भीतर मान रखते हैं, लेकिन उन सीमाओं में विकसित हो सकते हैं जिनके आश्चर्यजनक रूप से उपयोगी परिणाम होते हैं, जो "सही" चीज़ की तरह लगता है
  2. कुछ एल्गोरिथ्म पेड़ उत्पन्न करते हैं
    • इनमें से प्रत्येक के लिए यादृच्छिक पदों पर कुछ ऊंचाई पैदा करते हैं और फिटनेस का मूल्यांकन करते हैं
    • यदि हमारे पास बहुत सारे अच्छे मैच हैं तो इस शाखा को थोड़ा सा विकसित करें, प्रत्येक बच्चे में चरण 1 से थोड़ी सी दूरी को बढ़ाकर
    • अन्यथा, हमें शायद खराब रेंज मिली है, चरण 1 पर वापस जाएं

हालाँकि...

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

हालाँकि आपके पास शायद प्रशिक्षण छवियों का एक सेट हो सकता है, शायद उपग्रह इमेजरी से कुछ और विशेष गुणों वाले कुछ कृत्रिम और फिर शायद उन पर वेलेट या 2 डी एफएफटी विश्लेषण का उपयोग करें?

यह एक दिलचस्प विषय है, लेकिन मुझे संदेह है कि आपको उत्तर पर क्या चाहिए :)

संपादित करें: आह। लिंक का एक गुच्छा निकालने के लिए था क्योंकि मैं एक नया उपयोगकर्ता हूँ: - |


ऐसा लगता है कि मैं जिस चीज को प्राप्त कर रहा था, उसी तरह का नेतृत्व करने के लिए एल्गोरिदम का मतलब सामग्री की निरंतर यादृच्छिक पीढ़ी के लिए नहीं है, लेकिन एक एकल या सीमित परिणामों के लिए पीढ़ी को प्रशिक्षित करने में ... और अभी भी चयन करने के लिए मानव की आवश्यकता है।
जेम्स

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

1
@ एलेक्स शायद यह पेपर भी रूचि का होगा। मैं कल्पना करता हूं कि यदि आप इसके उल्लेखित कुछ तकनीक को उसके सिर पर घुमाते हैं, तो आप इसका उपयोग फिटनेस का मार्गदर्शन करने के लिए कर सकते हैं। (या यह अच्छी तरह से सिर्फ वही हो सकता है जो आप चाहते हैं :)
पैंटाफोब

@ फोबियस WAHAH !! ठंडा। मुझे इसे कुछ और तलाशने की जरूरत है, लेकिन यह वास्तव में आशाजनक है। अब इसे एक खोज समस्या में बदलने के लिए ...
एलेक्स शेपर्ड

2

मुझे यकीन नहीं है कि आप इस प्रश्न का उत्तर दे सकते हैं, लेकिन मुझे एक स्पष्टीकरण लगता है कि क्यों एक सहायक पर्याप्त उत्तर हो सकता है। तो, संक्षेप में उत्तर:

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

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

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


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

यदि आप 'दिलचस्प' को प्रोग्रामेटिक तरीके से परिभाषित नहीं कर सकते हैं, तो आपको वह समस्या होने वाली है जिसका मैं उत्तर देने की कोशिश कर रहा हूं।
जेम्स

0

इससे किस तरह का इलाका पैदा होगा? (ऊंचाई, शिखर ग्राफ, ...)

निश्चित रूप से एक वर्टेक्स ग्राफ (एक मेष), यह कॉम्पैक्ट स्टोरेज-वार है और मांग पर इसे (tesselated) rasterized किया जा सकता है।

आप एक तरह से एक इलाके के जनरेटर का प्रतिनिधित्व कैसे करेंगे जो एक पेड़ में पार्स किया जा सकता है?

सेल्यूलर आटोमेटा। मैं दो कार्यान्वयनों के बारे में सोच सकता हूं:

  1. नियम-सेट ऑटोमेटा, शायद परिमित-ऑटोमेटा के तत्वों के साथ (जब वर्तमान स्थिति, जैसे प्रयास काउंटर या निष्क्रिय समय, ध्यान में रखा जाता है)।

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

नियम-सेट को एक शाखा निर्णय वृक्ष या साधारण कमांड बैच के रूप में दर्शाया जा सकता है (यह सुनिश्चित नहीं है कि यह काम करेगा)

यह प्रत्येक नोड के लिए केवल एक नियम निर्धारित है

  1. विश्व बिल्डरों। हर एक नोड के लिए एक सॉल्वर लगाने के बजाय आप उनमें से सिर्फ एक गुच्छा बना सकते हैं और उन्हें मेष को नेविगेट करने की अनुमति दे सकते हैं।

    • प्रत्येक बिल्डर का अपना नियम-निर्धारित होता है
    • उन्हें दूसरे बिल्डर के कब्जे वाले नोड में प्रवेश करने से रोकें
    • प्रत्येक बिल्डर को पेड़ की एक शाखा के रूप में दर्शाया जा सकता है
    • विकास के दौरान बिल्डर्स नकल कर सकते हैं

फिर भी, मुझे डर है कि दूसरे दृष्टिकोण को पहले एक द्वारा समर्थित होने की आवश्यकता है: प्रारंभिक यादृच्छिकता को सुचारू करने की आवश्यकता है और मुझे यकीन नहीं है कि बिल्डर्स चाल कर सकते हैं। हर जीवित कोशिका में माइटोकॉन्ड्रिया होता है।

एक समाधान की फिटनेस का मूल्यांकन करने के लिए क्या इस्तेमाल किया जाएगा?

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

होगा जब यह अपने स्वयं के लिए मेरे जाल जनरेटर के साथ प्रयास करें / अगर कुछ खाली समय = है)

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