تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 3 123 آخرآخر
نمايش نتايج 1 به 10 از 26

نام تاپيک: پازل N

  1. #1
    آخر فروم باز فاطـمه's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    Mashhad
    پست ها
    1,755

    پيش فرض پازل N

    سلام بچه ها
    من باید برنامه پازل n رو با الگوریتمهای مختلف بنویسم(bfs,dfs,a*,idf,...)
    ولی مشکلم اینجاست که اصلا نمی دونم چه استراتژی برای جست و جو داشته باشم
    مثلا برای مسئله nqueen در حالت افزایشی یکی یکی q ها رو اضافه می کردیم ، تو هر سطر یکی می ذاشتیم و تو حالتای ضربدری چک می کردیم
    ولی این رو نمی دونم چه جوری حل کنم
    اگر راهنمایی کنید ممنون میشم

    واسه دوستانی که ممکنه ندونند npuzzle چیه توضیح می دم این قسمت رو:
    یه پازل داریم با N تا خونه مثلا تو حالت n=9 یه پازل 3*3 داریم تو خونه ها اعداد 1و8 رو به صورت نا مرتب داریم و یه خونه خالی
    که این برنامه باید خودش خونه ها رو مرتب کنه
    و ترتیب اعمالی رو که انجام داده بده

  2. #2
    داره خودمونی میشه ali.sholug's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    همینجا
    پست ها
    144

    پيش فرض

    سلام

    ببین اینجوری میشه؟

    پازل رو یه ماتریس در نظر بگیر

    تمام سطر هارو مرتب کن
    بعد تمام ستونهارو مرتب کن
    عنصر آخر هر سطر رو با عنصر اول سطر بعدی مقایسه کن
    اگه کوچیک بود سطر بالایی مرتب شده
    اگه نه جای این عنصر ها رو عوض کن
    اه واسه همه سطر ها شرط بالا درست بود ماتریست مرتبه
    ای کارو واسه سطر های پایین هم انجام بده
    بعد دوباره
    تمام سطر هارو مرتب کن
    و تمام ستونهارو مرتب کن

  3. #3
    داره خودمونی میشه ali.sholug's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    همینجا
    پست ها
    144

    پيش فرض

    یا اینکه میتونی از اول هر عدد رو برداری ببری سر جاش بذاری وقتی به n/2 +1 عضو رسیدی ماتریست مرتبه

    امتاحانش کن هر دو روشو

    موفق باشی

  4. #4
    آخر فروم باز فاطـمه's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    Mashhad
    پست ها
    1,755

    پيش فرض

    نه دیگه اینا نمیشه
    اگه این بازی رو انجام داده باشی
    می بینی که با توجه به خونه خالی حرکاتی که می تونی انجام بدی خیلی محدوده
    یعنی همیشه بین 2-4 حرکت فقط وجود داره واسه انتخاب
    بچه ها خیلی فوریه لطفا کمک

  5. #5
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    اینارو واسه 8puzzle توضیح می دهم.
    ببین شما state فعلیت یه حالت رندومه. اگه خونه وسطی خالی باشه، چهار تا حرکت می تونید انجام بدید.

    اگه مثلاً خونه پایین سمت راست خالی باشه دو حرکت قابل انجامه.

    پس شما به یک تابع نیاز دارید که بتونه حالت های بعدی حالت فعلی رو به دست بیاره. اسم این تابع رو می گذاریم succ (مخفف successor یا بعدی)
    این تابع اینجوری اجرا میشه که حالت فعلی و می گیری و حالت بعدی رو می ده (این تابع توی همه این الگوریتم هایی که شما قصد پیاده سازیش رو دارید مشترکه)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته ساختمان داده State چیزی نیست جز یه آرایه دو بعدی (یا حتی یک بعدی)
    خوب! حالا که اینو داریم ما می آیم و استراتژی های جستجو رو که توی کتاب هوش مصنوعی هست و می نویسیم.
    مثلاً واسه A* باید از یک تابع heuristic استفاده کنیم (فاصله منهتن یا فاصله قطری ...)
    این تابع یه همچین شکلی داره:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب! حالا تابعای اصلی رو داری.
    می آی از حالت اولیه شروع می کنی و همه همسایه هاشو بوسیله Succ به دست می آری. بعدش می آی و روی اون همسایه ها تابع Heuristic رو اجرا می کنی و واسه هر کدوم یه امتیاز به دست می آری. حالا از بین حالات همسایه هر کدوم که امتیاز بهتری رو داره (توی A* باید امتیاز Heuristic رو با path طی شده جمع کرد) رو انتخاب و دوباره همون کار بالا رو روش انجام می دی.

    در نتیجه این جستجوی A* یه جورایی هوشمند هست (البته نه خیلی)

    bfs و dfs هم که هیچی! فقط همسایه هارو با Succ تولید می کنی و اونا رو با یه ترتیبی (بسته به اینکه سطح اولند یا عمق اول) پیمایش می کنی. پیمایش هم یعنی اینکه Succ رو رو این حالات همسایه به دست آمده اجرا می کنیم و بررسی مکی کنیم که آیا به حالت هدف رسیده ایم؟ یعنی به حالت زیر:

    هر وقت هم به حالت هدف رسیدید، درخت جستجو را تا بالا پیمایسش می کنید تا ترتیب حرکت ها رو به دست بیاری.
    همین!

    idf هم که همون dfs هست که اونو محدود می کنیم به یه عمق خاص (تا اونجایی که یادم باشه)!
    Last edited by hamidreza_buddy; 23-05-2009 at 18:24.

  6. 2 کاربر از hamidreza_buddy بخاطر این مطلب مفید تشکر کرده اند


  7. #6
    داره خودمونی میشه DaneshD's Avatar
    تاريخ عضويت
    May 2009
    محل سكونت
    Sweden
    پست ها
    196

    پيش فرض

    خیلی ساده هست. حتما میتونی تو زمان کمی انجام بدی. این دوستمون hamidreza_buddy هم توضیحات بالارو از این سایت آورده و البته به خوبی توضیح داده:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    که الگوریتمش هم اونجاست. سورس کدش هم رو اینترنت هست که البته ندونی کجاست بهتره تا خودت انجام بدی و یه چیزی یاد بگیری.

    راهنمایی: مساله رو به Maze تبدیل کن. Maze همون بازی بود که از یک نقطه به یک نقطه دیگه باید بری تو یک مسیر مارپیچ. خونه خالی رو فرض کن که باید تکون بدی تا برسه به مرکز که اطرافش خونه های مرتب شده puzzle هست. برای ثبت حرکات هم از یک counter استفاده کن. طول counter هم برابر با 2 به توان n هست که n تعداد خونه های puzzle هست که میشه 9 برای یک puzzle با سایز 3x3. هر بار که counter یکی میره بالا در واقع یک حرکت جدید رو امتحان کردی. تقریبا حل شد!

  8. این کاربر از DaneshD بخاطر این مطلب مفید تشکر کرده است


  9. #7
    آخر فروم باز فاطـمه's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    Mashhad
    پست ها
    1,755

    پيش فرض

    سلام دوست من ،( اول از همه از اینکه وقت گذاشتین خیلی ممنون)
    خب اینا همه درست
    ولی مشکل من اینجاست که مثلا تو حالت bfs که باید جست و جوی اول سطح داشته باشیم
    چه جوری درخت رو تشکیل بدیم؟
    مثلا سطح اول (با فرض وسط بودن خونه خالی) یه بار به راست ، یه بار به چپ، یه بار به پایین و یه بار به بالا می ریم
    خب تو سطح دو چکار کنیم؟
    اونی که سطح اول به راست رفته از کجا بفهمیم که سطح دوم کدوم طرفی حرکت کنه؟
    این کار رو باید رندوم انجام بدیم؟
    اگر فرضا واسه حالتای bfs و dfs این کار رو رندوم انجام بدیم تو حالت a* که حالت آگاهانه رو داریم باید چکار کنیم؟!

  10. #8
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    ببینید درخت جستجو تقریباً یه چیزه مجازیه!
    یعنی شما واقعاً یه درخت نمی سازید
    بلکه با فراخوانی های بازگشتی برنامه شما حالت یک درخت می گیره. مثلاً شما یه تابع به اسم Solve می نویسی که ورودیش یه حالته.
    سپس توی مثلاً bfs دوباره اون رو روی همسایه های اجرا می کنی که در نتیجه یه درخت حالت به وجود می آد:

    شبه کد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یا مثلاً DFS:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یا مثلاً A*:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    می بینید که ساختمان داده درخت نداریم ولی فراخوانی بازگشتی توابع به صورت درخت است.

  11. این کاربر از hamidreza_buddy بخاطر این مطلب مفید تشکر کرده است


  12. #9
    آخر فروم باز فاطـمه's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    Mashhad
    پست ها
    1,755

    پيش فرض

    ببینید درخت جستجو تقریباً یه چیزه مجازیه!
    یعنی شما واقعاً یه درخت نمی سازید
    بلکه با فراخوانی های بازگشتی برنامه شما حالت یک درخت می گیره. مثلاً شما یه تابع به اسم Solve می نویسی که ورودیش یه حالته.
    سپس توی مثلاً bfs دوباره اون رو روی همسایه های اجرا می کنی که در نتیجه یه درخت حالت به وجود می آد:

    شبه کد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یا مثلاً DFS:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یا مثلاً A*:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    می بینید که ساختمان داده درخت نداریم ولی فراخوانی بازگشتی توابع به صورت درخت است.
    سلام دوست من
    از راهنمایی تون واقعا ممنون
    من برنامه bfs رو نوشتم
    خطا نداره ، بعضی اوقاتم جواب می ده
    ولی به نظر خودم کاملا درست کار نمی کنه
    اگه ممکنه یه نگا بندازین
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  13. #10
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    سلام
    من متاسفانه کامپایلر ندارم
    اگه خطا نداره که هیچی
    ولی اگه جواب نمی ده عجیب نیست
    چون پازل های N-PUZZLE همیشه به دو فضای حالت قابل حل و غیر قابل حل تقسیم می شوند. یعنی برای نصف حالت ها «به هیچ وجه» نمیشه به حالت هدف رسید.

    همچنین برای اون نصفی که میشه رسید، عمق درخت جستجو می تونه تا 24 (یعنی 24 حرکت) برسه. که فضای جستجو به صورت نمایی زیاد می شه . یعنی اگر هر حالت فقط دو حالت همسایه داشته باشد (که اینطور نیست و بعضی ها سه یا چهار حالت همسایه دارند)، 2 به توان 24 می شود خیلی!!! یعنی اصلاً شما برای اینکار هم حافظه و هم قدرت پردازش کم می آورید.
    در نتیجه bfs «در تئوری» برای همه حالات «قابل حل» جواب به دست می آورد ولی «در عمل» برای تعداد خیلی محدودی از اون نصف حالات قابل حل می تونه کار کنه. مثلاً برای اونایی که عمقشون 6-7 باشه (6-7 حرکت لازم داشته باشن تا برسن به حالت هدف).

    برای همینه که از روش های هوشمند مثل A* استفاده می شه. چون این روش ها فضای جستجو رو به میزان بسیار زیادی محدود می کنند و در نتیجه سرعت جستجو خیلی خیلی بالاتر می ره (البته A* مشکل حافظه داره و نه قدرت پردازش). یعنی بعد از مدتی حافظه رو پر می کنه. البته توی کتاب هوش مصنوعی راسل روش هایی برای حل این مشکل ارائه شده مثل ids و ...

صفحه 1 از 3 123 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •