elmiramohammadi 596 اشتراک گذاری ارسال شده در 5 شهریور، ۱۳۹۳ سلام دوباره ابتدا از تمام کسانی که زحمت کشیدن و نظر دادن کمال تشکر رو بجا می آورم . در مرحله بعد از به تاخیر افتادن آموزش پوزش میطلبم و دلیل تاخیر هم این می باشد که بنده در گیر پروژه nlp شده ام . بعد از گذاشتن این مطلب بروی سایت دوستان نظر دادن که چرا با این الگوریتم شروع کردی به چند دلیل 1- و مهمترین دلیل در گیری بنده می باشد که فرصت آماده کردن یه مطلب خوب مثلا در مورد ژنتک در حال حاضر ندارم 2- راحتر و ساده تر بودن الگوریتم pso برای پیاده سازی 3- ساده تر بودن الگویتم pso با کار هایی همچون لبه یابی و استخراج ویژگی 4- ساده تر بودن ترکیب pso با شبکه های عصبی ......... برای شروع من ابتدا الگوریتم تجمع ذرات رو آماده کردم که ابتدا مقدمات آن رو به صورت خیلی ساده بیان می کنم تا خود الگوریتم برای دوستان قابل فهم باشد و در نهایت کد پیاده سازی شده آن رو در اختیار دوستان قرار می دهم. حال مبحث رو شروع می کنم: الگوریتم تجمع ذرات که به نام انگلیسی Particle Swarm Optimization معرف است یا به اختصار به آن PSO هم می گویند برگرفته از تجمع انبوهی از ذرات است که از حرکت دسته جمعی پرندگانٰ، ماهی ه و غیره الهام گرفته است. در حرکت حمعی هر جز خود هوشمندی ندارد ولی رفتار گروه یک هوشمندی رو دنبال می کند. برای فهم این الگوریتم من یک مثال انسانی برای شما می آورم: فرض کنید که شما دانشجو هستید و می خواهید رشد تحصیلی داشته باشید و در یک مقطعی رشد تحصیلی شما خوب بوده است و همچنین در همون مقطع یک شاگرد اول کلاس هم وجود دارد که می توان از روش درس خوندن اون الگو برداری کرد. حال برای اینکه شما در رشد تحصیلی پیشرفت داشته باشید دو کار می توانید انجام بدهید یا اینکه بر اساس تجربیات خود پیش بروید یا اینکه از تجربیات شخص الگو پیروی کنید. که هر دو این کار ضرر هایی دارید اگر به دنبال تجربیات خود بروید یک تصمییم خودخواهانه گرفتید که ناشی از این است که به دانش خود اعتماد کامل دارید و چه بسا که ممکن است دانش شما اشتباه باسد و اگر فقط از تجربه ی شخص الگو استفاده کنید یک خودباختگی برای شما پیش خواهد آمد که به دانش خود اعتماد ندارید. بهترین کار این است که از ترکیب این دو استفاده کنید. حال با این مثال وارد الگوریتم pso می شویم. در این الگوریتم ما np تا ذره داریم که در فضای مسئله به صورت تصادفی پخش شده اند و هر ذره برای خود یک موقعیت و یک هزینه دارد. برای جابجایی هر ذره از همون قضیه بالا (ترکیب خطی تجربیات خود و تجربیات الگو) استفاده می شود: xi_jadid=xi_ghadim + Vi_jadid که Vسرعت حرکت ذره می باشد که به صورت زیر بدست می آید: Vi_jadid=c1r1(xi_localBest - xi_ghadim) +c2r2 (x_globalBest - xi_ghadim) + wvi_ghadim که x_localBest همون تجربیات خود و x_globalBest تجربیات شخص الگو است. دقت داشته باشید که ما برای هر ذره یک x_LocalBest و برای تمام ذرات یک x_globalBest داریم c1 , c2ضریب های تصمییم گیری هستند که کدام یک برای ما بیشتر اولویت دارد اینکه بیشتر به سمت تجربیات خود حرکت کنیم یا به سمت تجربیات شخص الگو که در پیاده سازی ها معمولا c1+c2=4 در نظر می گیرند مثلا c1=c2=2 r1,r2 هم اعداد تصادفی هستند که از توزیع یگنواخت بین صفر و یک بدست می آیند که معادل همون دستور rand در متلب می باشد. wv_ghadim هم به ضریب اینرسی معروف هست. در الگوریتم pso دو ضریب اول مهم هستند و می توان از ضریب اینرسی چشم پوشی کرد. حال اگر بخواهیم این روند را برای تعدادی از ذرات اعمال کنیم به صورت زیر می شود. در ابتدا ما np تا ذره رو در فضای جستجو به صورت تصادفی قرار می دهیم سپس برای هر ذزه نسبت به موقعیتش هزینه اش رو محاسبه می کنیم. حال برای جابجایی موقعیت هر ذره باید از فرمول بالا کمک بگیریم: نکته ای که در همین ابتدا باید به آن اشاره کنم این است که در گام اول مقدار x_localBest و x_globalBestچیست؟ برای x_LocalBest در گام اول مقدار خود ذره می باشد و برای x_globalBest بهترین مقداری ذزه بین تمام ذرات. با داشتن این پارامترها نوبت به نوبت به آپدیت کردن ذره ها داریم .طبق فرمول بالا موقعیت هر ذره و هزینه آن آپدیت می شود بعد از آپدیت شدن موقعیت هر ذره نوبت می رسد به موقعیت آپدیت کردن نقاط x_LocalBest و x_GlobalBest . برای هر ذره تصمیم می گیریم که آیا هزینه موقعیت جدید از x_localBest آن بهتر است یا نه اگر بهتر بود x_localBest رو آپدیت می کنیم. و در نهایت موقعیت بهترین ذره رو در x_globalBest قرار می دهیم و این فرآیند رو به تعداد مشخصی تکرار می کنیم. انشاالله در اولین فرصت آموزش ژنتیک رو هم بروی سایت قرار خواهم داد ............ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 21 لینک به دیدگاه
esw1 112 اشتراک گذاری ارسال شده در 6 شهریور، ۱۳۹۳ در بعضی توابعی که چندین مینیمم نسبی داشته باشد این الگوریتم در نقاط محلی می افتد و مینمم مطلق را نمی تواند پیدا کند که این یکی از معیب الگوریتم pso می باشد 8 لینک به دیدگاه
hanieh256 15 اشتراک گذاری ارسال شده در 13 اسفند، ۱۳۹۵ منم تشکرمیکنم بابت توضیح خوبتون میشه راجب پیاده سازیش باتوابع ساده درمتلب هم اموزشی قراربدین؟ لینک به دیدگاه
f.gzii 10 اشتراک گذاری ارسال شده در 10 بهمن، ۱۳۹۶ سلام این الگوریتم رو چجوری واسه فروشنده دوره گرد پیاده سازی کنیم در متلب؟ سرعت حرکت ذره ها برای فروشنه دوره گرد چی میشه? لینک به دیدگاه
ارسال های توصیه شده