13 می 2019
YPEA: الگوریتمهای تکاملی یارپیز
زمستان سال ۱۳۹۵ بود که پیادهسازی یکی از ایدههای قدیمیام را شروع کردم که سالها ذهنم را به خود مشغول کرده بود. هدفم ایجاد یک ساختار واحد و منسجم، برای مدلسازی، تعریف و حل «مسائل بهینهسازی» (Optimization Problem) با استفاده از روشهای «محاسبات تکاملی» (Evolutionary Algorithm) و «فراابتکاری» (Metaheuristic) بود. انگیزه اصلی من برای انجام این کار، طی ارتباطم با دانشجوها شکل گرفت. سالها، با صدها دانشجو به صورت مستقیم در ارتباط بودهام و میدانم که یکی از بزرگترین مشکلات محققین و دانشجویان، به ویژه افرادی که در برنامهنویسی چندان توانمند نیستند، تعریف ساختار مسأله و متغیرهای آن است.
با وجود آنکه حتی بیش از ۲۵۰ ساعت آموزش ویدئویی هم در همین رابطه در فرادرس ارائه شدند، فقط بخش اندکی از سئوالات و نیازهای این گروه از افراد پاسخ داده میشد. از طرف دیگر، موضوع انتقالپذیری تعاریف مسائل، میان الگوریتمهای مختلف هم مطرح بود؛ یعنی اینکه مسأله یک بار تعریف و به دفعات توسط الگوریتمهای مختلف حل شود. در همین راستا، کدهای پراکندهای در قالب پروژه «یارپیز» (yarpiz) منتشر شده بودند که از سبک واحدی بهره میبردند؛ اما هنوز مشکل تعریف مسأله را داشتند. پیرامون همین موضوع، نه تنها دانشجویان و محققان ایرانی، بلکه خارجیها هم ایمیلهای متعددی میفرستادند که نشان میداد مشکل بیان شده یک چالش بینالمللی است. به همین دلیل تصمیم گرفتم یک جعبه ابزار یکپارچه برای الگوریتمهای تکاملی در محیط نرمافزاری متلب (زبان برنامهنویسی نسل چهارم)، ارائه کنم.
بنابراین، پوشه پروژه را در زمستان سال ۹۵ باز کردم؛ اما بعد از گذشت بیش از دو سال، در اردیبهشت ماه سال ۱۳۹۸ پیادهسازی آن را تمام کردم. البته، این جعبه ابزار یکپارچه برای الگوریتمهای تکاملی، فعلا در زبان متلب ارائه شده است. لینک مخزن گیتهاب این پروژه که YPEA (سرنام Yarpiz Evolutionary Algorithms) نام دارد، از طریق این لینک [+] در دسترس عموم قرار دارد. هر چند دوست داشتم در زبان جاوا یا پایتون هم همین کار انجام شود و کتابخانههایی برای آن زبانها نیز ارائه کنم؛ اما متاسفانه در حال حاضر، به دلیل ضیق وقت احتمالا نمیتوانم این کار را انجام دهم. البته، فعلا همین جعبه ابزار هم مشکلات عده زیادی را رفع میکند. شاید روزی فرصتی دست داد، و توانستم کدها را به یکی از دیگر زبانهای بیان شده منتقل کنم. البته، اگر کسی تمایل به انجام این کار و یا همکاری در آن داشت، خوشحال میشوم به من اطلاع دهد. شاید پیشنهاد خوبی در این رابطه برایش داشته باشم.
کسانی که قصد استفاده از این تولباکس را دارند، به توضیحاتی که در ادامه آمده است توجه کنند. فایل نصبی [+] را میتوانید مستقیما در نرمافزار متلب باز کنید تا تولباکس برای شما نصب شود. هر چند سورسها هم در دسترس هستند [+] و علاقهمندان میتوانند از آنها هم استفاده کنند [+]. اما نصب تولباکس بیشتر توصیه میشود. راهنما و مستندات نسبتا کاملی هم برای این تولباکس در نظر گرفته شده است که از محیط هلپ خود متلب، و با دستور doc در دسترس است. برای دسترسی سریع به راهنمای این تولباکس، میتوانید تایپ کنید: doc yarpiz
در تولباکس YPEA انواع مختلف متغیرها، با کدینگهای مربوطه پیادهسازی شدهاند و فقط کافی است شما مثلا اعلام کنید که سه جایگشت از ده آیتم را لازم دارید. خود تولباکس باقی موارد را انجام خواهد داد و همه الگوریتمها، پاسخ شدنی و فیزیبل (Feasible) را خواهند است. همه کدینگها هم به نحوی طراحی شدهاند که متغیرها از هر نوع، به اعداد حقیقی در بازه [۰,۱] نگاشت شدهاند. تقریبا هر چیزی را میشود در این بازه جا داد (حداقل در دنیای ریاضی). این تولباکس هم از همین شگرد برای یکسانسازی مدلها استفاده کرده است. فهرست انواع متغیرهایی که در این تولباکس قابل تعریف هستند، در ادامه آمده است. البته این توضیحات در صفحه اصلی مخزن گیتهاب [+] هم آمده است.
در حال حاضر، ۱۴ الگوریتم بهینهسازی هوشمند در این تولباکس پیادهسازی شدهاند که از میان آنها، میتوان به الگوریتم ژنتیک (GA)، شبیهسازی تبرید (SA)، بهینهسازی ازدحام ذرات (PSO)، تکامل تفاضلی (DE) و CMA-ES اشاره کرد. فهرست کاملتر الگوریتمهای تولباکس YPEA در ادامه آمده است.
- کلونی زنبور عسل (Artificial Bee Colony یا به اختصار ABC)
- بهینهسازی کلونی مورچگان (Continuous Ant Colony Optimization یا به اختصار ACOR)
- الگوریتم زنبور عسل (Bees Algorithm یا به اختصار BA)
- بهینهسازی مبتنی بر جغرافیای زیستی (Biogeography-based Optimization یا به اختصار BBO)
- استراتژی تکاملی تطبیق ماتریس کواریانس (Covariance Matrix Adaptation Evolution Strategy یا به اختصار CMA-ES)
- تکامل تفاضلی (Differential Evolution یا به اختصار DE)
- الگوریتم کرم شب تاب (Firefly Algorithm یا به اختصار FA)
- الگوریتم ژنتیک (Genetic Algorithm یا به اختصار GA)
- جستجوی هارمونی (Harmony Search یا به اختصار HS)
- الگوریتم رقابت استعماری (Imperialist Competitive Algorithm یا به اختصار ICA)
- بهینهسازی علف هرز مهاجم (Invasive Weed Optimization یا به اختصار IWO)
- بهینهسازی ازدحام ذرات (Particle Swarm Optimization یا به اختصار PSO)
- شبیهسازی تبرید (Simulated Annealing یا به اختصار SA)
- بهینهسازی مبتنی بر آموزش و یادگیری (Teaching-Learning-based Optimization یا به اختصار TLBO)
یکی دیگر از کارهایی که باید در همین راستا انجام شود، گسترش این تولباکس به حوزه بهینهسازی چندهدفه است که در مسائل دنیای واقعی، کاربرد و کارایی بیشتری دارند. امیدوارم این هم روزی محقق شود. خلاصه این که، روزی که این کار به پایان رسید، حس خوبی از تمام شدن آن داشتم. بالاخره بعد از دو سال و چند ماه، این کار را به جایی رساندم. البته ناگفته نماند که یکی از عوامل این طولانی شدن بیش از اندازه، به دنیا آمدن دخترم بود. اگر این پروژه یک کتاب بود، میتوانستم به همین بهانه به او تقدیمش کنم.
دوستانی که پیشنهاداتی در رابطه با تولباکس YPEA دارند، خوشحال میشوم در مخزن گیتهاب پروژه کامنت بگذارند و آنها را مطرح کنند.