इतिहास पीढ़ी के एल्गोरिदम कैसे काम करते हैं?


19

मैंने खेल बौना किले के बारे में सुना है, लेकिन अब केवल उन लोगों में से एक है जिन्हें मैं Youtube पर फॉलो करता हूं, उन्होंने इस पर एक टिप्पणी की ... मुझे आश्चर्य हुआ जब मैंने देखा कि बौना किले वास्तव में दुनिया के लिए एक इतिहास कैसे बनाते हैं!

अब, ये एल्गोरिदम कैसे काम करते हैं? सिमुलेशन की लंबाई को छोड़कर वे आमतौर पर इनपुट के रूप में क्या लेते हैं? वे कितने विशिष्ट हो सकते हैं?

और अधिक महत्वपूर्ण बात; क्या उन्हें जावास्क्रिप्ट में बनाया जा सकता है, या जावास्क्रिप्ट बहुत धीमा है? (मुझे लगता है कि यह सिमुलेशन की गहराई पर निर्भर करता है, लेकिन बौने किले को एक उदाहरण के रूप में लें।)


3
"क्या उन्हें जावास्क्रिप्ट में बनाया जा सकता है?" इसका उत्तर स्पष्ट रूप से हाँ है, लेकिन यह इस बात पर निर्भर करता है कि आप परिणाम कितनी जल्दी चाहते हैं और आप उन्हें कितना जटिल बनाना चाहते हैं। बौना किले में कुछ समय लगता है - और यह दुनिया के युग के रूप में धीमा हो जाता है! इसलिए जब तक आप उथले इतिहास चाहते हैं, हाँ आप इसे जावास्क्रिप्ट में कर सकते हैं, इसलिए यह इस बात पर निर्भर करता है कि आप इतिहास को कितना जटिल बनाना चाहते हैं।
doppelgreener

2
उसका मतलब है "पैमाने पर बौने किले के स्तर पर"।
MichaelHouse

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

1
बहुत स्पष्ट होने के लिए: दुनिया जितनी पुरानी है, प्रत्येक वर्ष धीमी गति से गणना करना है। एक युवा दुनिया में यह पहले कुछ वर्षों के माध्यम से भाग जाएगा, सैकड़ों साल पुरानी दुनिया में, अगले वर्ष को उत्पन्न होने में कुछ सेकंड या कुछ सेकंड लग सकते हैं।
डोपेलग्रेनर

1
ओह, मुझे पता है। "गहराई" से, मुझे वर्षों की राशि से मतलब नहीं था, मेरा मतलब था कि होने वाली घटनाओं की मात्रा और सिमुलेशन की सटीकता। आप बस कितने लोगों को एक साम्राज्य रख सकते हैं, या आप वास्तव में एक वर्ग कह सकते हैं Person, जो कि काम करता है, सेना में जाता है, आदि। शाल्लो साम्राज्य के आकार को लड़ाई के परिणामों को तय करने देगा, लेकिन गहरा प्रत्येक सैनिक अपने स्वयं के लिए लड़ रहा होगा।
जकोरा

जवाबों:


27

सबसे पहले, बौना किले के बारे में इतिहास की पीढ़ी के लिए कुछ संकेत हैं । कुछ समय पहले Bay12 मंचों पर किसी ने पूछा , और एक प्रतिलेख साझा किया गया था और आप पा सकते हैं कि चर्चा कहां से शुरू होती है: "हमारा विषय आज विश्व पीढ़ी और इतिहास पीढ़ी है"।


मुझे ठीक से पता नहीं है कि बौना किला कैसे करता है, लेकिन मैं बताऊंगा कि मैं अपने खेल में एक बहुत ही बुनियादी पहला मसौदा लागू करने की योजना बना रहा हूं। मैं एक साधारण सेलुलर ऑटोमेटा का उपयोग करने जा रहा हूं । यदि आप इन बीजाणु प्रोटोटाइप के माध्यम से देखते हैं , जैसे सेल संस्कृति और बायोम।

यहाँ छवि विवरण दर्ज करें

ये सेलुलर ऑटोमेशन के उदाहरण हैं और वे क्या उत्पादन कर सकते हैं। अनिवार्य रूप से मैं विभिन्न दौड़ के लिए नियम बनाऊंगा। नियमों के कुछ उदाहरण होंगे:

  • अन्य जातियों के प्रति उनकी शत्रुता
  • उनकी जलवायु प्राथमिकताएँ
  • उनकी संसाधन आवश्यकताएं
  • उनकी जन्म दर और जीवन अवधि
  • उनकी इच्छाओं (प्रौद्योगिकी अनुसंधान, वाणिज्य, शांतिपूर्ण अस्तित्व, विश्व वर्चस्व)
  • उनकी क्षमताएं (संरचना निर्माण, संसाधन जुटाना, युद्ध करना, आदि)
  • और इसी तरह...

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

  • कस्बों उच्च संसाधन, उच्च रहने की योग्यता के क्षेत्रों में।
  • सड़कें बड़े शहरों को जोड़ती हैं।
  • नदियों के पार पुल
  • सुरंगों पहाड़ों के माध्यम से।
  • लड़ाई के जवाब में विस्तार की अग्रिम पंक्तियों के पास किले

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

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

प्राकृतिक आपदाएँ, आबादी और इतिहास के पाठ्यक्रम को प्रभावित करती हैं। भूकंप एक शहर को बर्बाद करने या एक सुरंग को गिराने के लिए कम कर सकते हैं। बाढ़ से सड़क या पुल बह सकता है।


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

यह सब एक सिमुलेशन (यद्यपि जटिल) है, आप बस महत्वपूर्ण घटनाओं को रास्ते में रिकॉर्ड कर रहे हैं और इसे इतिहास कह रहे हैं।

मुझे यह भी पता चला कि लोगों को बौना बनाने के लिए एक बे 12 फ़ोरम पोस्ट मिला जो बौने किले की दुनिया को तेज़ी से आगे बढ़ाता है । मैंने इसके माध्यम से नहीं पढ़ा है, लेकिन यह कुछ संकेत प्रदान कर सकता है यदि आप कभी भी अपने कार्यान्वयन में बहुत धीमी गति से चलते हैं।


हमेशा की तरह शानदार और ज्ञानवर्धक, @ बाइट 56। :)
जकोरा जूल

1
धन्यवाद बैन। शायद हमेशा नहीं, यह सिर्फ इतना होता है कि लोग ऐसे सवाल पूछते हैं जो मुझे लगता है कि मुझे कुछ पता है। मुझे मौका देने के लिए धन्यवाद इसके बारे में अधिक सोचते हैं और कुछ नीचे लिखा :) पाने के लिए
MichaelHouse

4

एक साइड पॉइंट के रूप में, जावास्क्रिप्ट उतना धीमा नहीं है जितना आप सोच सकते हैं

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

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

मैं वास्तव में एक टिप्पणी में यह सब लिखने जा रहा था, लेकिन मैं अंतरिक्ष से बाहर भाग गया।


1

हाँ, इसे जावास्क्रिप्ट पर निर्मित किया जा सकता है, ASM.js जैसे चेक प्रॉसेस, जो सी की तुलना में लगभग 2x सबसे धीमी गति प्राप्त करते हैं। यदि आप कई कोर (वेबवर्क का उपयोग करके) का ध्यान रखते हैं तो यह DF (संसाधनों के संदर्भ में) से भी तेज हो सकता है। , जो अभी मोनोकोर है।

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