درود مهمان گرامی! ثبت نام

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
توابع بازگشتی
#1
سلام
نقشه بازی ماز رو فرض کنین
فرض کنین یه ماتریس 32 در 32 داریم که دقیقا با اندازه map بازی برابر هست و اطلاعات اشیائ قرار گرفته در map در اون قرار داره
می خوایم یه تابع به صورت بازگشی پیاده سازی کنیم که با استفاده از الگوریتم Backtrack و پیمایش سلول ها آرایه خانه هدف رو پیدا کنه و موانع رو تشخیص بده

من این تابع رو نوشتم
اما اوش چون مجبور بود ماتریس 32 در 32 رو بررسی کنه Stack overflow   میداد ولی  با یه متغیر اضافه کردن عمق رو محدود کردم و تمام کد ها رو هم تا حد زیادی optimize کردم
اما در حین اجرا
اگر عمق پیمایش تا 8 باشه مسیر رو نمیتونه تشخیص بده ولی درست اجرا میشه
اگر عمق پیمایش 10 و 11 باشه مسیر رو نمیتونه تشخیص بده  وسیستم لگ میزنه و کند میشه
اگر عمق پیمایش بیشتر 12باشه Stack overflow   میده 

حالا سوال اصلیه من اینه
آیا راهی هست بتونیم یک تابع بازگشتی رو بدون این درد سرا پیاده سازی کنیم و نگران هزینه اجرا هوش نباشیم؟
پاسخ
#2
نقل قول: حالا سوال اصلیه من اینه
آیا راهی هست بتونیم یک تابع بازگشتی رو بدون این درد سرا پیاده سازی کنیم و نگران هزینه اجرا هوش نباشیم؟
سلام...
از یونیتی و نحوه مدیریت حافظه اش اطلاعی ندارم و نمیخواستم جواب بدم ... سرریز پشته هم تو الگوریتمهای بازگشتی از مشکلاتی هس ک تو فراخوانی های زیاد  پیش می یاد...شاید بهتر باشه راه حل دیگه ای پیدا کنی...الان شما میخوای یه مقدار خاص رو تو یه ماتریس 32* 32 پیدا کنی؟ داری هوش مصنوعی مینویسی ک یه نقشه ماز رو حل کنه؟ بازی مازی ک من میشناسم یه نقشه است در واقع ک یه ورود داره و یه خروج و هدف پیدا کردن یه مسیر درست و احتمالا تنها مسیر موجود از  ورود  و رسیدن به خروج هستش...
در مورد مبحث سر ریز پشته میتونی عبارتی مشابه عبارت زیر رو گوگل کنی  :
How can I avoid a stack overflow when use recursive function in unity
و صفحه ای مثل صفحه زیر رو مطالعه کنی :
https://answers.unity.com/questions/2677...leaks.html
و برای ماز (اون چیزی ک من برداشت کردم) عبارت زیر رو گوگل کنی :
maze solving algorithm in unity
و برای نمونه به صفحه زیر برسی :
http://traceymccabe.com/maze-solving/
............................................................................................................................
شاید بهتر باشه محیط بازیت رو تعریف کنی (با رسم شکل) و با فرض اینکه الگوریتم فعلی و البته مورد دار شما به بهترین شکل ممکن طبق گفته خودتون نوشته شده، در این صورت (و با توضیح محیط بازی) دوستان بهتر میتونن کمک کنن ممکنه (راه حل دیگه ای رو ارائه بدن)
پاسخ
 سپاس شده توسط محمدمهدی علیجانی
#3
(1/5/1398، 12:11 عصر)hisalam نوشته است:
نقل قول: حالا سوال اصلیه من اینه
آیا راهی هست بتونیم یک تابع بازگشتی رو بدون این درد سرا پیاده سازی کنیم و نگران هزینه اجرا هوش نباشیم؟
سلام...
از یونیتی و نحوه مدیریت حافظه اش اطلاعی ندارم و نمیخواستم جواب بدم ... سرریز پشته هم تو الگوریتمهای بازگشتی از مشکلاتی هس ک تو فراخوانی های زیاد  پیش می یاد...شاید بهتر باشه راه حل دیگه ای پیدا کنی...الان شما میخوای یه مقدار خاص رو تو یه ماتریس 32* 32 پیدا کنی؟ داری هوش مصنوعی مینویسی ک یه نقشه ماز رو حل کنه؟ بازی مازی ک من میشناسم یه نقشه است در واقع ک یه ورود داره و یه خروج و هدف پیدا کردن یه مسیر درست و احتمالا تنها مسیر موجود از  ورود  و رسیدن به خروج هستش...
در مورد مبحث سر ریز پشته میتونی عبارتی مشابه عبارت زیر رو گوگل کنی  :
How can I avoid a stack overflow when use recursive function in unity
و صفحه ای مثل صفحه زیر رو مطالعه کنی :
https://answers.unity.com/questions/2677...leaks.html
و برای ماز (اون چیزی ک من برداشت کردم) عبارت زیر رو گوگل کنی :
maze solving algorithm in unity
و برای نمونه به صفحه زیر برسی :
http://traceymccabe.com/maze-solving/
............................................................................................................................
شاید بهتر باشه محیط بازیت رو تعریف کنی (با رسم شکل) و با فرض اینکه الگوریتم فعلی و البته مورد دار شما به بهترین شکل ممکن طبق گفته خودتون نوشته شده، در این صورت (و با توضیح محیط بازی) دوستان بهتر میتونن کمک کنن ممکنه (راه حل دیگه ای رو ارائه بدن)
فاز حاجی بالاست .
سیستم نویگیشن بزن بره بهینه هم هست خودتو نکش.
تمام آموزش ها در کانال ها هست.
ایتا سروش بله تلگرام
پاسخ
#4
(4/5/1398، 12:15 عصر)Clever Wise نوشته است: فاز حاجی بالاست .
سیستم نویگیشن بزن بره بهینه هم هست خودتو نکش.

مهندس من unity کار نکردم اصا !!! و هیچ اطلاعی از این انجین ندارم !!! و تو حالت عادی نباید پاسخ میدادم...اما گفتم شاید بشه کمکی کرد و جست و جویی ک خودش باید انجام میداد رو من انجام دادم ... و یه اعتقاد راسخ دارم ک اکثر سوالاتی ک ما برامون پیش اومده برا صدها نفر دیگه پیس اومده و دهها جواب داده شده...ب شخصه 99 درصد مشکلاتم رو خودم حل کردم با جست و جو و اون یه درصد هم جز استثناهایی بوده ک اگر مربوط به نرم افزاری بوده باشه به عنوان باگ گزارشش دادم!!!
پاسخ
 سپاس شده توسط محمدمهدی علیجانی
#5
(31/4/1398، 07:29 عصر)rezaamooee نوشته است: سلام
نقشه بازی ماز رو فرض کنین
فرض کنین یه ماتریس 32 در 32 داریم که دقیقا با اندازه map بازی برابر هست و اطلاعات اشیائ قرار گرفته در map در اون قرار داره
می خوایم یه تابع به صورت بازگشی پیاده سازی کنیم که با استفاده از الگوریتم Backtrack و پیمایش سلول ها آرایه خانه هدف رو پیدا کنه و موانع رو تشخیص بده

من این تابع رو نوشتم
اما اوش چون مجبور بود ماتریس 32 در 32 رو بررسی کنه Stack overflow   میداد ولی  با یه متغیر اضافه کردن عمق رو محدود کردم و تمام کد ها رو هم تا حد زیادی optimize کردم
اما در حین اجرا
اگر عمق پیمایش تا 8 باشه مسیر رو نمیتونه تشخیص بده ولی درست اجرا میشه
اگر عمق پیمایش 10 و 11 باشه مسیر رو نمیتونه تشخیص بده  وسیستم لگ میزنه و کند میشه
اگر عمق پیمایش بیشتر 12باشه Stack overflow   میده 

حالا سوال اصلیه من اینه
آیا راهی هست بتونیم یک تابع بازگشتی رو بدون این درد سرا پیاده سازی کنیم و نگران هزینه اجرا هوش نباشیم؟

الگوریتم backtrack اینجور جاها که برا مسئله راه حلی با پیچیدگی خطی وجود داره کاربرد نداره همچنین در اکثر موارد نمیشه به برگ های درخت رسید و اگه عمقش رو هم کم کنی بهت جواب قطعی نمیده
اگه نمیخوای از ابزار داخلی مثل navigation که یسری معایب مثل نداشتن مسیریابی ریل تایم داره، استفاده کنی میتونی از الگوریتم هایی مثل بلمن فورد یا دایکسترا استفاده کنی
اینجا هرجفتش با پیچیدگی (O(n^2 بهت جواب میدن
اگه میتونی از ساختمان داده لیست مجاورت استفاده کنی دایکسترا انتخاب خوبیه اگه نه چون نسبت یال ها به راس هات از (1)O هست بلمن فورد هم پیچیدگی (O(n^2 پیدا میکنه
اگه خیلی راغبی از backtrack استفاده کنی دنبال راهی باش که بازگشتی نباشه البته مطمئن نیستم اصلا راه دیگه ای جز بازگشتی نوشتن داشته باشی پس کلا بیخیالش شو
هفت شهر عشق را عطار گشت / ما هنوز اندر خم یک کوچه ایم
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  سوالات توابع یونیتی sajjad3011 24 6,691 1/6/1394، 10:13 عصر
آخرین ارسال: sajjad3011
  توابع OnGUI و Update کدام اول اجرا میشود؟ sajjad3011 5 2,037 18/8/1393، 09:07 عصر
آخرین ارسال: Black Flag



کاربرانِ درحال بازدید از این موضوع: 1 مهمان