بهنام خدا تمرین عملی دوم درس »مقدمهای بر هوش مصنوعی« نیمسال بهار ۸۵-۸۶ مقایسهی روشهای مختلف »جستجوی محلّی« در »حدس نقطهی صفر یک تابع« موعد تحویل :حداکثر دو هفته پس از اعالن صفحهی ۱از ۶ ۱معرفی مسئله صورت مسئله ۱٫۱ در این مسئله از شما خواسته شده تا برای یک تابع خاص )و احیان ًا پیچیده( که از آن بیخبر هستید ،مقادیری از ورودی را بیابید که خروجیاش تا حد ممکن به صفر نزدیک باشد. دقّت کنید که برنامهی شما ،از محتوای تابع بیخبر است و صرف ًا میتواند با فراخوانی آن بهازای ورودیهای مشخّص ،مقادیر تابع برای آن ورودیها را بیابد. ۲صورت دقیق مسئله برای پیادهسازی ۲٫۱ورودی مسئله/تابع در بخش ساده )بدون نمرهی اضافه( تابع شما دقیق ًا ۳متغیر خواهد داشت .الگو۱ی تابع شما میبایست چنین باشد: ;)double funcVal(double x, double y, double z بدنهی تابع شما ،ورودی اصلی مسئله است که در داخل کُد شما )پس از ارسال ،و بههنگام تصحیح( تغییر میکند .در این قسمت )که به هنگام تِست و نمرهدهی برای توابع گوناگون تثبیت میشود( تابع با کمک توابع ریاضیات و مثلثات )نظیر )( exp() ،sinو (...پیادهسازی میشود. برای راحتی کار میتوانید فرض کنید که تابع مورد نظر که در برنامهی شما قرار میگیرد: • ...حتم ًا یک جواب صفر برای یک ورودی سهعنصره که در آن − 100 ≤ x, y, z ≤ 100است ،دارد .توجه کنید که هم ورودی و هم خروجی تابع ،حقیقی )و نه لزوم ًا صحیح( هستند. • ) ...جز در نقاط انتهایی بازهها( پیوسته است. ۳ ۲ • ...بهازای تمام ورودیها در بازهی گفته شده معتبر بوده و هیچ استثنا یی )نظیر تقسیم بر صفر ( برنمیگرداند. قدرمطلق خروجی تابع نیز )برای ورودیهای معتبر( همواره کوچکتر از 10100است. z بهعنوان مثال ،تابع ) funcValالزام ًا با همین نام( برای تابع x 2 e 10 + xy − sin( zx) + 12.5به شکل زیر نوشته میشود: { )double funcVal(double x, double y, double z ))return x*x*exp(abs(z/10.0 + x*y )- sin(z*x ;+ 12.5 } از سوی دیگر ،شما از ورودی استاندارد ۴باید یک عدد nبخوانید که حداکثر تعداد دفعات فراخوانی ،funcValدر زمان اجرای برنامهی شما را تعیین میکند .میتوانید فرض کنید . 1 ≤ n ≤ 106 Prototype Exception Divison By Zero Standard Input: cin in C++ & System.in in Java صفحهی ۲از ۶ 1 2 3 4 ۲٫۲خروجی مسئله بهعنوان خروجی مسئله ،در خروجی استاندارد ،۵ابتدا ،kتعداد دفعات فراخوانی تابع ) funcValکه در بدترین حالت، برابر nاست( را در سطر اوّل بنویسید .سپس در سطر دوم ،مقادیر y ،xو zرا برای بهترین جوابی که بهدست آوردهاید بنویسید .نهایت ًا در سطر آخر ،مقدار تابع بهازای این سه عنصر را چاپ کنید. مقادیر حقیقی سطرهای دوم و سوم ،باید تا ۸رقم اعشار )در صورت وجود( چاپ شوند. دقّت کنید که در تمام برنامه و نیز خروجیها ،هر عدد کوچکتر از ۱۰۸برابر صفر در نظر گرفته میشود. ۲٫۳پیادهسازی خواستهشده شما باید این مسئله را بهکمک الگوریتمهای زیر پیادهسازی کنید: .۱ Hill Climbingبا Random Restartدر صورت لزوم :در این حالت ممکنست صالح بدانید در هنگام رسیدن ۶ ۷ ۹ ۸ به یک فالت ،قله یا دره یا حتی حالتهای دیگر ،یک شروع مجدّد کنید! این جزئیات و تصمیم خود را در گزارش ۱۰ذکر کنید. .۲ .۳ .۴ :Simulated Annealingبرای این منظور ،مقدار پارامتر تعیینکنندهی دما ) (Tرا بهصورت ثابت ۱۱در نظر گرفته و در صورت تمایل ،بهعنوان کار اضافی، در گزارش خود راجع به مقادیر مختلف آن ادعا ،استدالل و بحث کنید. Local Beam Search و نهایت ًا Genetic Algorithm مانند تمرین قبل ،برنامهی شما باید شمارهی الگوریتمی را که میبایست انجام شود، بههنگام اجرا بهعنوان آرگومان برنامه بگیرد .به عنوان مثال اگر برنامه با نام Func.exe تکمیل شده باشد ،دستور زیر باید با استفاده از الگوریتم Local Beam Searchمسئله را حل نماید: C:\AI\Proj2>Func.exe 3 توجه کنید که: • در صورتی که الگوریتمی را پیادهسازی نکرده باشید و اجرای آن الگوریتم خواسته شود ،میبایست پیغام Not Implementedدر خروجی استاندارد نمایش داده شود. ۱۲ • از نوشتن هرگونه توضیح اضافه در خروجی استاندارد یا خروجی اشتباهات اجتناب کنید. • تابع funcValرا حتم ًا در یکی از ۴۰خط ابتدایی برنامهتان پیادهسازی کرده و محل آن را در گزارش معیّن کنید .این تابع ،چنان که گفته شد ،برای تِستهای مختلف تغییر خواهد کرد .پیش از ارسال برنامه ،این تابع را برابر x + y + zقرار دهید. • ۱۴ سرفایل۱۳های الزم نظیر cmathو ...را حتم ًا ضمیمه کنید. 5 Standard Output: cout in C++ & System.out in Java Plateau 7 Local Maxima 8 Local Minima 9 Restart 10 Report 11 const in C++, final in Java 12 Standard Error: cerr in C++ & System.err in Java 13 Header 14 include/import 6 صفحهی ۳از ۶ • در صورتی که در برنامهی خود از تابع randomاستفاده میکند ،نحوهی کار برنامهی شما باید طوری باشد که بهازای دفعات مکرّر اجرا ،خروجی یکسان بدهد .بهعبارت دیگر ،استفاده از بذر ۱۵ اوّلیه برای تغییر خروجیهای randomمجاز نمیباشد. ۳سیاست نمرهدهی ۳٫۱نمرهی خام از آنجا که انجام این تمرین بخشی از نمرهی اصلی شما را دارد ،شما میبایست الگوریتمهای فوق را پیادهسازی کنید. لزومی به پیچیدگی الگوریتمها و تحلیل برای حالتهای خاص )مث ً ال دماهای دقیق ،حسّاس و مختلف برای Simulated (Annealingنیست؛ اما از آنجا که در این تمرین ،تئوری به عمل نزدیک بوده و بررسیها عمدت ًا کیفی میباشند ،انجام کار اضافی اکیدًا توصیه میشود. ۱۶ در مورد الگوریتم ژنتیک ،میتوانید سیاست نخبهگزینی را در پیش بگیرید .با این حال ،اندازهی جمعیّت شما و نیز نرخ زاد و ولد )چه دورگه۱۷ای ،چه جهش۱۸یافته( باید معقول بوده و در گزارش توضیح داده شوند. دقّت کنید که توابع آزمایشی داده شده )که در سایت درس قرار گرفتهاند( ،صرف ًا برای آشنایی شما بوده و الزام ًا تِستهای اصلی نمرهدهی نخواهند بود. ۳٫۲نمرهی تشویقی برای هریک از اعمال زیر ،نمرهی تشویقی در نظر گرفته میشود که ضریب آن عمل ،بسته به دقت ،صحت ،سرعت پیادهسازی و ...خواهد داشت: • ) (-انتخاب ،توجیه و تفسیر بهترین الگوریتم برای nهای خیلی کوچک )کمتر از ،۱۰یا (۱۰۰یا nهای خیلی بزرگ. • مقایسهی نرخ زمانبندی ۱۹ دماهای مختلف در Simulated ،Annealingمقایسه و تفسیر آنها • پیدا کردن توابع بحرانی )بدترین توابع( برای هر یک از الگوریتمها • تغییرات جزئی و مؤثر در الگوریتمهای گفته شده ،نظیر Random Walkو مقایسهی آنها • اجرای سایر روشهای جستجوی ناآگاهانه نظیر Stochastic Beam Search ** پیادهسازی برای توابع با بیش از سه پارامتر :در این حالت ،پارامتر تابع، • یک آرایه از عناصر و نه تنها سه عنصر است .سایر موارد مشابه است .حداکثر تعداد پارامترها تا ) ۱۰۰۰یا حتی بیشتر( هم میتواند باشد. تعداد ورودیهای تابع در یک ثابت در داخل کد برنامه )نظیر خود تابع( تنظیم میشود. • ** مقایسهی سیاستهای گوناگون در الگوریتم ژنتیک ،نرخهای مختلف زاد و ولد و انواع آن • موارد پیشنهادی خودتان )هر چه سریعتر باید هماهنگ شوند( 15 Seed Elitism 17 Crossover 18 Mutation 19 Scheduling 16 صفحهی ۴از ۶ مشابه تمرین قبل ،در صورت پیادهسازی مناسب و دقیق این موارد ،ممکنست شانس ارائهی گزارش آن فعالیتها به کالس را )که نمرهی جداگانهای از تمرینها دارد( بهدست بیاورید! ۳٫۳مسابقهی سریعترین پاسخ! مورد دیگری که برای گرفتن نمرهی اضافه درنظر گرفته شدهاست ،مسابقهی بهترین برنامه است .برای شرکت در این مسابقه ،کافیست در گزارش خود یکی از الگوریتمهایی که پیادهسازی کردهاید را بهعنوان الگوریتم »بهترین« خود معرفی کنید ،سپس بهازای یک تابع خاص )که بههنگام تصحیح مشخّص میشود( ،افرادی که برنامهشان با کمترین میزان م »بهترین«شان( به جواب برسند ،نمرهی اضافه دریافت فراخوانی تابع )در اجرای الگوریت ِ میکنند! ۳٫۴نمرهی منفی! دستکاری در محاسبهی تعداد دفعات فراخوانی تابع )که معیار مسابقه است( و نیز تالش برای دستیابی به تابع ،بهروشی بهجز دادن ورودی و گرفتن خروجی تقّلب محسوب شده و نمرهی منفی در پی خواهد داشت. نیز ،مشابه سایر تمرینها ،در صورت مشاهدهی هرگونه تخلف ،مخصوص ًا گرفتن کُپـ)ـی( و یا انجام تمرین توسط کسی غیر از دانشجوی)ان( مربوطه ،بهشدت با مورد تخلف برخورد شده و اکیدًا نمرهی منفی در پی خواهد داشت .هیچ عذر و بهانهای در این زمینه پذیرفتنی نبوده و مشکالت آتی بهتر است از قبل مطرح شوند. در صورت تأخیر در ارسال تمرین ،تا یک هفته ،نمرهی تمرین در ) ( 9− d 10 logکه 1 ≤ d ≤ 8ضرب میشود .مالک روز تأخیر ،ساعت ۲۳:۵۹است؛ بدینمعنی که یک ساعت با ۲۳ساعت فرقی نمیکند! صفحهی ۵از ۶ ۴تحویل ۴٫۱تحویل ارسالی فایل ارسالی شما باید الزام ًا یک فایل zipبا نام ) EX2-83101234-82101234.zipکه در آن شمارهی دانشجویی افراد نویسندهی پروژه بهجای اعداد نمونه قرار گرفتهاند( باشد. موارد مورد نیاز برای تحویل ،که میبایست در فایل zipگردآوری شوند ،عبارتند از: • کّد برنامه • یک فایل report.docیا ترجیح ًا report.pdfکه در آن توضیح جامعی دربارهی توابع ،کالسها و ... دادهاید .عالوه بر آن در فایل reportشما میبایست .تعدادی تابع نمونه در سایت درس قرار داده شدهاست )که الزام ًا تِستهای نمرهدهی نیستند( .با این توابع و سایر توابعی که خودتان میسازید ،الگوریتمها را مقایسه کرده و نتایج حاصله از بررسی و تفحّص راجع به آنها و نیز دالیل و استداللهای خود را ذکر کنید. بررسی نحوهی عملکرد بهازای nهای مختلف نیز از موارد قابل ذکر در گزارش است .همچنین مواردی که در طی بخشهای این صورت پروژه اشاره شدهاند )نظیر سیاست الگوریتم ژنتیک( ،میبایست ذکر شوند. مجدّدًا دقّت کنید که قسمت قابل مالحظهای از نمرهی تمرین شما به این بخش اختصاص مییابد. • در صورت احتیاج :یک شاخهی etcکه در آن موارد الزم دیگر )تشویقی( قرار گرفتهاند .شرح این فایلها در reportمیبایست آمده باشد. فایل ارسالی خود را حداکثر تا دو هفته پس از اعالن تمرین به آدرس ce417a@gmail.comارسال کنید؛ در غیر اینصورت بهمدت یک هفته مشمول بند تأخیر شده و پس از آن بههیچ وجه نمرهای دریافت نخواهید کرد .در صورت انجام کار اضافه ،مشابه تمرین قبل ،یک هفته مهلت شما تمدید میشود ،اما برای این منظور باید در زمان مشخّص ) ۱۰روز پس از تعریف تمرین( آمادگی خود برای انجام موارد اضافه را اعالم کنید. ۴٫۲تحویل حضوری • هر یک از افراد نویسندهی پروژه ،میبایست اشراف کامل و جامع بر پیادهسازی کار داشته باشند .این مهم در طی تحویل حضوری )در صورت لزوم( بررسی خواهد شد. ۵کمک! برای رفع ابهامات مسئله یا مشکالت پیادهسازی و ...در رابطه با این تمرین با aideen@gmail.comتماس بگیرید. صفحهی ۶از ۶
© Copyright 2025 Paperzz