بهنام خدا تمرین عملی چهارم درس »مقدمهای بر هوش مصنوعی« نیمسال بهار ۸۵-۸۶ بازی دو نفرهی »چهار متّصل«۱ موعد تحویل :دو هفته پس از اعالن Connect Four صفحهی ۱از ۵ 1 ۱معرفی بازی قانون اصلی بازی ۱٫۱ بازی »چهار متّصل« که بهنامهای ،Plot Four ،Connect Four Four in a line ،Four in a rowو ...مشهور است ،برای اوّلین بار در سال ۱۹۷۴توسّط Milton Bradleyمنتشر شد. این بازی دو نفره روی یک صفحهی ایستاده انجام میشود .هر بازیکن در نوبت خود یکی از ستونهای صفحه را انتخاب کرده و یکی از مهرههای رنگ خودش را در آن میاندازد تا در پایینترین خانهی خالی آن ستون جا بگیرد. اگر در مرحلهی چهار تا از مهرههای یک بازیکن در یک خط پیوسته و متوالی بهصورت افقی ،عمودی یا مورب قرار بگیرند ،آن بازیکن برنده شده و بازی خاتمه مییابد. نیز در صورتی که تمام خانههای جدول پر شوند و هیچ بازیکنی چهار خانهی متوالی همرنگ نساخته باشد، بازی به تساوی میانجامد. برای مثال در شکل روبهرو ،اگر نوبت بازیکن زرد باشد ،او با انداختن یک مهره در سمت راست ترین ستون میتواند چهار مهرهی زرد قطری ساخته و برنده شود. با کمی دقّت میتوان دریافت که حتی اگر نوبت با بازیکن قرمز هم باشد ،بازیکن زرد در اوّلین حرکت خودش میتواند برنده شود؛ زیرا ستون سوم از سمت چپ و ستون آخر از سمت چپ ،هر دو میتوانند ستونهای برد وی در اولین حرکتش باشد. ۱٫۲تکنیکها و روشهای حل بازی در سال L. Victor Allis ،۱۹۸۹در تز فوقلیسانس خود نشان داد که برای صفحهی ۷ستونه و ۶سطره ،نفر اوّل استراتژی برد داردJames D . ال این مهم را به تفصیل نشان دادهاست )و Allenنیز در سال ۱۹۹۰مستق ً اینجا(. برای این بازی ،برنامههای مختلفی نوشته شد است .یک نمونه از این برنامهها که به زبان Cتوسّط Giuliano Bertolettiتهیه شده Velena ،نام دارد. با این وصف ،از شما خواسته شده که یک »بازیکننده« برای این بازی بنویسید. صفحهی ۲از ۵ ۲صورت دقیق مسئله برای پیادهسازی ۲٫۱حالت کلّی مسئله در اکثر برنامهها و استراتژیهای رایج ،صفحهی بازی ۷ستون و ۶ سطر دارد و کسی برندهاست که ۴مهرهی متوالی )در قطر ،سطر یا ستون( از رنگ خودش بسازد؛ اما شما باید بازی را برای حالت کلّی حل کنید. برنامهی شما باید با دریافت شرایط صفحه و بازی ،بهصورت محاورهای ۲بازی را انجام داده و سعی کند برنده شود .برای ارزشیابی و نمرهدهی به برنامهها ،پس از بازی با انسان معمولی ،آنها با یکدیگر بهرقابت خواهند پرداخت و برنامههای برتر ،نمرهی اضافی میگیرند! ۲٫۲ورودی و خروجی مسئله ورودی مسئله باید از ورودی استاندارد ۳خوانده شده و خروجی مسئله نیز در خروجی استاندارد ۴نوشته شود. در ابتدای بازی ،به برنامهی شما سه عدد m ،nو ) kاز چپ به راست( داده میشود که بهترتیب بیانگر تعداد ستونها ،تعداد سطرها و تعداد مهرههای متوالی الزم برای برد )که الزام ًا ۴نیست( هستند .بهعنوان مثال برای »چهار م ّتصل« عادی ،ابتدای ورودی بهشکل زیر است. 7 6 4 پس از آن در صورتیکه برنامهی شما قرارست اوّلین حرکت را انجام دهد ،در یک سطر کلمهی ) STARTبا حروف بزرگ( به آن داده میشود. برنامهی شما باید در هر حرکت خودش ،شمارهی ستونی که قصد دارد مهرهای در آن ستون بیاندازد را در یک سطر در خروجی استاندارد بنویسد .شمارهی ستونها از صفر تا n − 1است. پس از اوّلین حرکت )که با گفتن STARTانجام میپذیرد( ،برنامه در ابتدای نوبت خودش ،یک عدد باید از ورودی بخواند که حرکت حریف در نوبت قبلی بوده است ،آنگاه پس از مدت معقولی تجزیه و تحلیل ،باید شمارهی ستون مورد نظر خودش را در خروجی بنویسد .دقّت کنید که اگر برنامهی شما بازیکن دوم باشد ،در اوّلین حرکتش ابتدا حرکت قبلی حریف )و نه (STARTرا میخواند. اگر برنامهی شما پس از دریافت ورودی )حرکت حریف( به این نتیجه رسید که باخته است ،حتم ًا باید در یک سطر )بهجای حرکت خودش( عبارت ! ۷) I LOSTکاراکتر با حروف بزرگ و عالمت تعجب در انتها( را چاپ کند. نیز در صورتی که پس از انجام دادن حرکتش برنده شد ،باید بالفاصله پس از انجام حرکت و نوشتن شمارهی ستون خروجیاش ،عبارت ! ۶) I WONکاراکتر با حروف بزرگ( را چاپ کند. نیز اگر حرکت حریف شما در لحظهای غیر معتبر بود )خارج از محدودهی ستونها یا روی یک ستون پُر( باید بهجای حرکت خودتان در خروجی ،عبارت ! ۱۳) ILLEGAL MOVEکاراکتر با حروف بزرگ( را چاپ کنید. 2 Interactive Standard Input: cin in C++ & System.in in Java 4 Standard Output: cout in C++ & System.out in Java 3 صفحهی ۳از ۵ توجه کنید که: • میتوانید فرض کنید 5 ≤ k ≤ m, n ≤ 27و نیز . k ≤ 10 • برنامهی شما باید در هر حرکت حداکثر ۵۰۰میلیثانیه )روی یک سیستم (AMD PIII 800Mhz فکر کند .پس از این مدت ،برنامهی شما در صورت ندادن خروجی ،کلّهپا میشود. • • برنامهی شما حداکثر ۵۰مگابایت حافظه میتواند مصرف کند. راهنمایی :میدانید که عمق بیشتر جستجو ،بازی هوشمندانهتری را نتیجه میدهد .جستجوی عمیقتر نیز نیازمند نگهداری بهینهتر صفحات در حافظه است .برای استفادهی بهینه از حافظه نیز میتوان هر ستون را )برای هر مقداری از مهرهها( در یک واحد ۳۲بیتی integerذخیره کرد! ۳سیاست نمرهدهی ۳٫۱نمرهی خام این تمرین نمرهی تشویقی مجزّا ندارد .صرف ًا برنامههایی که در مسابقه بتوانند نتایج بهتری را کسب کنند ،نمرهی اضافی میگیرند. این تمرین الزام ًا باید در گروههای دو نفری انجام شود. نمرهی شما در این تمرین )بهترتیب( به گزارش ،ایدهها و الگوریتمهای پیادهسازی شده و نهایت ًا رقابت برنامهی شما بستگی دارد. ۳٫۲نمرهی منفی! از آنجا که کُد آمادهی این بازی ،در جایجای اینترنت یافت میشود، سیاست نمرهی منفی در رابطه با این بازی شدیدتر خواهد بود .تمامی گروهها)ی ۲نفره( تحویل حضوری خواهند داشت و هر دو نفر میبایست بر تمامی پروژه مسلّط باشند. نیز تمامی الگوریتمهای پیادهسازی شده و ساختار کلّی برنامه میبایست بهدقّت در گزارش توضیح داده شوند. ) ( 9−d تأخیر همچنان از رابطهی log10که 1 ≤ d ≤ 8محاسبه میشود. ۳٫۳تحویل ارسالی فایل ارسالی شما باید الزام ًا یک فایل zipبا نام ) EX4-83101234-82101234.zipکه در آن شمارهی دانشجویی افراد نویسندهی پروژه بهجای اعداد نمونه قرار گرفتهاند( باشد. موارد مورد نیاز برای تحویل ،که میبایست در فایل zipگردآوری شوند ،عبارتند از: • ُکد برنامه • یک فایل report.docیا ترجیح ًا report.pdfکه در آن توضیح جامعی دربارهی توابع، کالسها و ...دادهاید .عالوه بر آن در فایل reportشما میبایست شرح جامعی از الگوریتمها و صفحهی ۴از ۵ ایدههای بهکار برده شده بنویسید .برای مثال عمق جستوجوی ،MINIMAXتوصیف دقیق تابع مقداردهی به حالتها و نحوهی نگه داری حالت)صفحه(ها در حافظه از نکات بسیار مهم میباشند .دقّت کنید که قسمت قابل مالحظهای از نمرهی تمرین شما به این بخش اختصاص مییابد. فایل ارسالی خود را حداکثر تا موعد مقرّر به آدرس [email protected]ارسال کنید؛ در غیر اینصورت بهمدت یک هفته مشمول بند تأخیر شده و پس از آن بههیچ وجه نمرهای دریافت نخواهید کرد. ۴کمک! برای رفع ابهامات مسئله یا مشکالت پیادهسازی و ...در رابطه با این تمرین با [email protected]تماس بگیرید. توصیه میشود قبل از ارسال نهایی ،خودتان یک دست با برنامه بازی کنید و مطمئن شوید میتواند شما را شکست دهد! »پایان« صفحهی ۵از ۵
© Copyright 2024 Paperzz