فیلم های آموزشی
ژنتیک و محاسبات تکاملی
فیلم های آموزشی
شبکه عصبی مصنوعی
فیلم های آموزشی
الگوریتم های فراابتکاری
آموزش الگوریتم TLBO آموزش شبکه عصبی مصنوعی آموزش الگوریتم کرم شب تاب
آموزش الگوریتم PSO آموزش شبکه عصبی گازی آموزش الگوریتم مورچگان
آموزش ترکیب ژنتیک و PSO آموزش شبکه عصبی رقابتی آموزش الگوریتم علف هرز
آموزش الگوریتم BBO آموزش شبکه عصبی MLP آموزش الگوریتم جهش قورباغه
آموزش الگوریتم فرهنگی آموزش شبکه عصبی RBF آموزش الگوریتم کرم شب تاب
آموزش انتخاب ویژگی آموزش شبکه عصبی LVQ آموزش الگوریتم زنبور ها
آموزش الگوریتم ژنتیک آموزش شبکه عصبی GMDH آموزش کلونی زنبور مصنوعی
الگوریتم رقابت استعماری شبکه عصبی با نروسولوشن آموزش الگوریتم ژنتیک

نحوه کد کردن کروموزوم، ذره و یا کشور در الگوریتم های بهینه سازی به صورت ماتریس

http://www.icasite.info/icasite/post_i/ques_ans.png
در برخی موارد، متغیرهای بهینه سازی ما در قالب یک ماتریس قرار دارند. سوالی که مطرح می شود این هست که چگونه می توان موارد این چنینی را توسط کدهای آماده روشهای مطرح بهینه سازی همچون الگوریتم ژتتیک، الگوریتم ازدحام ذرات و الگوریتم رقابت استعماری حل کرد؛ در حالی که این کدها، غالباً با دنباله متغیرهایی به صورت یک رشته با طول N کار می کنند نه یک ماتریس! مثلاً سوال زیر را در نظر بگیرید، که توسط یکی از دوستان در مورد نحوه انجام این کار در الگوریتم رقابت استعماری پرسیده بودند:

آیا می توان به جای این که در تابع ارزیابی برداری از متغیرها داشته باشیم برداری از ماتریس ها یا بردارها داشته باشیم. به عبارت دیگر رمزگذاری مسئله به شکلی باشد که برای  نمایش هر کروموزوم (کشور)یک ماتریس داشته باشیم.  آنگاه آیا می توان از کدهای متلب الگوریتم رقابت استعماری که در حال حاضر در وبسایت محاسبات تکاملی (icaSite.info) قرار دارد برای این رمزگذاری استفاده کرد یا باید نسخه ای دیگر از این برنامه تولید کرد؟ اگر تغییراتی در کدفعلی لازم است لطفا بفرمایید.

با سپاس فراوان

 

پاسخ سوال بسیار ساده می باشد.

ابتدا لازم به ذکر است که در موارد ماتریسی، نسخه هایی از روشهای مطرح بهینه سازی وجود دارند که در همان ابتدا، مسئله را به صورت یک ماتریس کد می کنند و تمام عملیات را روی آنها بازتعریف می کنند. اما درعمل نیازی به چنین کاری نیست. برای حل مشکل کافی است ما ماتریس متغیرها را reshape کنیم. مثلاً فرض کنید 20 مجهول مسئله بهینه سازی به صورت یک ماتریس 4*5 قرار گرفته اند. کاری که ما انجام می دهیم این هست که مسئله بهینه سازی را برای بردار 20*1 تعریف می کنیم (که در این حالت همانگونه که بیان شد روشهای بهینه سازی با آن مشکلی ندارند). اما در داخل تابع هزینه یک دستور reshape (در صورت استفاده از متلب) به کار می بریم تا قبل از ارزیابی تابع هزینه برای بردار 20*1، ابتدا آن را به ماتریس 4*5 تبدیل کند. یعنی در خط اول تابع هزینه می نویسیم:
function Cost  = CostFunction(X)
XR = reshape(X,5,4);
Cost = evaluate cost at XR
end
 با این کار بدون اینکه برنامه بهینه سازی متوجه شود، ما تمام ارزیابی ها را به صورت ماتریس انجام می دهیم، در حالی که الگوریتم با یک بردار 20*1 کار می کند. تابع هزینه محاسبات را برای ماتریس انجام می دهد و مقداری که بر می گرداند، همان هزینه مرتبط با رشته 20*1 می باشد.
0 پاسخ

ارسال یک پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *