ভূমিকা
Boids অ্যালগরিদম একটি গ্রুপ উত্থানশীল ব্যবহারের একটি অপেক্ষাকৃত সহজ বিক্ষোভ। এর তিনটি প্রধান নিয়ম রয়েছে, যেমন এর নির্মাতা ক্রেগ রেইনল্ডস বর্ণনা করেছেন:
বেসিক ফ্লকিং মডেলটিতে তিনটি সহজ স্টিয়ারিং আচরণ রয়েছে যা বর্ণনা করে যে কীভাবে কোনও পৃথক বোড কৌশলগুলি তার কাছাকাছি ফ্লকমেট অবস্থান এবং গতির উপর ভিত্তি করে:
- বিচ্ছেদ : স্থানীয় ফ্লকমেটদের ভিড় এড়াতে চালাও।
- সারিবদ্ধকরণ : স্থানীয় ফ্লকমেটগুলির গড় শিরোনামের দিকে এগিয়ে যান।
- সংহতি : স্থানীয় ফ্লকমেটগুলির গড় অবস্থানের দিকে এগিয়ে যেতে er
প্রতিটি বিডের পুরো দৃশ্যের জ্যামিতিক বিবরণে সরাসরি অ্যাক্সেস থাকে তবে ফ্লাকিংয়ের প্রয়োজন এটি কেবল নিজের চারপাশে একটি নির্দিষ্ট ছোট পাড়ার মধ্যেই ফ্লকমেটগুলিতে প্রতিক্রিয়া দেখায়। প্রতিবেশটি দূরত্বের (বোডের কেন্দ্র থেকে পরিমাপ করা) এবং বোডের বিমানের দিক থেকে পরিমাপ করা একটি কোণ দ্বারা চিহ্নিত করা হয় । এই স্থানীয় পাড়ার বাইরে ফ্লকমেট উপেক্ষা করা হয়। পাড়াটি সীমিত উপলব্ধির একটি মডেল হিসাবে বিবেচিত হতে পারে (যেমন নোংরা পানিতে মাছ দ্বারা) তবে এটি সম্ভবত এই অঞ্চলের সংজ্ঞা হিসাবে বিবেচনা করা আরও সঠিক হবে যেখানে ফ্লকমেটরা কোনও বোয়ড স্টিয়ারিংকে প্রভাবিত করে।
জিনিসগুলি ব্যাখ্যা করার সময় আমি নিখুঁত নই, তাই উত্সটি পরীক্ষা করার জন্য আমি উচ্চ পরামর্শ দিই । তাঁর সাইটে কয়েকটি সুপার তথ্যমূলক ছবিও রয়েছে has
চ্যালেঞ্জ
বোডের সংখ্যা (সিমুলেটেড সত্তা) এবং ফ্রেমের সংখ্যা দেওয়া, সিমুলেশনের একটি অ্যানিমেশন আউটপুট।
- বোডগুলি একটি লাল বৃত্ত হিসাবে রেন্ডার করা উচিত, বৃত্তের অভ্যন্তরের একটি লাইন তার শিরোনাম দেখায়, যা বোডটি যে দিকে নির্দেশ করছে সেদিকে:
- প্রতিটি বোডের কোণ (যেমন রেনল্ডস দ্বারা বর্ণিত) একটি পূর্ণ 300 ডিগ্রি হওয়া উচিত। (360 নয়)
- প্রতিটি বিডের শুরুর শিরোনাম এবং অবস্থান সমানভাবে এলোমেলো হওয়া উচিত (তবে বীজযুক্ত, যাতে আউটপুট এখনও নির্ধারিত হয়) পাশাপাশি অবস্থানও।
- বিডের ব্যাসার্ধটি যদি 1 হয় তবে তার চেয়ে ব্যাসার্ধের ব্যাসার্ধ 3 হওয়া উচিত।
- বিডের সংখ্যা 2-2 থেকে যে কোনও জায়গায় থাকবে।
- ফ্রেম সংখ্যা 1-5000 থেকে যে কোনও জায়গায় হবে
- অ্যানিমেশনটি প্রতি ফ্রেমে সর্বনিম্ন 10 মিলিসেকেন্ড এবং বোডের সংখ্যা সর্বাধিক 1 সেকেন্ডের সাথে প্লে করা উচিত। (2 বোডস = 2 সেকেন্ড প্রতি ফ্রেম সর্বাধিক, 3 বোড = 3 সেকেন্ড প্রতি ফ্রেম সর্বাধিক, এবং সেল্টেরা)
- আউটপুট অ্যানিমেশনটি কমপক্ষে 5 বোড-রেডিয়াই দ্বারা 5 বোড-রেডিয়ি হওয়া উচিত, বোডগুলির সংখ্যার অর্ধগুণ বেশি। সুতরাং, 2 বোডের জন্য সর্বনিম্ন আকার 10 বোড-রেডিও হবে 10 বোড-রেডিয়াই, 3 বোডের জন্য সর্বনিম্ন হবে 15 বোড-রেডিআই দ্বারা 15 বোড-রেডি, এবং সেটার।
- প্রতিটি বিডের ব্যাসার্ধ অবশ্যই সর্বনিম্ন 5 পিক্সেল এবং সর্বোচ্চ 50 পিক্সেল হতে হবে be
- প্রতিটি বিডের গতি সীমিত হওয়া দরকার যাতে এটি তার ফ্রেমের ব্যাসার্ধের 1/5 এর বেশি স্থান পরিবর্তন করে না।
- আউটপুট নির্ধারণ করা দরকার, যাতে একাধিকবার চালানো হলে একই ইনপুট একই আউটপুট উত্পাদন করে।
- যদি কোনও বোড একটি সীমানায় পৌঁছে যায়, তবে এটি অন্যদিকে ফিরে জড়ানো উচিত। তেমনিভাবে, প্রতিটি বিডের চারপাশের সীমানাগুলির চারপাশেও মোড়ানো উচিত।
অ্যালগরিদমের নিয়ম
এই ক্ষেত্রে, প্রতিটি বোডের চারপাশে 300 ডিগ্রি বিস্তৃত একটি সেক্টর রয়েছে, বোডের শিরোনামকে কেন্দ্র করে। এই "প্রতিবেশী" অন্য যে কোনও বিডকে "প্রতিবেশী" বা "রেনল্ডস শব্দটি ব্যবহার করতে" "ফ্লকমেট" হিসাবে বিবেচনা করা হয়।
সংঘর্ষ এড়াতে এবং প্রতিটি প্রতিবেশীর সাথে এক বোড-ব্যাসার্ধের আরামদায়ক দূরত্ব বজায় রাখতে প্রতিটি বিডের শিরোনাম সামঞ্জস্য করা উচিত। (এটি আলগোরিদমের "বিচ্ছেদ" দিক The এক বোড-ব্যাসার্ধটি বাইপাস করা যেতে পারে তবে এটি একটি রাবার ব্যান্ডের মতো হওয়া উচিত, এটি জায়গায় ফিরে ছড়িয়ে পড়ে))
প্রতিটি বিডকে তার শিরোনামটি তার নিয়মিতভাবে তার পাড়ার অন্যান্য বোডের গড় শিরোনামের কাছাকাছি স্থায়ী করতে হবে যতক্ষণ না এটি প্রথম নিয়মে হস্তক্ষেপ না করে। (এটি আলগোরিদিমের "প্রান্তিককরণ" দিক)
যতক্ষণ না এটি সংঘর্ষের সৃষ্টি করে বা দ্বিতীয় নিয়মে উল্লেখযোগ্যভাবে হস্তক্ষেপ করে না ততক্ষণ প্রতিটি বিডকে তার ফ্লকমেটগুলির গড় অবস্থানের দিকে নিজেকে ঘুরিয়ে দেওয়া উচিত।
ইন বিষয় তার কাগজ , তিনি এই ব্যাখ্যা নিম্নরূপ:
সিমুলেটেড ফ্লক তৈরির জন্য, আমরা একটি বোড মডেল দিয়ে শুরু করি যা জ্যামিতিক বিমানকে সমর্থন করে। আমরা এমন আচরণগুলি সংযোজন করি যা সংঘর্ষ এড়ানোর বিরোধী শক্তির সাথে এবং ঝাঁক দলে যোগদানের তাগিদকে সামঞ্জস্য করে। সংক্ষিপ্তভাবে নিয়ম হিসাবে স্থিরীকৃত, এবং ক্রমহ্রাসমান অগ্রগতির ক্রম হিসাবে, আচরণগুলি যা অনুকরণীয় ঝাঁকুনির দিকে পরিচালিত করে:
- সংঘর্ষ এড়ানো: নিকটবর্তী ফ্লকমেটগুলির সাথে সংঘর্ষ এড়ান
- বেগ ম্যাচিং: নিকটস্থ ফ্লকমেটের সাথে বেগের সাথে মিলানোর চেষ্টা
- ফ্লক সেন্টারিং: কাছাকাছি ফ্লকমেটদের কাছে থাকার চেষ্টা করুন
চলাচলের আরও বিশদ বিবরণ:
- বোইডস অ্যালগরিদমের স্ট্যান্ডার্ড বাস্তবায়ন প্রতিটি নিয়মের জন্য সাধারণত একটি গণনা করে এবং একসাথে একত্রী করে।
- প্রথম নিয়মের জন্য, বোডটি তার আশেপাশের প্রতিবেশী বোডগুলির তালিকার মধ্য দিয়ে যায় এবং যদি নিজের এবং প্রতিবেশীর মধ্যে দূরত্ব একটি নির্দিষ্ট মানের চেয়ে কম হয়, তবে বোডকে দূরে সরিয়ে রাখে এমন একটি ভেক্টর বোাইডের শিরোনামে প্রয়োগ করা হয়।
- দ্বিতীয় নিয়মের জন্য, বিডটি তার প্রতিবেশীদের গড় শিরোনাম গণনা করে এবং তার বর্তমান শিরোনাম এবং তার বর্তমান শিরোনামের গড় শিরোনামের মধ্যে পার্থক্যের একটি ছোট অংশ (আমরা এই চ্যালেঞ্জের মধ্যে 1/10 ব্যবহার করব) যুক্ত করি।
- তৃতীয় এবং চূড়ান্ত নিয়মের জন্য, বোডটি তার প্রতিবেশীদের অবস্থানগুলির গড় গড় করে, একটি ভেক্টর গণনা করে যা এই অবস্থানটির দিকে নির্দেশ করে। এই ভেক্টরটি 2 রুল (এই চ্যালেঞ্জের জন্য 1/50 ব্যবহার করা হবে) এর চেয়ে বেশি ছোট সংখ্যার দ্বারা গুণিত হয়েছে এবং শিরোনামটিতে প্রয়োগ হয়েছে।
- এরপরে বোডটিকে তার শিরোনামের দিকে নিয়ে যাওয়া হয়
বোডস অ্যালগরিদমের কার্যকর সিউডোকোড বাস্তবায়ন এখানে ।
উদাহরণ ইনপুট এবং আউটপুট
ইনপুট:আউটপুট:5, 190 (5 বোড, 190 ফ্রেম)
বিজয়ী মানদণ্ড
এটি কোড-গল্ফ , তাই বাইটগুলির মধ্যে ক্ষুদ্রতম সমাধানটি জিততে পারে।