परिचय
Boids एल्गोरिथ्म एक समूह में आकस्मिक व्यवहार की एक अपेक्षाकृत सरल प्रदर्शन है। इसके तीन मुख्य नियम हैं, जैसा कि इसके निर्माता क्रेग रेनॉल्ड्स ने बताया है:
बुनियादी झुंड के मॉडल में तीन सरल स्टीयरिंग व्यवहार होते हैं, जो बताते हैं कि कैसे एक व्यक्ति ने अपने निकट झुंडों के पदों और वेगों के आधार पर युद्धाभ्यास किया:
- पृथक्करण : स्थानीय झुंडों की भीड़ से बचने के लिए।
- संरेखण : स्थानीय झुंड के औसत शीर्ष की ओर कदम।
- सामंजस्य : स्थानीय झुंड के औसत स्थिति की ओर बढ़ने के लिए।
प्रत्येक दृश्य में पूरे दृश्य के ज्यामितीय विवरण तक सीधी पहुंच होती है, लेकिन फ्लॉकिंग के लिए यह आवश्यक है कि वह केवल एक निश्चित छोटे पड़ोस के भीतर ही झुंड में प्रतिक्रिया करे। पड़ोस की दूरी (बोद के केंद्र से मापी गई) और कोण की विशेषता है , जिसे उड़ान की उड़ान की दिशा से मापा जाता है। इस स्थानीय पड़ोस के बाहर के झुंडों को अनदेखा किया जाता है। पड़ोस को सीमित धारणा का मॉडल माना जा सकता है (जैसा कि पानी में मछली द्वारा होता है) लेकिन यह शायद इस क्षेत्र को परिभाषित करने के रूप में अधिक सही है, जिसमें झुंड के साथी एक बॉयलर स्टीयरिंग को प्रभावित करते हैं।
मैं चीजों की व्याख्या करते समय सही नहीं हूं, इसलिए मैं स्रोत की जांच करने की अत्यधिक सलाह देता हूं । उनकी साइट पर कुछ सुपर जानकारीपूर्ण तस्वीरें भी हैं।
चुनौती
Boids की संख्या (सिम्युलेटेड इकाइयां) और फ़्रेम की संख्या को देखते हुए, सिमुलेशन का एक एनीमेशन आउटपुट।
- Boids को एक लाल वृत्त के रूप में प्रस्तुत किया जाना चाहिए, सर्कल के अंदर एक पंक्ति अपनी हेडिंग दिखाती है, यह वह दिशा है जो boid इंगित करता है:
- प्रत्येक फोड़े का कोण (जैसा कि रेनॉल्ड्स द्वारा वर्णित है) एक पूर्ण 300 डिग्री होना चाहिए। (360 नहीं)
- प्रत्येक फोड़े की शुरुआती हेडिंग और पोजिशन समान रूप से रैंडम होनी चाहिए (लेकिन सीडेड, ताकि आउटपुट अभी भी निर्धारित हो), साथ ही पोजिशन भी।
- अगर फोड़े की त्रिज्या 1 है, तो पड़ोस की त्रिज्या 3 होनी चाहिए।
- Boids की संख्या 2-20 से कहीं भी होगी।
- फ्रेम की संख्या 1-5000 से कहीं भी होगी
- एनीमेशन को न्यूनतम 10 मिलीसेकंड प्रति फ्रेम और अधिकतम 1 सेकंड की संख्या के साथ खेला जाना चाहिए। (2 boids = 2 सेकंड प्रति फ्रेम अधिकतम, 3 boids = 3 सेकंड प्रति फ्रेम अधिकतम, et cetera)
- आउटपुट एनीमेशन कम से कम 5 बोइड-रेडी 5 बोइड-रेडी से होना चाहिए, बड्स की आधी संख्या। तो, 2 बोलियों के लिए न्यूनतम आकार 10 बोरी-राडाइयॉइड 10 बोइड-रेडी, 3 बोयड के लिए न्यूनतम 15 बोइड-रेडी 15 बोटी-रेडी, एट सीटेरा होगा।
- प्रत्येक फोड़े की त्रिज्या न्यूनतम 5 पिक्सेल और अधिकतम 50 पिक्सेल होनी चाहिए।
- प्रत्येक फोड़े की गति को सीमित करने की आवश्यकता है ताकि यह एक दायरे में अपने दायरे के 1/5 वें से अधिक न चले।
- आउटपुट को निर्धारित करने की आवश्यकता है, ताकि एक ही इनपुट कई बार चलाने पर एक ही आउटपुट का उत्पादन कर सके।
- यदि एक सीमा पर एक फोड़ा पहुंचता है, तो उसे वापस दूसरी तरफ लपेटना चाहिए। इसी तरह, प्रत्येक फोड़े के आस-पास के पड़ोस को भी सीमाओं के आसपास लपेटना चाहिए।
एल्गोरिथ्म के नियम
इस मामले में, प्रत्येक प्रकोष्ठ के चारों ओर एक क्षेत्र होता है, जो 300 डिग्री तक फैला होता है, जो कि व्रत के शीर्ष पर केंद्रित होता है। इस "पड़ोस" में किसी भी अन्य boids को "पड़ोसी" माना जाता है, या (रेनॉल्ड्स शब्द का उपयोग करने के लिए) "फ्लॉकमेट्स"।
प्रत्येक बोइड को टकराव से बचने और अपने पड़ोसियों के साथ एक बायिड-रेडियस की आरामदायक दूरी बनाए रखने के लिए इसकी हेडिंग को समायोजित करना चाहिए। (यह एल्गोरिथ्म का "पृथक्करण" पहलू है। एक बोइद-त्रिज्या को बाईपास किया जा सकता है, लेकिन यह रबर बैंड की तरह होना चाहिए, वापस जगह में तड़कना।)
जब तक यह पहले नियम के साथ हस्तक्षेप नहीं करता है, तब तक प्रत्येक बोद को इसके हेडिंग को अन्य बॉड्स की औसत हेडिंग के करीब होने के लिए समायोजित करना चाहिए। (यह एल्गोरिथम का "संरेखण" पहलू है)
जब तक यह टकराव का कारण नहीं बनता है या दूसरे नियम में काफी हस्तक्षेप नहीं करता है, तब तक प्रत्येक फोड़े को अपने झुंड के औसत स्थान की ओर मुड़ना चाहिए।
में इस विषय पर अपने कागज , वह यह बताता है इस प्रकार है:
एक नकली झुंड बनाने के लिए, हम एक मॉडल के साथ शुरू करते हैं जो ज्यामितीय उड़ान का समर्थन करता है। हम उन व्यवहारों को जोड़ते हैं जो टकराव से बचने के विरोधी ताकतों के साथ मेल खाते हैं और झुंड में शामिल होने का आग्रह करते हैं। नियमों के अनुसार संक्षिप्त रूप में, और पूर्ववर्तीता घटने के क्रम में, व्यवहार जो नकली झुंझलाहट की ओर ले जाते हैं:
- टकराव से बचाव: निकटवर्ती फ्लॉकमेट्स के साथ टकराव से बचें
- वेग मिलान: पास के झुंड के साथ वेग का मिलान करने का प्रयास
- फ्लॉक सेंट्रिंग: पास के फ्लॉकमेट्स के करीब रहने का प्रयास
आंदोलन का अधिक विस्तृत विवरण:
- Boids Algorithm का मानक कार्यान्वयन आमतौर पर प्रत्येक नियम के लिए एक गणना करता है, और इसे एक साथ विलय करता है।
- पहले नियम के लिए, फोड़ा अपने पड़ोस के भीतर पड़ोसी की सूची के माध्यम से जाता है, और यदि स्वयं और पड़ोसी के बीच की दूरी एक निश्चित मूल्य से कम है, तो एक वेक्टर जो पड़ोसी को दूर धकेलता है, उसे बॉयलर की हेडिंग पर लागू किया जाता है।
- दूसरे नियम के लिए, Boid अपने पड़ोसियों की औसत हेडिंग की गणना करता है, और उसके वर्तमान हेडिंग और उसके वर्तमान हेडिंग के औसत हेडिंग के बीच अंतर का एक छोटा सा हिस्सा (हम इस चुनौती में 1/10 का उपयोग करेंगे) जोड़ते हैं।
- तीसरे और अंतिम नियम के लिए, Boid अपने पड़ोसियों की स्थिति को औसत करता है, एक वेक्टर की गणना करता है जो इस स्थान की ओर इशारा करता है। इस वेक्टर को नियम 2 (इस चुनौती के लिए, 1/50 का उपयोग किया जाएगा) की तुलना में एक छोटी संख्या से गुणा किया जाता है और शीर्षक पर लागू किया जाता है।
- फिर फोड़े को उसके शीर्ष की दिशा में ले जाया जाता है
यहाँ Boids Algorithm का एक उपयोगी छद्मकोड कार्यान्वयन है।
उदाहरण इनपुट और आउटपुट
इनपुट:आउटपुट:5, 190 (5 बोलियां, 190 फ्रेम)
कसौटी जीतना
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे छोटा समाधान जीतता है।