رفتن به محتوای اصلی
Koohestun
توضیح کوهستانهوش مصنوعی بازیمقاله تشریحی· 8 دقیقه مطالعه· در بازی و ورزش‌های الکترونیک

گره‌های توالی، انتخاب‌گر و دکوراتور: درخت‌های رفتار چگونه هوش مصنوعی پیچیده بازی‌ها را معماری می‌کنند

درخت‌های رفتار با استفاده از ساختاری ماژولار و سلسله‌مراتبی برای هدایت هوش مصنوعی، جایگزین ماشین‌های حالت متناهی خشک و انعطاف‌ناپذیر شدند. موتورهای بازی‌سازی مدرن با ارزیابی گره‌های توالی و انتخاب‌گر می‌توانند تصمیمات تاکتیکی پیچیده را برای صدها عامل به‌طور همزمان پردازش کنند.

به قلم ویدا فراهانی

توسعه‌دهندگان موتور 35%برنامه‌نویسان بازی 35%محققان دانشگاهی 30%
توسعه‌دهندگان موتور
تمرکز بر مقیاس‌پذیری و کارایی حافظه در معماری.
برنامه‌نویسان بازی
تمرکز بر ماژولار بودن، تکرار سریع و دیباگ بصری.
محققان دانشگاهی
تمرکز بر مدل‌های ریاضی اجرای برنامه و کاربردهای بین‌صنعتی.

دیدگاه‌هایی که این گزارش پوشش نداده

  • طراحان تجربه بازیکن
  • مهندسان یادگیری ماشین

بررسی عمیق دیدگاه‌ها

توسعه‌دهندگان موتور

تمرکز بر مقیاس‌پذیری و کارایی حافظه در معماری.

برای تیم‌هایی که فناوری زیربنایی بازی‌ها را می‌سازند، ارزش اصلی یک درخت رفتار توانایی آن در مقیاس‌پذیری است. توسعه‌دهندگان موتور، جداسازی منطق تصمیم‌گیری ایستا از داده‌های وضعیت پویای عوامل فردی را در اولویت قرار می‌دهند. با استفاده از ساختارهای حافظه متمرکز مانند تخته‌سیاه، آن‌ها تضمین می‌کنند که یک بازی می‌تواند صدها موجودیت پیچیده هوش مصنوعی را بدون تکثیر درخت منطق در حافظه ایجاد کند، بار پردازنده را پایین نگه دارد و نرخ فریم پایداری را حفظ کند.

برنامه‌نویسان بازی

تمرکز بر ماژولار بودن، تکرار سریع و دیباگ بصری.

برنامه‌نویسان و طراحان هوش مصنوعی، درخت‌های رفتار را یک بهبود عظیم در کیفیت زندگی نسبت به معماری‌های قدیمی‌تر می‌دانند. ماهیت ماژولار گره‌ها به آن‌ها اجازه می‌دهد تا کتابخانه‌هایی از رفتارهای قابل‌استفاده مجدد—مانند دور زدن، پناه گرفتن یا خشاب‌گذاری—بسازند که می‌توانند به هر نوع دشمنی متصل شوند. علاوه بر این، توانایی ردیابی بصری تیک اجرا در طول درخت در زمان واقعی، به آن‌ها اجازه می‌دهد تا فوراً گلوگاه‌های منطقی را شناسایی کرده و زمان صرف‌شده برای دیباگ کردن روتین‌های خراب هوش مصنوعی را به‌شدت کاهش دهند.

محققان دانشگاهی

تمرکز بر مدل‌های ریاضی اجرای برنامه و کاربردهای بین‌صنعتی.

در بخش‌های دانشگاهی و رباتیک، محققان با درخت‌های رفتار به‌عنوان یک مدل ریاضی رسمی از اجرای برنامه برخورد می‌کنند. آن‌ها این معماری را به دلیل جابه‌جایی قابل‌پیش‌بینی و سلسله‌مراتبی بین وظایف متناهی که در برابر نویز حسگرها و خرابی‌های مکانیکی رایج در رباتیک دنیای واقعی بسیار مقاوم است، ارزشمند می‌دانند. برای این اردوگاه، این چارچوب کمتر درباره خلق یک دشمن سرگرم‌کننده در بازی ویدیویی است و بیشتر درباره اطمینان از این موضوع است که یک پهپاد خودمختار یا بازوی رباتیک بتواند در صورت مسدود شدن فیزیکی هدف اصلی‌اش، به‌زیبایی به برنامه‌های جایگزین عقب‌نشینی کند.

چرا مهم است

درخت‌های رفتار همان معماری نامرئی هستند که تک‌تک تصمیمات تاکتیکی دشمنان در بازی‌های ویدیویی مدرن را دیکته می‌کنند. درک نحوه پردازش منطق توسط آن‌ها نشان می‌دهد که چرا حریفان دیجیتالی هوشمندانه عمل می‌کنند، توسعه‌دهندگان چگونه اکوسیستم‌های عظیم جهان‌باز را مدیریت می‌کنند و چرا این چارچوب اکنون برای کنترل رباتیک در دنیای واقعی به کار گرفته می‌شود.

نتیجه یک درگیری مسلحانه دیجیتالی در کسری از میلی‌ثانیه رقم می‌خورد؛ درست در همان لحظه‌ای که هوش مصنوعی یک گره انتخاب‌گر (Selector) را ارزیابی می‌کند. این همان تقاطع حیاتی است که در آن یک شخصیت غیرقابل‌بازی تصمیم می‌گیرد سر جایش بایستد یا برای پناه گرفتن شیرجه بزند. یک گره انتخاب‌گر شرایط زیرمجموعه خود را از چپ به راست ارزیابی می‌کند و به‌محض اینکه یکی از آن‌ها با موفقیت همراه شود، متوقف می‌گردد. اگر شاخه اول—که بررسی می‌کند آیا عامل بیش از ۲۰ درصد جان دارد یا خیر—شکست بخورد، اجرا بلافاصله به شاخه دوم سقوط می‌کند و یک روتین جاخالی دادن را فعال می‌سازد. همین ارزیابی آنی و واحد است که دیکته می‌کند آیا بازیکن با یک هدف احمق و بی‌مغز روبه‌رو است یا یک تهدید تاکتیکی تمام‌عیار؛ موضوعی که انتخاب‌گر را به محور معماری هوش مصنوعی در بازی‌های مدرن تبدیل می‌کند.[2][4]

پیش از آنکه این رویکرد ماژولار صنعت را تسخیر کند، توسعه‌دهندگان بازی برای دیکته کردن نحوه واکنش دشمنان به بازیکنان، به‌شدت به ماشین‌های حالت متناهی (Finite State Machines) وابسته بودند. در یک ماشین حالت متناهی، هر رفتار ممکن یک حالت مجزا است و توسعه‌دهندگان باید انتقال بین آن‌ها را به‌صورت دستی کدنویسی کنند. افزودن تنها یک واکنش جدید—مانند جاخالی دادن از یک نارنجک—به عاملی با ۱۰ حالت موجود، نیازمند سیم‌کشی تا ۱۰ انتقال جدید است. این مقیاس‌پذیری نمایی، شبکه‌های درهم‌تنیده و غیرقابل‌مدیریتی از منطق ایجاد می‌کرد که در طول توسعه مدام از هم می‌پاشید. این پارادایم در سال ۲۰۰۴ با انتشار بازی Halo 2 به‌طرز چشمگیری تغییر کرد؛ زمانی که استودیوی بانجی (Bungie) از یک ساختار سلسله‌مراتبی جدید برای مدیریت تاکتیک‌های پیچیده نیروهای بیگانه کاوننت (Covenant) بهره برد.[1]

آن ساختار چیزی نبود جز درخت رفتار (Behavior Tree)؛ یک مدل ریاضی از اجرای برنامه که جریان روان و سلسله‌مراتبی از وظایف را جایگزین انتقال‌های خشک و بی‌روح حالت کرد. رسانه گیم دولوپر (Game Developer) در این باره توضیح می‌دهد: «برخلاف یک ماشین حالت متناهی یا سایر سیستم‌های مورد استفاده برای برنامه‌نویسی هوش مصنوعی، یک درخت رفتار، درختی از گره‌های سلسله‌مراتبی است که جریان تصمیم‌گیری یک موجودیت هوش مصنوعی را کنترل می‌کند.» در بالاترین نقطه این ساختار، گره ریشه قرار دارد که یک سیگنال فعال‌کننده—معروف به تیک (tick)—را با فرکانسی مشخص، اغلب ۶۰ بار در ثانیه، به سمت پایین شاخه‌ها می‌فرستد. این تیک همان ضربان قلب هوش مصنوعی است که به‌طور پیوسته محیط را ارزیابی کرده و تعیین می‌کند در هر لحظه کدام شاخه از منطق باید فعال باشد.[4]

برخلاف ماشین‌های حالت متناهی، درخت‌های رفتار به توسعه‌دهندگان اجازه می‌دهند تا بدون نیاز به سیم‌کشی مجدد انتقال‌های موجود، شاخه‌های منطقی جدیدی اضافه کنند.

همان‌طور که تیک در طول درخت به پایین حرکت می‌کند، با گره‌های کنترل جریان روبه‌رو می‌شود که مسیر آن را دیکته می‌کنند؛ بنیادی‌ترینِ آن‌ها گره توالی (Sequence) است. یک توالی مانند یک دروازه منطقی AND عمل می‌کند و گره‌های فرزند خود را دقیقاً از چپ به راست اجرا می‌کند. برای اینکه توالی یک موفقیت را به والد خود برگرداند، تک‌تک فرزندان باید موفق شوند. اگر به یک عامل هوش مصنوعی دستور حمله داده شود، توالی ممکن است ابتدا بررسی کند که آیا سلاح پر است، سپس هدف را نشانه‌گیری کند و در نهایت ماشه را بکشد. اگر سلاح خالی باشد، شرط اول با شکست مواجه می‌شود، کل توالی فوراً لغو می‌گردد و هوش مصنوعی می‌فهمد که نمی‌تواند حمله را اجرا کند.[2][4]

وقتی یک توالی شکست می‌خورد، درخت به یک جایگزین نیاز دارد و اینجاست که گره انتخاب‌گر—که گاهی گره عقب‌نشینی نامیده می‌شود—وارد عمل می‌شود. انتخاب‌گر که به‌عنوان یک دروازه منطقی OR عمل می‌کند، فرزندان خود را نیز از چپ به راست ارزیابی می‌کند، اما تنها به موفقیت یکی از آن‌ها نیاز دارد. اگر توالی حمله اصلی به دلیل خالی بودن سلاح شکست بخورد، انتخاب‌گر به گزینه در دسترس بعدی سقوط می‌کند که ممکن است توالیِ خشاب‌گذاری مجدد سلاح یا تغییر به حمله تن‌به‌تن باشد. این مکانیزم عقب‌نشینی آبشاری به توسعه‌دهندگان اجازه می‌دهد تا هوش مصنوعی بسیار مقاومی بسازند که بدون درهم‌شکستن منطق بازی، به‌زیبایی از تاکتیک‌های بهینه به اقدامات ناامیدانه برای بقا تنزل پیدا می‌کند.[2]

گره‌های توالی نیازمند موفقیت تمام زیرمجموعه‌ها هستند، در حالی که گره‌های انتخاب‌گر به‌محض موفقیت یک زیرمجموعه، ارزیابی را متوقف می‌کنند.
وقتی یک توالی شکست می‌خورد، درخت به یک جایگزین نیاز دارد و اینجاست که گره انتخاب‌گر—که گاهی گره عقب‌نشینی نامیده می‌شود—وارد عمل می‌شود.

در حالی که توالی‌ها و انتخاب‌گرها جریان کلی اجرا را کنترل می‌کنند، گره‌های دکوراتور (Decorator) برای تغییر یا محدود کردن رفتار یک گره فرزند واحد وجود دارند. یک دکوراتور می‌تواند یک موفقیت را به شکست تبدیل کند، یک حلقه را مجبور کند تا تعداد دفعات مشخصی اجرا شود، یا یک تایمر خنک‌کننده سخت‌گیرانه را بر یک عمل تحمیل کند. اگر دشمنی برای پرتاب نارنجک برنامه‌ریزی شده باشد، یک گره دکوراتور می‌تواند آن عمل را در یک تایمر خنک‌کننده ۱۵ ثانیه‌ای بپیچد و تضمین کند که هوش مصنوعی با پرتاب پیاپی مواد منفجره، تجربه بازیکن را خراب نمی‌کند. با ایزوله کردن این اصلاح‌کننده‌ها در دکوراتورها، توسعه‌دهندگان منطق هسته را تمیز و قابل‌استفاده مجدد در میان انواع مختلف دشمنان نگه می‌دارند.[3][4]

در پایین‌ترین سطح درخت، گره‌های برگ قرار دارند که همان وظایف اجرایی واقعی هستند که با دنیای بازی تعامل دارند. این برگ‌ها به دو دسته تقسیم می‌شوند: شرایط و اقدامات. گره‌های شرطی به‌صورت منفعلانه محیط را پرس‌وجو می‌کنند و بررسی می‌کنند که آیا بازیکن در فاصله ۵۰ متری قرار دارد یا اینکه آیا عامل خط دید واضحی دارد. گره‌های اقدام به‌طور فعال وضعیت بازی را تغییر می‌دهند و به مدل شخصیت دستور می‌دهند تا انیمیشن دویدن را پخش کند، مهمات را کسر کند یا مسیریابی به یک مختصات خاص را انجام دهد. وقتی یک گره برگ تیک می‌خورد، یکی از سه وضعیت را به والد خود برمی‌گرداند: موفقیت، شکست یا در حال اجرا—که مورد آخر نشان می‌دهد یک اقدام چندفریمی، مانند حرکت در طول یک اتاق، هنوز در جریان است.[2]

قدرت واقعی این معماری در ماژولار بودن فوق‌العاده آن نهفته است که به توسعه‌دهندگان اجازه می‌دهد رفتارهای مختلف را مانند بلوک‌های سازنده دیجیتالی به هم متصل کنند. از آنجا که هر گره رابط کاربری یکسانی را به اشتراک می‌گذارد—پذیرش یک تیک و بازگرداندن یک وضعیت—یک شاخه رفتار پیچیده که برای یک تک‌تیرانداز طراحی شده است، می‌تواند به‌راحتی به یک واحد پیاده‌نظام استاندارد پیوند زده شود. کتاب Game AI Pro خاطرنشان می‌کند: «درخت رفتار نه‌تنها یک پایه محکم برای ساخت‌وساز به شما می‌دهد، بلکه انعطاف‌پذیری زیادی را برای گنجاندن تکنیک‌های دیگر به روشی فراهم می‌کند که کنترل کاملی بر رفتار و عملکرد به شما می‌دهد.» این قابلیت استفاده مجدد، زمان توسعه را به‌شدت کاهش می‌دهد و به طراحان اجازه می‌دهد تا تاکتیک‌های هوش مصنوعی را بدون بازنویسی کدهای زیربنایی تکرار و اصلاح کنند.[2]

با بزرگ‌تر شدن مقیاس بازی‌ها، توسعه‌دهندگان موتورهای بازی‌سازی مانند اپیک گیمز (Epic Games) درخت‌های رفتار را بهینه‌سازی کرده‌اند تا صدها عامل فعال را به‌طور همزمان مدیریت کنند. در موتور آنریل (Unreal Engine)، معماری بین خود درخت رفتار که منطق تصمیم‌گیری را در خود جای داده و تخته‌سیاه (Blackboard) که یک جزء حافظه متمرکز برای ذخیره داده‌های خاص عامل است، تقسیم می‌شود. با جدا کردن منطق از داده‌ها، موتور می‌تواند یک نمونه واحد از درخت رفتار را در حافظه بارگذاری کرده و آن را در میان ۲۰۰ واحد دشمن مختلف به اشتراک بگذارد، در حالی که هر واحد برای ردیابی وضعیت فردی خود به تخته‌سیاه سبک‌وزن خود ارجاع می‌دهد. این رویکرد نسل دوم از تورم حافظه جلوگیری کرده و بار پردازنده را در حداقل ممکن نگه می‌دارد.[2][3]

موتورهای بازی‌سازی مدرن منطق تصمیم‌گیری را از حافظه عامل جدا می‌کنند و به صدها دشمن اجازه می‌دهند تا یک درخت رفتار واحد را به اشتراک بگذارند.

فراتر از عملکرد، ماهیت سلسله‌مراتبی درخت‌های رفتار یک تجربه دیباگ بصری بی‌نظیر را برای طراحان بازی فراهم می‌کند. از آنجا که منطق به‌طور قابل‌پیش‌بینی از بالا به پایین و از چپ به راست جریان دارد، توسعه‌دهندگان می‌توانند اجرای درخت را در زمان واقعی درون ویرایشگر موتور تماشا کنند. اگر یک NPC هنگام دویدن به دیوار گیر کند، طراح می‌تواند دقیقاً ببیند کدام توالی وضعیت «در حال اجرا» را برمی‌گرداند و کدام شرط نتوانسته انتخاب‌گرِ جاخالی دادن را فعال کند. این شفافیت، حدس و گمان‌هایی را که سیستم‌های قدیمی‌تر هوش مصنوعی را آزار می‌داد از بین می‌برد و به تیم‌ها اجازه می‌دهد تا حفره‌های منطقی را پیش از عرضه بازی به‌سرعت شناسایی و وصله کنند.[3]

کارایی و خوانایی این معماری، پذیرش آن را به فراتر از مرزهای صنعت بازی‌های ویدیویی کشانده است. در طول دهه گذشته، محققان رباتیک به‌طور فزاینده‌ای از درخت‌های رفتار برای برنامه‌ریزی چارچوب‌های کنترل چندماموریتی برای پهپادها و بازوهای رباتیک استفاده کرده‌اند. همان منطق انتخاب‌گری که به یک سرباز مجازی می‌گوید پناه بگیرد، اکنون برای این استفاده می‌شود که به یک ربات دودست بگوید اگر گرفتن اولیه با شکست مواجه شد، زاویه گرفتن متفاوتی را امتحان کند. این انتقال نیازمند تطبیق گره‌ها برای مدیریت نویز حسگرها و محدودیت‌های مکانیکی دنیای واقعی بود، اما مدل ریاضی هسته کاملاً یکسان باقی مانده است.[1]

در حالی که صنعت به سمت ادغام مدل‌های زبانی بزرگ و شبکه‌های عصبی در توسعه بازی حرکت می‌کند، پیش‌بینی‌پذیری ساختاریافته درخت‌های رفتار یک لنگرگاه ضروری را فراهم می‌آورد. اگرچه یادگیری ماشین می‌تواند واکنش‌های بسیار پویایی تولید کند، اما همچنان یک جعبه سیاه است که دیباگ کردن و محدود کردن آن در پارامترهای سخت‌گیرانه گیم‌پلی دشوار است. ایستگاه بازرسی قابل‌تایید بعدی برای معماری هوش مصنوعی، مدل ترکیبی است؛ جایی که یک درخت رفتار مرزهای تاکتیکی سطح بالا را دیکته می‌کند—و تضمین می‌کند که عامل همیشه بقا و تکمیل هدف را در اولویت قرار می‌دهد—در حالی که شبکه‌های عصبی اجرای خرد حرکت و هدف‌گیری را مدیریت می‌کنند. تا زمانی که این ترکیب به کمال نرسد، گره‌های توالی، انتخاب‌گر و دکوراتور معماران بلامنازع هوش مجازی باقی خواهند ماند.[1][2]

نکات کلیدی

  • درخت‌های رفتار با ارائه رویکردی ماژولار و سلسله‌مراتبی در تصمیم‌گیری هوش مصنوعی، جایگزین ماشین‌های حالت متناهی شدند.
  • گره‌های توالی مانند دروازه‌های AND عمل می‌کنند و برای اعلام موفقیت، نیازمند موفقیت تمام وظایف زیرمجموعه خود هستند.
  • گره‌های انتخاب‌گر مانند دروازه‌های OR عمل می‌کنند و به‌محض موفقیت تنها یکی از وظایف زیرمجموعه، ارزیابی را متوقف می‌کنند.
  • گره‌های دکوراتور خروجی یک زیرمجموعه واحد را تغییر می‌دهند و امکاناتی مانند تایمرهای خنک‌کننده و حلقه‌ها را فراهم می‌کنند.
  • موتورهای مدرن، درخت منطق را از حافظه عامل جدا می‌کنند و به صدها NPC اجازه می‌دهند تا یک درخت واحد را به اشتراک بگذارند.

اصطلاحات کلیدی

تیک
یک سیگنال فعال‌کننده که از ریشه درخت رفتار ارسال می‌شود و وضعیت فعلی گره‌ها را ارزیابی می‌کند و معمولاً در هر فریم اجرا می‌شود.
گره برگ
نقاط پایانی یک درخت رفتار که شامل وظایف اجرایی واقعی هستند و به دو دسته شرایط و اقدامات تقسیم می‌شوند.
تخته‌سیاه
یک جزء حافظه متمرکز که داده‌های خاصی را برای یک عامل هوش مصنوعی فردی ذخیره می‌کند و از منطق تصمیم‌گیری مشترک مجزا است.
ماشین حالت متناهی
یک معماری قدیمی‌تر هوش مصنوعی که در آن هر رفتار یک حالت مجزا است و توسعه‌دهندگان باید قوانین انتقال بین آن‌ها را به‌صراحت تعریف کنند.
گره کنترل جریان
گره‌های داخلی درخت، مانند توالی‌ها و انتخاب‌گرها، که مسیر حرکت تیک را بر اساس موفقیت یا شکست فرزندانشان دیکته می‌کنند.

منابع

پوشش منابع

5 منبع

3 دیدگاه شناسایی‌شده

توسعه‌دهندگان موتور 35%برنامه‌نویسان بازی 35%محققان دانشگاهی 30%
  1. [1]Academia.eduمحققان دانشگاهی

    Behavior Trees for Modelling Artificial Intelligence in Games: A Tutorial

    مطالعه در Academia.edu
  2. [2]Game AI Proتوسعه‌دهندگان موتور

    The Behavior Tree Starter Kit

    مطالعه در Game AI Pro
  3. [3]Epic Gamesتوسعه‌دهندگان موتور

    Behavior Tree in Unreal Engine - Quick Start Guide

    مطالعه در Epic Games
  4. [4]Game Developerبرنامه‌نویسان بازی

    Behavior trees for AI: How they work

    مطالعه در Game Developer
  5. [5]تیم سردبیری کوهستان

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

دریافت بازی و ورزش‌های الکترونیک اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.