PDA

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



silsin
14-05-2011, 11:52
می دونم جالب نیست کپی پیست از جاهای دیگه .ولی به نظر من اوردن مطالب از سایت های دیگه واسه بالا بردن سطح دانش دوستان بازی ساز خیلی خیلی مفیده .
پس اینم داشته باشین ((راستگی می گم . خداییش می گما این یه کمی زیادی تخصصیه . اون مطلب انجین ها رو کامل فهمیدم و حتی چیز ازش یاد گرفتم ولی این دیگه چیه خدا می دونه:18:))
((ادیت.. ها حالا فهمیدم این چیه:31:
زیاد هم قول بیشاخ و دمی نیست :31:))

ادیت..
منبع رو یادم رفت :

فروم مجید انلاین


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کاربر : Mahdi_Rashed

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

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

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

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

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

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

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

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

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

کد:
// 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 شبیه نمونه تک شاخه ای هست. البته با یک سری تغییرات جزیی. وقتی که کاراکتر تبعیت کننده از Goal Driven دستور اولیه رو دریافت میکنه، هسته هوش مصنوهی Goal Driven به کار میفته و برای کاراکتر دو انتخاب رو تعیین میکنه. با توجه به انتخاب کاراکتر تابع، دستور جدید اعمال میشه و کاراکتر باید اون رو انجام بده تا به مرحله بعد از شاخه انتخاب شده بره. در واقع انتخاب کاراکتر در این نحوه پردازش یک شاخه کلی هست که کاراکتر فقط در مورد حلقه ی اول اطلاعات داره و در مورد حلقه های بعدی شاخه چیزی نمیدونم. انتخاب کاراکتر تابع تماماً به متغیر های محیطی و متغیرهای مربوط به کاراکتر مربوط میشه.
بعد از این که حلقه های شاخه مورد نظر تموم شد، کاراکتر به یک هدف کلی که از پیش تعیین شده میرسه که در هر دو شاخه اول و دوم یکسان هست. یعنی دستور اولیه واحد کاراکتر تبعیت کننده رو بین دو شاخه قرار میده که هدف هر دو شاخه یکیه ولی مسیر و دستورات و برخی موارد سختی یا آسانی انجام اون کار فرق داره.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

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

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

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

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]اين تصوير از اندازه واقعي خود کوچکتر نمايش داده مي شود. براي ديدن اين تصوير در اندازه واقعي اينجا را کليک کنيد. اندازه واقعي اين تصوير 688 در 438 پيکسل است.[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

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