خب، برگشتیم. چطور بود؟ آیا توانستید قواعدِ سه‌گانه‌ای را که بر این مدل حکم‌فرماست بیابید؟ اگر دوباره به این تصویر نگاه کنیم که پرواز دسته‌جمعیِ دیگری از سارها را نشان می‌دهد، و این پروازِ دسته‌جمعی و همهمه مشخصه‌ی سارها است. اینکه این الگوی رفتاری تا چه اندازه می‌تواند پیچیده باشد، من را مبهوت می‌کند. و اینکه چگونه این قواعد سه‌گانه‌ی ساده چنین پویاییِ پیچیده‌ای را خلق می‌کنند افسون‌کننده است. آنچه که در مدل، و ویدئوی پیشین دیدید شاهدی بر این مدعاست. بیایید این پدیده را بیشتر بررسی کنیم. این مدل، که عموما به مدلِ Boid معروف است، توسط Craig Reynolds تهیه شده و در کنفرانسِ SIGGRAPH، که کنفرانسِ مطرحی در حیطه‌ی علوم کامپیوتر است، ارائه شد. در حقیقت، این مدل و بازنماییِ رفتار دسته‌جمعیِ سارها که دیدید در سال ۱۹۹۸، یک جایزه‌ی اسکار برای Craig Reynolds به ارمغان آورد. او برای مشارکت‌های پیشگامانه‌اش در توسعه‌ی پویانماییِ سه‌بعدی در صنعت فیلم‌سازی، جایزه‌ی علمی و فنیِ آکادمی اسکار را دریافت کرد. در حقیقت، مدلِ Boid (مدل پرواز دسته‌جمعی پرندگان) در فیلم «بازگشت بتمن» (۱۹۹۲) برای ایجاد دسته‌ی خفاش‌ها که در خیابان‌های «شهر گاتهام» پرواز می‌کنند استفاده شده است. بدیهی است که عینا همین مدل نبوده، بلکه بر این اساس تهیه شده بوده. اگر یک گام به عقب برگردیم، این مدل شما را در یافتن پاسخِ چندین پرسش یاری می‌کند. اینکه این پرنده‌ها چگونه به‌صورت دسته‌جمعی پرواز می‌کنند؟ می‌تواند پاسخی قطعی دهد، یا حداقل اثبات و نشانه‌ای بر بودن یا نبودنِ یک راهبر و هدایت‌گر مرکزی که حرکتِ پرندگان را کنترل می‌کند ارائه کند. می‌تواند ما را در فهم اینکه آیا لازم است پرندگان برای تعیین حرکت بعدی‌شانْ از موقعیت لحظه‌ای خود آگاه باشند نیز کمک کند. می‌توانیم بررسی کنیم که آیا برای ایجاد چنین الگوی رفتاری نیاز به فرایندی تعینی داریم یا نه؟ و آیا پرندگان تنها بر مبنای اطلاعاتِ محلی می‌توانند به‌این صورت حرکت کنند؟ یا اینکه برای ایجاد چنین الگوهای رفتاری به اطلاعات جهانی نیاز است یا نه؟ برمی‌گردیم تا نگاهی کوتاه به مدل بیندازیم تا ببینیم ابتدا به کدام یک از این پرسش‌ها می‌توانیم پاسخ دهیم. همان‌طور که اشاره کردم سه قاعده‌ی اساسی در مدل پرواز گروهی وجود دارد. پرواز گروهی(flocking) در واقع دسته‌ای از پرندگان است که نزدیک به یکدیگر پرواز می‌کنند، تا حدودی در مسیر یکسانی حرکت می‌کنند، و البته با یکدیگر برخورد نمی‌کنند، که این امر مهمی است. این سه موردی که اشاره شد در حقیقت همان قواعد سه‌گانه‌ای هستند که مدلِ پروازِ گروهی را توصیف می‌کنند. به این ترتیب، هر پرنده بر مبنای پرنده‌های مجاورش تصمیم می‌گیرد. پرنده‌های پیرامونی‌اش را رصد می‌کند، که این رفتار توسط نوار تنظیمِ دید (vision slider) در مدلْ کنترل می‌شود. اینکه هر پرنده تا چه فاصله‌ای از خود را می‌تواند ببیند. و در این بازه‌ی دیدْ تمام پرنده‌ها را شناسایی کرده و آنها را همراهانِ پروازی‌اش تلقی می‌کند. اکنون بر مبنای آن همراهانِ پروازی، سعی می‌کند در مورد نحوه‌ی حرکتش تصمیم‌گیری کند. ابتدا سعی می‌کند خود را با سمت‌وسوی آنها هم‌تراز کند. به‌عبارتی دیگر به‌نحوی می‌چرخد که جهتش را نزدیک به میانگین جهتیِ گروهِ همراهانِ پروازی‌اش نگه دارد. این سبب می‌شود که پرندگان در مسیر حدودا یکسانی حرکت کنند. این قاعده به تنهایی خوب به‌نظر می‌رسد اما به شکل‌گیری گروهِ یکپارچه و منسجم منجر نمی‌شود. برای یکپارچگی به قاعده‌ی انسجام (cohere rule) نیاز داریم. قاعده‌ی انسجام می‌گوید زمانی که با پرنده‌های مجاور هم‌تراز شُدید، باید حرکت کوچکی در جهت مسیرِ هسته‌ی آن گروه بردارید. این قاعده سبب می‌شود که گروه معینی از پرندگانِ هم‌پرواز به یکدیگر نزدیک و نزدیک‌تر شوند. البته بدیهی است که نمی‌خواهیم بیش از اندازه به یکدیگر نزدیک شوند. به این ترتیب به قاعده‌ی سومی نیاز داریم. قاعده‌ی جدایش (separate rule) می‌گوید اگر داری به پرنده‌ی دیگری برخورد می‌کنی بایستی تغییر مسیر بدهی. این قاعده در بیشتر مواقع بر دو قانون دیگر مقدم می‌شود. بنابراین اگر این سه قاعده را کنار یکدیگر بگذاریم و مدل را اجرا کنیم، به الگوی پرواز دسته‌جمعی زیبایی را که می‌خواستیم مشاهده می‌کنیم. اکنون می‌توانید با این مدل بازی کنید و ببینید برای مثال اگر قانون هم‌ترازی را غیرفعال کنید چه اتفاقی می‌افتد. برای مثال در این اجرا از شبیه‌سازیْ من قانون هم‌ترازی را غیرفعال کردم. سرعت اجرای مدل را کمی بیشتر می‌کنم تا شما وضعیت نهایی را ببینید. می‌بینید با وجود افزایش قابل توجه زمان اجرای مدل، هیچ پرواز گروهی رخ نمی‌دهد. و البته دلیل آن این است که هیچ الزامی وجود ندارد که پرنده‌ها را در یک مسیر هم‌تراز کند. بنابراین، پرنده‌ها صرفا پیرامون یکدیگر پرواز می‌کنند. این در حالی است که قاعده‌های انسجام و جدایش فعال هستند. به همین دلیل است که آنها با هم برخورد نمی‌کنند و سعی می‌کنند نزدیک به هم پرواز کنند، اما چون خود را با پرنده‌های پیرامونی هم‌تراز نمی‌کنند، هیچ‌وقت برای زمان طولانی با یک گروهِ پروازی هم‌گروه نمی‌مانند. خب، قاعده‌ی هم‌ترازی را مجددا فعال کنیم، به درجه‌ی ۵، که تنظیم اولیه‌ی آن بود. الان قاعده‌ی انسجام را غیرفعال می‌کنیم، الان اگر مدل را اجرا کنیم و اجرا را طولانی کنیم شروع به مشاهده‌ی برخی پروازهای گروهی می‌کنیم. اما متاسفانه این هم‌پروازی‌ها پراکنده و در جهات متفاوتی هستند. جدایش و پراکنش آنها به این خاطر است که هیچ قاعده‌ای آنها را به‌صورت منسجم کنار یکدیگر نگه نمی‌دارد. در نهایت، قاعده‌ی انسجام را فعال و قاعده‌ی جدایش را غیرفعال می‌کنیم. اکنون سیستم را دوباره راه‌اندازی و سپس آن را برای زمانی طولانی اجرا می‌کنیم. و دوباره این هم‌پروازی‌ها را می‌بینیم، اما این هم‌پروازی‌ها با آنچه در سری پیش دیدیم متفاوت است، زیرا پرنده‌ها روی هم قرار گرفته و با یکدیگر برخورد می‌کنند. در نتیجه آن الگوهای زیبایی را که بایدْ مشاهده نمی‌کنیم. هدف نهایی این است که دریابیم این سه قاعده‌ی ساده می‌توانند الگوهای رفتاری‌ای را رقم بزنند که شباهت بسیاری با آنچه ما در پرنده‌های واقعی می‌بینیم دارند، اما نکته اینجاست که باید این قواعد را دقیقا همانند آنچه در طبیعت رخ می‌دهد تنظیم کنیم تا به نتیجه‌ی مطلوب برسیم. معمولا رسیدن به اینکه این قواعد کدامند زمان‌بر است. در حقیقت، در ادامه‌ی این دوره به کنکاش در این مورد می‌پردازیم، با صحبت پیرامون ماهیت قواعد ساده‌ای که رفتارها و الگوهای پیرامونی ما را می‌سازند، و چگونه مدل‌هایی بسازیم که این قواعد را برای ما بازنمایی کنند. ممنون!