AI-HW6.pdf

‫تمرین سری ششم درس هوش مصنوعی‬
‫مدرس‪ :‬خانم دکتر سلیمانی‬
‫ترم دوم سال تحصیلی ‪1394-95‬‬
‫دانشکده مهندسی کامپیوتر‬
‫دانشگاه صنعتی شریف‬
‫تئوری‪:‬‬
‫‪ .1‬با استفاده از الگوریتم ‪ ،DPLL‬مشخص کنید که عبارت زیر ‪ satisfiable‬هست یا خیر و اگر هست‬
‫مقادیری که آن را ‪ satisfy‬می کنند به دست آورید‪( :‬علامت | بیانگر ‪ or‬و علامت & بیانگر ‪ and‬و‬
‫علامت ~ بیانگر نقیض هستند)‬
‫‪(A|B|~C) & (A|~B|D) & ~D & (~C|D) & (B | ~E) & E‬‬
‫‪ .2‬جملات زیر را در نظر بگیرید‪:‬‬
‫•‬
‫کسی که بی منطق باشد دعوا می کند‪.‬‬
‫•‬
‫محمد دعوا نمی کند‪.‬‬
‫•‬
‫افراد هنگام عصبانیت‪ ،‬بی منطق می شوند‪.‬‬
‫الف) جملات بالا را به منطق مرتبه اول ترجمه کنید‪ ،‬برای این کار از مسندهای زیر استفاده کنید‪:‬‬
‫)‪ A(x‬برای اینکه ‪ x‬منطقی است‪.‬‬
‫)‪ B(x‬برای اینکه ‪ x‬دعوا می کند‪.‬‬
‫)‪ C(x‬برای اینکه ‪ x‬عصبانی است‪.‬‬
‫ب) جملات به دست آمده در بخش قبل را به فرم ‪ clausal‬در آورید‪.‬‬
‫ج) با استفاده از ‪ resolution‬ثابت کنید که "محمد عصبانی نیست‪".‬‬
‫‪ .3‬در موارد زیر در صورت امکان ‪ unification‬را انجام دهید و اگر ممکن نیست علت امر را توضیح دهید‪.‬‬
‫توجه کنید که ‪ unification‬شما در حد امکان عمومی باشد‪ ،‬یعنی به طور مثال اگر جایی میتوان متغیر‬
‫‪ X‬قرار داد‪ ،‬به جای آن مقداری ثابت نگذارید‪( .‬متغیرها با حرف بزرگ شروع میشوند‪).‬‬
‫)‪a) Knows(a,X,Y) , Knows(a,b,Z‬‬
‫)‪b) Function(X,f(X)), Function(Y,Y‬‬
‫‪ .4‬در یک شرکت سه نفر به نام های ‪ B ،A‬و ‪ C‬کار می کنند‪ .‬می دانیم این سه نفر در شغل های مدیر‪،‬‬
‫برنامه نویس و گرافیست مشغول به کار هستند ولی نمی دانیم هر کدام چه شغلی دارند‪ .‬با استفاده از‬
‫اطلاعات زیر و جملات معقول نظیر اینکه هر کس از این افراد یک شغل را دارد‪ ،‬یک پایگاه دانش بسازید‪،‬‬
‫سپس آن را به صورت ‪ clausal‬تبدیل کنید و با استفاده از ‪ resolution‬به دست آورید که چه کسی‬
‫برنامه نویس است‪.‬‬
‫•‬
‫گرافیست ذوق هنری دارد‪.‬‬
‫•‬
‫حقوق ‪ A‬از ‪ B‬کمتر است‪.‬‬
‫•‬
‫‪ A‬ذوق هنری ندارد‪.‬‬
‫•‬
‫حقوق مدیر از همه بیشتر است‪.‬‬
‫از ‪ predicate‬های زیر برای ساخت پایگاه دانش خود استفاده کنید‪:‬‬
‫•‬
‫)‪ Art(x‬برای اینکه ‪ x‬ذوق هنری دارد‪.‬‬
‫•‬
‫)‪ Job(x,y‬که یعنی شخص ‪ x‬شغل ‪ y‬را دارد‪.‬‬
‫•‬
‫)‪ Upper(x,y‬که یعنی حقوق شخص ‪ x‬از ‪ y‬بیشتر است‪.‬‬
‫برای راحتی از حرف ‪ P‬برای شغل برنامه نویس‪ ،‬از حرف ‪ M‬براش شغل مدیر و از حرف ‪ G‬برای گرافیست استفاده‬
‫کنید‪.‬‬
‫‪ .5‬جملات زیر را به فرم منطق مرتبه اول بنویسید‪:‬‬
‫الف) کسی وجود ندارد که در دانشگاه درس بخواند و نوشتن بلد نباشد‪.‬‬
‫ب) به ازای هر شخص‪ ،‬فرد دیگری وجود دارد که هم قد او است‪.‬‬
‫ج) فقط یک نفر وجود دارد که درس هوش مصنوعی را پاس می کند‪: ( .‬دی )‬
‫د) هیچ دانشآموزی درس تاریخ را نمی افتد ولی حداقل یک نفر درس جغرافی را می افتد‪.‬‬
‫‪ .6‬عبارات زیر را ثابت کنید و در صورت درست نبودن‪ ،‬مثال نقض بزنید‪:‬‬
‫)‪a) ∀x∃yP(x,y) → ∃xP(x,x‬‬
‫)‪b) ∃x(P(x) → C) → (∀xP(x) → C‬‬
‫عملی‪:‬‬
‫‪‬‬
‫برای هر مساله فایلی مجزا شامل کد خود به زبان پرولاگ آماده و تحویل نمایید‪.‬‬
‫‪ .7‬برنامهای بنویسید که عناصر تکرار شده در یک لیست را پیدا کند‪ repeated/2 .‬را پیاده سازی کنید به‬
‫طوری که آرگومان اول آن یک لیست (ورودی) باشد و در آرگومان دوم لیست جواب ساخته شود؛ به‬
‫طوری که تنها اولین وقوع (از سمت چپ) از هر عنصری که بیش از یک بار در لیست آمده حفظ شود‪.‬‬
‫مثال‪:‬‬
‫‪-?repeated([a,b,a,c,c,d],X).‬‬
‫‪= X[a,c].‬‬
‫‪ .8‬به درختی ریشهدار‪ ،‬که هر راس آن حداکثر دو فرزند (چپ و راست) دارد؛ درخت دودویی میگوییم‪ .‬درخت تهی را‬
‫با ‪ nil‬و درخت به ریشه ‪ A‬با زیردرختهای چپ و راست ‪ L‬و ‪ R‬را با )‪ t(A,L,R‬نشان میدهیم‪ .‬به عنوان مثال‬
‫به درخت شکل زیر و عبارت متناظر با آن توجه کنید‪.‬‬
‫‪a‬‬
‫‪b‬‬
‫‪c‬‬
‫‪e‬‬
‫‪f‬‬
‫‪d‬‬
‫‪g‬‬
‫)))‪t(a,t(b,t(d,nil,nil),t(e,nil,nil)),t(c,nil,t(f,t(g,nil,nil),nil‬‬
‫الف) برنامه ‪ isTree/1‬را بنویسید که بررسی کند آرگومان داده شده متناظر با یک درخت دودویی است یا‬
‫خیر‪.‬‬
‫مثال‪:‬‬
‫‪?- isTree(t(a,t(b,nil,nil),nil)).‬‬
‫‪True.‬‬
‫‪?- isTree(t(a,t(b,nil,nil))).‬‬
‫‪False.‬‬
‫ب) برنامه ‪ countTree/2‬را بنویسید که آرگومان اول آن عبارت درختی دودویی (ورودی) و آرگومان دوم آن‬
‫(خروجی) تعداد رئوس موجود در درخت مربوطه را برگرداند‪.‬‬
‫مثال‪:‬‬
‫‪?- countTree(t(a,t(b,nil,nil),nil),X).‬‬
‫‪X = 2.‬‬
‫‪?- countTree(nil,X).‬‬
‫‪X = 0.‬‬
‫ج) برنامه ‪ dfs/2‬را بنویسید که آرگومان اول آن عبارت درختی دودویی (ورودی) است که یک یا چند تا از‬
‫راسهای آن ‪ goal‬نام دارند و آرگومان دوم آن (خروجی) مسیری است که با استفاده از الگوریتم ‪ dfs‬از ریشه‬
‫تا اولین ‪ goal‬در طول مراحل ‪ dfs‬به آن میرسیم‪.‬‬
‫مثال‪:‬‬
‫‪?- dfs(t(a,t(b,t(goal,nil,nil),t(e,nil,nil)),t(goal,nil,t(f,t(g,nil,nil),nil))),X).‬‬
‫‪X = [a,b,goal].‬‬
‫د) همان برنامه بالا را این بار برای ‪ bfs‬بنویسید‪.‬‬
‫مثال‪:‬‬
‫‪?- bfs(t(a,t(b,t(goal,nil,nil),t(e,nil,nil)),t(goal,nil,t(f,t(g,nil,nil),nil))),X).‬‬
‫‪X = [a,goal].‬‬
‫‪ .9‬یک جدول 𝑛 × 𝑛 داریم و میخواهیم با حرکات بالا و راست از خانه چپ پایین به راست بالا برویم‪ ،‬مسیری که این امر را‬
‫محقق سازد‪ ،‬مطلوب مینامیم‪.‬‬
‫الف) یک مسیر مجاز به مسیری مطلوب میگوییم که هیچگاه پایین قطر 𝑦 = 𝑥 از جدول نرود‪ .‬برنامه ‪ isValid/2‬را بنویسید که‬
‫آرگومان اول و دوم آن عدد طبیعی ‪ 𝑛 < 100‬و لیستی از ترمهای ’‪( ‘U‬بالا) و ’‪( ‘R‬راست) باشد و حاصل نتیجه بررسی مجاز بودن‬
‫مسیر را ارائه دهد‪.‬‬
‫مثال‪:‬‬
‫‪?- isValid(5,[‘U’,’R’,‘U’,’R’,‘U’,’R’,‘U’,’R’,‘U’,’R’,‘U’,’R’,‘U’,’R’]).‬‬
‫‪True.‬‬
‫‪?- isValid(2,[‘U’,’R’,’R’,’U’]).‬‬
‫‪False.‬‬
‫ب) برنامه ‪ allValids/2‬را بنویسید که ‪ 𝑛 < 6‬را در آرگومان اول بگیرد و در آرگومان دوم؛ لیستی شامل همهی مسیرهای مجاز‬
‫را به ترتیب الفبایی برگرداند‪ .‬هر مسیر بصورت لیستی از ’‪ ‘R‬و ’‪‘U‬؛ مشابه قسمت قبل درج شود‪.‬‬
‫مثال‪:‬‬
‫‪?- allValids(2,L).‬‬
‫‪L=[[‘U’,’U’,’R’,’R’],[‘U’,’R’,’U’,’R’]].‬‬
‫موفق باشید ‪:‬دی‬