PDA

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



nibble
01-10-2008, 16:46
در بسیاری از ژانرهای بازی‌های كامپیوتری، نزدیك‌تر بودن به واقعیت، هم برای سازندگان و هم برای دوستداران بازی جایگاه ویژه‌ای دارد. گرافیك بازی‌ها در طبیعی‌تر جلوه دادن محیط و چهره‌ها، و استفاده از صدا و افكت‌های صوتی پیشرفته در واقعیت بخشیدن به اتفاقاتی كه در بازی‌ها با آن روبه‌رو می‌شویم، مؤثرند. انیمیشن نیز هر چه با دقت و جزئیات بیشتری طراحی شود، باورپذیرتر به نظر می‌آید. ولی آنچه دوستداران بازی را در ژانرهای ویژه‌ای از بازی‌ها به وجد می‌آورد، هوشمندی شخصیت‌های بازی است. حوصله همه از این‌كه هم‌تیمی‌های مجازیشان در بازی‌های كامپیوتری نسنجیده عمل‌كنند، سر می‌رود. گاه آن‌ها نمی‌توانند از خودشان هم محافظت كنند؛ چه برسد به آن‌كه بخواهند در طول بازی به شما كمك كنند. مبارزه با دشمنانی كه دست كمی از افرادتان ندارند نیز جذابیتی ندارد. همان‌گونه كه گرافیك خوب به مدل‌ها، صدای خوب به رویدادها و انیمیشن خوب به حركت‌های موجود در بازی واقعیت می‌بخشد، استفاده از روش‌های مختلف هوش مصنوعی نیز رفتار شخصیت‌های بازی را طبیعی‌تر می‌كند. در بازی‌های كامپیوتری، هوش مصنوعی بیشتر برای شخصیت‌های مجازی مقابل شما به كار می‌رود و اگر در بازی، هم‌تیمی‌هایی نیز داشته باشید كه خودِ بازی، آن‌ها را كنترل می‌كند، برای آن‌ها نیز به كار می‌رود. برای ملموس‌تر بودن توضیحاتی كه در ادامه پیش‌رو خواهد بود، از رفتار شخصیت‌های مجازی بازی Counter - 1.7 Strike در حالتی كه دست‌كم كنترل یك طرف بازی با كامپیوتر است و بازی‌های Quake استفاده خواهد شد. هوش مصنوعی در بازی Counter - Strike به خوبی پیاده‌سازی شده است و بسیاری از دوستداران بازی نیز با آن آشنا هستند. وقتی در هر مرحله، شخصیت‌ مجازی شما كشته می‌شود و چند دقیقه‌ای از بازی بیرون هستید، زمان خوبی است كه رفتار هم تیمی‌ها و دشمنانتان را بررسی كنید و به عملكرد هوش مصنوعی آن‌ها پی ببرید. پنهان‌شدن، آهسته حركت كردن و همكاری آن‌ها با هم، بسیار دیدنی است و در كمتر بازی‌ای چنین رفتارهایی دیده می‌شود.

كاربرد هوش مصنوعی


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

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

از دید فروشنده، شما با سیستم صفر و یك پاسخ داده‌اید و بازی‌های دیگر را انتخاب نكرده‌اید. هرچند در واقع شما فازی فكر كرده‌اید، ولی با منطق صفر و یك پاسخ داده‌اید. اگر كامپیوترها فازی‌تر تحلیل كنند، هوشمندتر می‌شوند. ولی پاسخ آن‌ها باید براساس همین صفر و یك باشد؛ چرا كه هیچ كس نمی‌خواهد یك پاسخ غیرقطعی از كامپیوتر دریافت كند. هر چه رفتارهای شخصیت‌های بازی بیشتر براساس سیستم فازی باشد، پیش‌بینی‌ناپذیرتر و هوشمندانه‌تر خواهند بود. یعنی می‌توانند در مقابل رفتارهای مختلف شما و موقعیت محیط، رفتارهایی متفاوت نشان دهند.


انواع هوش مصنوعی :


در بازی‌های كامپیوتری سه نوع هوش بیشتر از همه استفاده می‌شوند كه به صورت خلا‌صه عبارتند از:

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

هوش مصنوعی هدف‌گرا: این نوع هوش مصنوعی از هوش مصنوعی رویدادگرا مستقل است. ولی هوش مصنوعی رویدادگرا می‌تواند در طراحی یك بازی، هدف‌های موتور هوش مصنوعی هدف‌گرا را تامین كند. این نوع هوش مصنوعی، هدفِ با ارزش بیشتر را برمی‌گزیند و آن را با تقسیم به زیرهدف‌های كوچك‌تر، پردازش می‌كند.

شاید در بازی كانتراسترایك زمانی كه كامپیوتر هم كنترل هم تیمی‌ها و هم كنترل دشمنان شما را به عهده دارد، دیده باشید كه وقتی با هم تیمی‌هایتان به سوی دشمنان خود تیراندازی می‌كنید، آن‌ها هم بیشتر به سوی شما شلیك می‌كنند تا دیگر هم‌تیمی‌هایتان؛ چرا كه شما باید هدف‌های خواسته‌شده در بازی (مانند آزاد كردن گروگان‌ها یا خنثی كردن بمب) را انجام دهید. برای همین ارزش شما برای آن‌ها بیشتر است.

هوش مصنوعی در ژانرهای بازی


بازی‌های كامپیوتری اكشن، ماجرایی - اكشن و تیراندازی، بیش از بازی‌های ژانرهای دیگر از هوش مصنوعی استفاده می‌برند. بازی‌های مسابقه‌ای و استراتژیك نیز می‌توانند از هوش مصنوعی برای قوی‌تر كردن رقیبانشان استفاده كنند. نمونه خوب بازی‌های مسابقه‌ای، Need For Speed UnderGround2 است. در این بازی، هنگامی كه در شهر مشغول رانندگی هستید، می‌توانید با اتومبیل‌های مسابقه‌ای دیگر كه مانند شما در شهر حركت می‌كنند مسابقه دهید. برای این‌كار باید به آن اتومبیل نزدیك شوید و هنگامی كه منوی پرسش برای پذیرش مسابقه را دیدید، كلید Enter را فشار دهید.

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

در بازی Need For Most Wanted، به نظر می‌آید پلیس‌ها در تعقیب و گریز شما و یافتن مسیر، ضعیف‌تر عمل می‌كنند. البته شاید شركت EA، خود این‌گونه خواسته است. به غیر از این، بازی‌های ماجرایی معمولا‌ً نیازی به هوش مصنوعی ندارند؛ چرا كه كنترل شخصیت بازی به عهده شماست و آنچه باید از پیش روبردارید، پازل‌های طراحی شده است نه دشمنان یا هیولا‌هایی كه به هوشمند‌سازی نیاز داشته باشند؛ مانند بازی سایبریا.
هوش مصنوعی، بیشتر در بازی‌های تیراندازی اول شخص (FPS) گسترش یافت. یك بازی تیراندازی اول شخص بیشتر از یك موتور براساس هوش مصنوعی رویدادگر استفاده می‌كند كه رویدادها و واكنش‌ها می‌توانند مانند الگوی زیر باشند:

- هنگام دیده شدن: یورش با مناسب‌ترین سلا‌ح

- هنگام آسیب‌دیدگی زیاد: فرار و بازگرداندن نیرو. مانند استفاده از كیت‌های سلا‌متی در برخی بازی‌ها.

- نبود گلوله: پیدا كردن گلوله

شایان ذكر است كه استفاده از روش محفظه‌های سوراخ می‌تواند هوش مصنوعی در این بازی‌ها را انعطاف‌پذیرتر كند.


پیدایش و پیشرفت هوش مصنوعی


از اواسط دهه 1990، یك بازی تیراندازی اول شخص منتشر شد كه به كاربر امكان می‌داد بازی را برای خود سفارشی (Customize) كند. این بازی، Quake بود كه در فناوری ساخت بازی‌های كامپیوتری یك نوآوری محسوب می‌شد. Quake اولین بازی سه‌بعدی واقعی است. به این معنی كه به‌صورت بلا‌درنگ در سه بعد رندر می‌شود. (پیش از آن spiritها یا گرافیك‌های دوبعدی به صورت سه‌بعدی شبیه‌سازی می‌شدند). چیزهای دیگری نیز در این بازی وجود داشت كه موردتوجه قرار گرفت؛ مانند نشانه گرفتن سلا‌ح به بالا یا پایین. زیرا حركت‌دادن سلا‌ح به بالا‌ یا پایین نیازمند پردازش در بعد سوم، یعنی عمق یا ارتفاع در یك محیط سه‌بعدی است.

بازی Quake از موجودات مجازی هوشمند (bot) هر چند با هوش مصنوعی كم، بهره برده بود. هوش مصنوعی یكbot در بازی‌های تیراندازی اول شخص، می‌تواند در دو بخش بررسی شود: یكی ناوبری و حركت، و دیگری مبارزه. اگر بخواهیم رفتار bot نزدیك به رفتار یك انسان باشد، پیاده‌سازی آن بسیار پیچیده‌تر از هوش‌مصنوعی در مبارزه است. هر چند پیاده‌سازی هوش مصنوعی در مبارزه نیز با هر استاندارد و روشی آسان نیست.

برای این‌كه بات‌ها بتوانند حركت كنند، باید بتوانند درباره اشیا و موجودات پیرامون خود یاد بگیرند. این ایده بسیار اساسی، می‌تواند به بخش‌های بیش‌تری مانند قابلیت آنالیز هنگام حركت در یك جهت خاص و سپس قابلیت پیدا كردن اشیا و شخصیت‌های مجازیِ مقابل در یك مرحله بازی گسترش یابد. این ایده‌ها شاید ساده به نظر برسند، ولی واقعاً این‌گونه نیست؛ چرا كه یك bot باید بتواند در برابر دو چیز واكنش درستی داشته باشد: دیوارها و فضاهای خالی.

دیوارها شامل همه چیزهایی است كه نمی‌توان از آن عبور كرد؛ مانند خود یك دیوار، نرده، شخصیت‌های مجازی، جعبه‌ها، پله‌های رو به بالا‌ و ... فضاهای خالی نیز هر جایی است كه زمین همواره نیست یا دچار شكستگی است؛ مانند یك چاله، پله‌های رو به پایین و ... . برای رویارویی با این دو مانع، یك روش خوب، افزایش كارایی تابع جستجو است. این تابع كه در بازی Quake معرفی شد، به بات امكان می‌دهد یك خط را از یكی از بُعدهای X-Y-Z تا بُعد بعدی جستجو كند و اطلا‌عاتی مانند این‌كه <این خط به كجا می‌رود، چه چیزی آن را قطع می‌كند و ...> را دریافت كند.

دو روش برای گذشتن یكبات از یك مرحله، بیشتر مورد استفاده قرار می‌گیرد: روش نخست از گره‌های گراف وضعیت و روش دوم از مسیرهای (path) آن استفاده می‌كند. در یك محیط براساس روش گره، گره‌ها در قسمت قوانین بهینه‌سازی مرحله (level) كه به وسیله سازنده یك bot تعریف شده است قرار دارند. هر گره می‌تواند اطلا‌عات بات درباره قسمت خاصی از محیط را بدهد. وضعیت مبارزه، كاربردهای زیادی برای تعدادی از الگوریتم‌های جستجو یا پروسه تصمیم‌گیری دارد. در یك مبارزه، باید برای تشخیص این‌كه كدام كار برای بات بهتر است حركت‌های رقیب پیش‌بینی شود.

روش Minimax، در مواقعی كه یك تابع هیورستیك خوب (یك هیورستیك برخلا‌ف الگوریتم، ممكن است به یك پاسخ قطعی نرسد) در دست باشد، می‌تواند یك حركت خوب را انجام دهد. از آنجا كه minimax روش كندی است، می‌توان از Partial Minimax استفاده كرد كه در الگوریتم‌های تصمیم‌گیری به كار می‌رود؛ هر چند این روش هنوز چندان پذیرفته نشده است.

پژوهشگران هوش مصنوعی پیشنهاد می‌كنند، تنها زمانی از Partial Minimax استفاده كنید كه یك گزینه بدیهی در دست داشته باشید (زمانی كه متغیر minimax با ارزش بیشتر كاملا‌ بهتر از متغیر دیگر باشد). در غیر این‌صورت اگر ارزش همه متغیرها نزدیك به هم است، از استراتژی دیگری استفاده كنید. حال آن‌كه در یك بازی بلا‌درنگ برای یكbot معمولا‌ً گزینه بدیهی وجود ندارد تا آن را برگزینید. هر گزینه به یك استراتژی متفاوت وابسته است كه bot می‌تواند آن را انتخاب كند.

شاید بسیاری از طرفداران روش minimax به ارزش سرعت، هنگام بررسی كارایی یك بات در بازی بلا‌درنگ واقف نیستند؛ مانند كمترین زمانی كه یك بات نیاز دارد تا درباره یك تصمیم بیندیشد، گزینه‌های بیشتری كه برای تصمیم‌گیری ایجاد می‌كند، كیفیت واكنش بهتر و سطح خبرگی. به یاد داشته باشید كه یك بات در برابر مغز یك انسان كه می‌تواند دنیای سه‌بعدی را با كمك حس و تخیل خود تفسیر كند، قرار می‌گیرد. برای نمونه در یك مبارزه، یك بات نیاز به نشانه‌گیری به سوی دشمن خود، پیش‌بینی حركت آن‌ و... دارد كه همه، بدون داشتن درك واقعی از محیطی كه در آن قراردارد انجام می‌شود.

برای دستیابی به بیشترین سرعت، بیشتر از الگوریتم *A استفاده می‌شود. هر چند این الگوریتم پیشرفته نیست، ولی سرعت بالا‌یی دارد. پیچیدگی زمانی این الگوریتم ((O(log h(n است كه (h(n پیچیدگی تابع هیورستیك است. *A یك الگوریتم جستجوی "اول عمق" است كه هیورستیك آن را كنترل می‌كند و می‌تواند مناسب‌ترین شاخه بعدی گراف را حدس بزند و در هر عمق، تنها شاخه‌ای كه ارزش هیورستیك بهتری دارد، گسترش می‌یابد.