نحوه پردازش داده های در سیستم هوش مصنوعی Goal Driven

Mahdi_Rashed

Well-Known Member
در این پست میخوام در مورد نحوه پردازش داده های در سیستم هوش مصنوعی Goal Driven مطالبی رو بیان کنم. بهتره اول از خود سیستم Goal Driven شروع کنم.

سیستم هوش مصنوعی Goal Driven چیست ؟

Goal Driven یا هدایت به سوی هدف یکی از سیستم های هوش مصنوعی در طراحی بازیهای رایانه و ویدئویی هست که برای کاراکتر های تبعیت کننده انتخابهایی رو بر طبق داده های و مقادیر مختلف مربوط به کاراکتر یا مربوط به محیط بازی قرار میده. به عنوان مثال برای یک کاراکتر تبعیت کننده در یک بازی نیازمندی به عنوان خرید یک اسلحه تعریف میشه. پس کاراکتر باید نسبت به خرید اون اقدام کنه. موقع خرید اول به مقدار یا متغیر پول توجه میشه. اگه کافیه سلاح مورد نظر خریداری میشه ولی اگر کافی نیست تعدادی انتخاب برای اون تعریف میشه. مثلاً دزدین پول از افراد مختلف، کار کردن، گرفتن پول از یک دوست. کاراکتر تبعیت کننده از Goal Driven با توجه به متغیرهایی شبیه فاصله، زمان، اهمیت خرید اون اسلحه، خطراتی که ممکنه در راه پیش بیاد، در بازیهای پیشرفته تر خستگی و گرسنگی و... یکی از 3 گزینه رو انتخاب میکنه . مثلاً گرفتن پول از دوستش. اینجا سیستم هوش مصنوعی 2 گزینه رو در پیش روی کاراکتر قرار میده. رفتن به خونه ی دوستش یا زنگ زدن از طریق تلفن. اگر کاراکتر رفتن به خونه طرف رو انتخاب کنه Goal Driven به سیستم هوش مصنوعی دیگه ای متصل میشه که برای کاراکتر تبعیت کننده بهترین راه و شاید نزدیکترین راه رو انتخاب میکنه و کاراکتر از مسیر مشخص شده به زیر مجموعه هدف اصلی میره و بعد از گرفتن پول برمیگرده و اسلحه مورد نظرشو میخره.

سیستم Goal Driven از چهار نوع ساختار پردازش داده استفاده میکنه تا انتخابهای مختلفی رو در اختیار کاراکتر بذاره و اون رو با توجه به شرایط مختلف وادار به انتخاب یکی از راهها بکنه. این ساختارها در طی زمان کاملتر شدن و علت اینکه من این مقاله رو مینویسم اینه که یکی از جدیدترین روشهایی که اواخر سال 2010 ساخته شد و قابلیت اضافه شدن به Goal Driven رو داره باید جای خودشو به نمونه قبلی خودش بده. اما هنوز خیلی از طراحان از روش سوم استفاده میکنند با توجه به اینکه روش چهارم انتخابها و نحوه انتخاب هر گزینه رو بیشتر میکنه.

در پستهای آینده هر کدوم رو به صورت جداگانه تعریف میکنم و ساختار اونها رو به صورت عکس قرار میدم.

موفق باشید
 

Mahdi_Rashed

Well-Known Member
سیستم پردازش زنجیره ای - یک شاخه ای :

وقتی که سیستم Goal Driven برای اولین بار طراحی شد ( فکر کنم 1997 یا 98 ) پردازش زنجیره ای اولین متد پردازش دستورات برای کاراکتر تبعیت کننده بود. این سیستم پردازشی یک شاخه داره و از دو تابع اجرای دستور و انکار دستور استفاده میکنه. یعنی اگر کاراکتر نتونست اولین حلقه از رنجیره رو اجرا کنه چاره ای به جر انکار دریافت دستور نداره. یعنی مثلاً اگر برای خرید اسلحه که هدف هست پولی نداشت دیگه انتخابی برای رفتن و قرض گرفتن پول نداره.

13034756121.gif


همچنین اگر به شکل بالا دقت کنید همه فلشها یکطرفه هست و کاراکتر راه برگشت به دستور قبلی و برطرف کردن مشکلات احتمالی رو نداره. در شکل بالا هر شکل هندسی یک دستور یا انتخاب حساب میشه و فلشها طریقه دستیافتن به دستور و پیشروی در حلقه های زنجیره.

این سیستم در بازیهای زیادی اجرا نشد چون هنوز در مراحل آزمایشی به سر میبرد و توان محاسباتی پایینی داشت. همچنین تک شاخه بودن دستورات این سیستم هم مشکل بزرگی به وجود میاورد چون محدودیتهای زیادی رو برای کاراکتر تبعیت کننده داشت. همچنین امکان خطا در محاسبه و اجرای دستورات بسیار زیاد بود.

کد تعریف دستور اولیه :

کد:
// MC Script a.k.a. Main Core Script
define orderline01(); {
    set object aichar01(); {
       set action equipment(); {
          do reset value weapon01;(); {
             set value owning = 0;
             set cycle = 1;
             set recalc = 0;
          }
          do reset value weapon02;(); {
             set value owning = 0;
             set cycle = 1;
             set recalc = 0;
          }
       }
       set action requeriment(); {
          do reset value weapon01(); {
             set value owning = 1;
             set cycle = 1;
             set recalc = 1;
          }
       }
       set object aichar01(); {
          do reset value currentaiorder = orderact01;
       }
    }
} // End
کد تعریف انتخاب یک :

کد:
// MC Script a.k.a. Main Core Script
define orderact01(); {
    set object aichar01(); {
       do action movement(); {
          on position A = new a; // "on" can be replace by "for"
       } // position new a is a shop for buying weaponary
       while do action movement(); {
          set actor anim01 = walk01;
          set speed value = 10;
       }
    }
} // End
کد تعریف انتخاب دو :

کد:
define orderact02(); {
    set object aichar01(); {
       do action buying(); {
          for value weapon01() && owning() = 0; {
             if ( value cash >> 4000 ) { // weapon01 price is 4000
                do reset value owning = 1;
                else {
                    do action ignore();
                }
             }
             while do reset value owning(); {
                set cutscene buyingcs = buyingcslib01;
                set selectionmode = random;
             }
          }
       }
    }
} // End
کد تعریف شرایط هدف :

کد:
define goal(); {
    set object aichar01(); {
       set action equipment(); {
          get new value weapon01;(); {
             get new value owning = 1;
          }
       }
       set action requeriment(); {
          get new value weapon01(); {
             get new value owning = 0;
          }
       }
    }
} // End
کد سوییچ کردن از انتخاب یک به دو در صورت انجام :

کد:
// MC Script a.k.a. Main Core Script
set object aichar01(); {
    if ( value order orderact01 = 1 ) { // value 1 mean aichar01 done the orderact01
       do reset value currentaiorder = orderact02;
       else {
          do action ignore();
       }
    }
} // End
کد سوییچ کردن دستور دو به پایان شرط هدف در صورت انجام :

کد:
set object aichar01(); {
    if ( value order orderact02 = 1 ) {
       do check value globalai01(); {
          if ( value globalai01 = goal && set int _all ) {
                do reset value currentaiorder = goaldone;
             else {
                do action ignore();
             }
          }
       }
    }
} // End
کد تعریف پایان شرط هدف :

کد:
// MC Script a.k.a. Main Core Script
define goaldone(); { // database part
    set object aichar01(); {
       do reset value globalai01(); {
          set value currentjob = 0;
          set value waitfororder = 1;
          set recalc = 1;
       }
    }
} // End
البته یک سری از توابع هست که توی این اسکریپتها تعریف نکردم چون واقعاً حجم زیادی هست و نوشتنش ارزش نداره چون این سبک پردازش داده دیگه استفاده نمیشه. این نمونه هم فقط برای درک مفهوم هست و نوشتن این سیستم پردازش برای Goal Driven اصلاً توصیه نمیشه. اگر توی اسکریپت غلط غلوط املایی یا خیلی ضایع بود ببخشید چون با عجله نوشتم:green:
اسکریپت نویس : خودم
نوشته شده توسط زبان اسکریپت نویسی موتور طراحی بازی Main Core
 
آخرین ویرایش:
دادا مقالت خیلی عالی بود.واقعا دستت درد نکنه.
میشه ازت خواهش کنم درمورد هوش مصنوعی بازی هایی مثل heavy rain یا کرایسیس 2 یکم توضیح بدی.
تو بازی heavy rain یه صحنه تعقیب و گریز بود که من فکر میکنم فرارتر از یک انیمیشن و رفتار ساده بود.واقعا برام مهمه میخوام بدونم چطور
یه همچین صحنه های تعقیب و گریزی میسازند که ما در هدایت بازی نقشی نداریم و همه کارها رو با هوش مصنوعی انجام میدن.
البته فکر نکنم این صحنه ها رو تو مکس بسازن و انیمیتش بدن و بعد بیارن داخل موتور و با چندتا event سروته قضیه رو هم بیارن.فکر کنم یه
هوش مصنوعی قوی پشت اینکاره .ممنون میشم اگه توضیح بدی.
 

Mahdi_Rashed

Well-Known Member
دادا مقالت خیلی عالی بود.واقعا دستت درد نکنه.
میشه ازت خواهش کنم درمورد هوش مصنوعی بازی هایی مثل heavy rain یا کرایسیس 2 یکم توضیح بدی.
تو بازی heavy rain یه صحنه تعقیب و گریز بود که من فکر میکنم فرارتر از یک انیمیشن و رفتار ساده بود.واقعا برام مهمه میخوام بدونم چطور
یه همچین صحنه های تعقیب و گریزی میسازند که ما در هدایت بازی نقشی نداریم و همه کارها رو با هوش مصنوعی انجام میدن.
البته فکر نکنم این صحنه ها رو تو مکس بسازن و انیمیتش بدن و بعد بیارن داخل موتور و با چندتا event سروته قضیه رو هم بیارن.فکر کنم یه
هوش مصنوعی قوی پشت اینکاره .ممنون میشم اگه توضیح بدی.

سیستم هوش مصنوعی کرای سیس 2 رو نمیدونم چون هنوز وقت نکردم بازی رو نصب کنم. ولی کرای سیس قبلی از logic AI و ترکیب بخشهایی از path یا way point استفاده میکرد. ولی با پیشرفت موتور طراحی بازی کرای به نسخه بالاتر حتماً سیستم هوش مصنوعی جدیدتری استفاده کردند.

بازی heavy Rain هم خیلی در موردش شنیدم و مطالعه کردم ولی چون کنسول Play Station ندارم نتوسنتم بازی کنم. تو فکر خریدش هستم ولی میترسم که خیلی روش وقت بذارم از بقیه کارام بمونم. در مورد این بازی شنیده بودم که رفتارها و اعمال غیر منتظره توش زیاده ولی خوب مطمئن نیستم. ممکنه از سیستم هوش مصنوعی منطق یا logic با متدهای برنامه نویسی پیشرفته استفاده کرده باشن. شاید از منطق فازی استفاده کرده باشن و شاید هم از همین سیستم Goal Driven ولی نسخه های تغییر یافته . اگر اطلاعاتی پیدا کردم حتماً اینجا ذکر میکنم.
 

Mahdi_Rashed

Well-Known Member
سیستم پردازش زنجیره ای - دو شاخه ای :

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

13034756122.gif


با توجه به این عکس توضیحاتی که دادم ساده تر میشه. این نوع سیستم پردازشی در Goal Driven در سال 2000 ارائه شد و علتش کم بودن تنوع دستوری در محیط بازی بود. البته این نوع پردازش هم با توجه به فلشهای یک سویی که داره از پردازش یک طرفه استفاده میکنه و اگر در میان راه نتونه دستور یکی از حلقه ها رو انجام بده مستقیماً به دستور انکار یا ignore هدایت میشه. برنامه نویسی این نوع سیستم پردازش در Goal Driven شبیه نمونه قبلی هست ولی تعداد حلقه ها اول به دو دسته کلی به عنواع شاخه و بعد به ترتیب برای هر شاخه دستوراتی تعریف میشه. شاخه ها بیشتر از دو تا نمیتونن باشن ولی در هر شاخه میتونه تا چندین دستور رو با توجه به سطح پردازش سخت افزاری دریافت کنه. همچنین مثلاً شاخه اول میتونه 3 دستور و شاخه دوم 5 دستور دریافت کنه. فاصله ی بین دستور اولیه و شاخه ها توسط کد ها و فایلهای برنامه نویسی هسته هوش مصنوعی Goal Driven پر میشه و الگوریتم های منطق یک انتخاب رو به کاراکتر تبعیت کننده ارائه میده تا انتخابی که صورت میگیره با توجه به متغیرهای خود کاراکتر و محیط منطقی به نظر بیاد.
 

Mahdi_Rashed

Well-Known Member
سیستم پردازش شاخه-درختی :

سیستم شاخه-درختی از سال 2003 در سیستم هوش مصنوعی Goal Driven اضافه شد. سیستم شاخه-درختی دستورات هوش مصنوعی رو از یک دستور پایه به صورت ساختار درخت و شاخه به کاراکتر تابع هوش مصنوعی اعمال میکرد. سیستم شاخه-درختی میتونست در اول به دو رویه و اجرا هدف مختلف یا شاخه ی اصلی تقسیم بشه تا هدف اصلی رو دنبال کنه. هر شاخه هم میتونست از 1 تا 9 انتخاب رو برای کاراکتر ایجاد کنند اما در پایان هر دسته میتونست به 1 یا دو هدف مختلف تقسیم بشه. بنابراین سیستم شاخه-درختی میتونست دارای چندین هدف باشه ولی همه ی هدفها به یک نوع تعریف میشدند ولی راه دستیابی به اونها فرق داشت. مثلاً برای ورود به یک قصر کاراکتر تابع هوش مصنوعی در بین یک چند راهی گیر میکنه که یکی این راهها مستقیم به قصر میرسه ولی بقیه با موانع و راههای پیچدرپیج و فرقش این هست که مثلاً به جای این که از در شمالی به قصر وارد بشه از در جنوب یا شرق و... وارد قصر میشه. سیستم شاخه-درختی دارای یک محدودیت بود و اون غیر قابل بازگشتی بودن دستورات به شاخه قبل بود ولی از مواردی که در اون حل شده بود این بود که اگر یکی از گزینه های شاخه جواب نداد یا کاراکتر قادر به انجام اون نبود این قابلیت وجود داشت تا انتخاب دیگه ای از همون شاخه برای کاراکتر تابع درنظر گرفته بشه. ولی اگر همه انتخابها از طرف کاراکتر رد شد در این موقع هست که دستور Ignore اعمال میشه و کاراکتر از چرخه سیستم هوش مصنوعی بیرون میاد. البته دستورات در سیستم شاخه-درختی به گونه ای طراحی میشن که حتماً یکی از گزینه ها در هر شاخه ممکن باشه.

13034756120.gif


متدهای برنامه نویسی متفاوتی برای سیستم شاخه-درختی تعریف شده ولی هیچکدوم از اونها بهتر از متد ساختار if-else برای سیستم شاخه-درختی مناسب نیست. هر شاخه ، برگ و ... ترکیبی از دستورات گنجانده شده در if و رد اون توسط else تشکیل میشه که سرعت محاسباتی رو بسیار زیاد میکنه. دستور اولیه همون تنه ی درخت در نظر گفته میشه ، شاخه های اصلی رویه اصلی دستور هوش مصنوعی Goal Driven رو تعریف میکنه و یکی از محدودیت های سیستم شاخه-درختی این هست که بیشتر از دو شاخه ی اصلی نمیتونه وجود داشته باشه. شاخه های دیگه میتونن بیشتر از 2 و تا 9 دستور رو پشتیبانی کنند ولی شاخه اصلی نمیتونه. برگ آخرین مرحله در چرخ سیستم شاخه-درختی هست و بعد از برگ میوه یا هدف هوش مصنوعی و دستور اون هست . پس تا قبل از برگ میشه مراحل زیادی از انتخاب های رو به صورت شاخه آورد ولی برگ مرحله آخر هست و بعد از اون رسیدن به هدف اصلی سیستم شاخه-درختی و هوش مصنوعی Goal Driven تعریف میشه.

یک مدت ناچار هستم که به ندرت پست هام رو به روز کنم چون امتحانات داره شروع میشه و وقت ترجمه ندارم.
همگی موفق باشید:rose:
 

جدیدترین ارسال ها

بالا