به نام خدا هوش مصنوعی مدرس :سلیمانی تمرین 4 دانشکده مهندسی کامپیوتر موعد تحویل تمرین 21 :فروردین ساعت 24 تعریف مساله در این تمرین ،شما باید یک عامل هوشمند برای بازی پنتاگو ،1طراحی کنید .برای طراحی این عامل ،شما باید از درخت Minimax استفاده کنید و برای بهبود آن از هرس Alpha-Betaکمک بگیرید. برای پیادهسازی تابع Minimaxالزم است که برای هر حالت بازی یک تابع ارزیابی ) (evaluation functionداشته باشید .با توجه به اینکه بخشی از نمرهی شما به این بخش تخصص دارد ،و هوشمندی برنامه شما را این بخش مشخص میکند ،سعی کنید این بخش را به دقت طراحی کنید .الزم به ذکر است ،برنامه شما ،برای هر حرکت بازی فقط 1ثانیه زمان دارد .اگر انتخاب حرکت از زمان گفته شده بیشتر طول بکشد ،شما بازندهی بازی خواهید شد. معرفی بازی این بازی دونفره ،روی یک جدول 6 × 6انجام میشود .این جدول ،شامل چهار زیر جدول 3 × 3است که قابلیت چرخش حول خانهی وسط ،در دو جهت ساعتگرد و پادساعتگرد را دارند. Pentago 1 هر کس در نوبت خود ،یکی از مهرههای رنگ خودش را در یکی از خانههای خالی جدول قرار میدهد ،و بعد از آن یکی از زیرجدولها را انتخاب کرده و 90درجه در جهت دلخواه خودش دوران میدهد. به طور مثال ،اگر حالت بازی به این صورت باشد: بعد از اینکه ،بازیکن سفید مهرهاش را در سطر 5از باال و ستون 4از چپ گذاشت ،و زیرجدول راست پایین را 90 ،درجه پادساعتگرد چرخاند ،جدول به این حالت در خواهد آمد: برنده بازی اولین نفری است که 5مهرهی رنگ او بعد از حرکتش ،به صورت سطری ،ستونی و یا قطری ،پشت سر هم ردیف شوند. در صورتی که جدول پر شود ،و یا به طور همزمان دو رنگ مهره به حالت برد برسند ،بازی مساوی خواهد شد. توضیحات کد Interface player برای نوشتن عامل خود ،باید interfaceبه نام playerرا implementکنید .دقت کنید کالسی که می نویسید ،به نام ] player[std_idباشد .یعنی به طور مثال اگر شماره دانشجویی شما 123456است ،کالسی که میسازید باید به نام player123456باشد. { public interface player ;)(public String getName ;)public void setColor(int color ;)public move getMove(board b { در این interfaceسه تابع وجود دارد که شما باید آنها را پیادهسازی کنید. ) public move getMove(board b ورودی این تابع ،جدول بازی تا به این مرحله است .جدول یک objectاز کالس Boardاست که در ادامه به توضیح آن میپردازیم. خروجی این تابع ،حرکت شما است .حرکت شما ،یک objectاز کالس moveاست که در ادامه آن را معرفی خواهیم کرد. )( public String getName در ابتدا بازی ،یک نام به شما اختصاص داده میشود .یعنی ورودی تابع Constructorکالس شما یک Stringخواهد بود .این تابع ،مقدار نام شما ( که در ابتدای تولید objectاختصاص داده شده بود ) را باز میگرداند. ) public void setColor(int color ما ،با فراخوانی این تابع به شما اعالم می کنیم که رنگ شما در بازی ،چه رنگی است .رنگ یکی از اعداد 1یا 2خواهد بود. Class Move یک حرکت بازی 4 ،قسمت دارد: .1سطری که مهره در آن قرار خواهد گرفت .2ستونی که مهره در آن قرار خواهد گرفت .3زیرجدولی که برای دوران انتخاب شده .4جهت دوران در پیاده سازی کد ،مقادیر این چهار متغیر به صورت زیر تفسیر میشود: شماره سطر ،برای سطر باالیی ،0و برای سطر پایینی 5است ( .متغیر ) row شماره ستون برای ستون چپی ،0و برای ستون راستی 5است ( .متغیر ) column شماره زیر جدولها ( متغیر ) subBoard شماره : 0زیرجدول چپ باال شماره : 1زیرجدول راست باال شماره : 2زیرجدول چپ پایین شماره : 3زیرجدول راست پایین مقدار متغیر clockwiseدر صورتی که 1بود ،نشاندهنده دوران ساعتگرد و در صورتی که صفر بود نشاندهندهی دوران پادساعتگرد خواهد بود. با مطالعه این کالس ،به جزئیات پیادهسازی پی خواهید برد. Class Board این کالس ،همان جدول بازی است 4 .تابع publicدر این کالس وجود دارد ،که شما میتوانید از آنها استفاده کنید: )public int get(int r, int c ورودی این تابع ،به ترتیب سطر و ستون جدول ،و خروجی آن ،وضعیت آن خانه است 0 .نشان دهندهی خالی بودن خانه ،و اعداد 1 و 2نشاندهندهی مهرهی بازیکن اول و دوم هستند. )(public int winner این تابع ،بررسی می کند که برنده این جدول چه کسی است .در صورتی که هنوز برندهای وجود نداشته باشید خروجی آن 0است. در صورتی که بازی مساوی شده باشد ،خروجی آن 3است و در صورتی که هر کدام از بازیکنها برنده شده باشند ،خروجی آن عدد بازیکن خواهد بود. )public board nextMove(move m, int player ورودی این تابع ،یک حرکت و شماره بازیکن است .خروجی آن ،یک جدول بازی جدید است که آن حرکت ( با آن شماره بازیکن ) روی آن اعمال شده است .دقت کنید که صدا زدن این تابع روی یک جدول بازی ،آن جدول را تغییر نخواهد داد. )public void move(move m, int player با صدا زدن این تابع ،حرکت ورودی و با شماره بازیکن ورودی روی جدول اعمال خواهد شد .توجه کنید که خروجی این تابع voidاست و تغییرات روی همان جدول اعمال خواهد شد. توضیحات تکمیلی برای اطالع کامل از نحوهی اجرای بازی ،تمام کدهای موجود را مطالعه کنید .برای درک بهتر کد ،یک بازیکن به نام samplePlayerدر کد قرار گرفته است که به صورت Randomحرکت میکند .با یک بار اجرای کد ،با نحوهی تعریف کالس Moveبیشتر آشنا خواهید شد. توجه داشته باشید که قوانین بازی تعریف شده ممکن است اندکی با نسخهی واقعی بازی تفاوت داشته باشد. تنها چیزی که شما باید تحویل بدهید ،کالس ] player[std_idاست .به همین خاطر مجاز به تغییر هیچ کدام از قسمتهای کدی که در اختیار شما قرار داده شده است نیستید. مستندی درباره نحوهی پیادهسازی کد و چرایی استفاده از Evaluation functionاستفاده شده تهیه کنید و در قالب PDFآن را ارسال نمایید. کدهای شما دو به دو با یکدیگر بازی خواهند کرد( .یکبار به عنوان بازیکن اول و یکبار به عنوان بازیکن دوم) بخشی از نمره ی شما را عملکرد کدتان در مقابل سایر بازیکنان تشکیل خواهد داد. برای هر روز تاخیر در تحویل تمرین %10کسر نمره در نظر گرفته خواهد شد. هرگونه سوال در مورد این تمرین را به آدرس [email protected]ارسال نمایید. در صورت مشاهده هر گونه تقلب نمره تقلب کننده و گیرنده 0منظور شده و به استاد معرفی می شوند. موفق باشید
© Copyright 2025 Paperzz