در تعریف عام، بهینهسازی به معنای بهدستآوردنِ بهترین نتیجه است، به عبارت دیگر بهینهسازی یعنی بیشترین دستیابی به هدف مورد نظر با صرف کمترین انرژی و هزینه. اما تعریف ریاضیاتیِ بهینهسازی که در مهندسی و علوم پایه مورد استفاده قرار میگیرد، دقیقتر و کاملتر است. طبق این تعریف، بهینهسازی عبارت است از انتخاب بهترین نتیجه از بین نتایج دستیافتنی. در واقع ابتدا باید مجموعهای از نتایج قابل دستیابی (که بنابر ماهیت مسئله، از هر نوعی ممکن است باشند) را پیدا کرد و سپس با استفاده از تکنیکهایی، به بهترین عضو از این مجموعه رسید.
در مقاله مهندسی کامپیوتر چیست؟ (گرایشها، بازارکار و درآمد) شاره شد که طراحی الگوریتم، یکی از مهارتهای مهم مورد نیاز مهندسین کامپیوتر است که در این مقاله درباره آن نیز صحبت خواهیم کرد. روشهای بهینهسازی را میتوان به ۲ دسته کلی کلاسیک (تحلیلی) و فراابتکاری تقسیم کرد. برای اجرای فرآیندهای مربوط به روشهای بهینهسازیِ فراابتکاری میتوان از زبانهای برنامهنویسی متفاوت استفاده کرد که MATLAB به دلایل زیادی یکی از رایجترینها است.
هدف و گامهای اصلی بهینهسازی
هدف بهینهسازی فارغ از اینکه از روشهای تحلیلی استفاده میکند یا روشهای بهینهسازی فراابتکاری و با چه ابزارهایی انجام میشود، این است که یک کمیت، بیشینه (maximum) یا یک کمیت، کمینه (minimum) یا هر دو به طور همزمان ماکزیمم و مینیموم شوند.
برای مثال فرض کنید یک کارگاه تولیدی مواجه هستیم که مواد اولیه را خریداری میکند، با انجام مراحلی به کمک کارگران، آن را به محصول تبدیل کرده و از فروش آنها به سود میرسد. برای این کارگاه هم میتوان بهینهسازی را با هدف بیشترین سود انجام داد، هم میتوان با هدف کمترین هزینهی اولیه بهینهسازی را پیادهسازی کرد، هم میتوان با در نظر گرفتن هر دو عامل، این کار را انجام داد.
اگر این پروسه را به زبان ریاضی بیان کنیم به طور خلاصه با چند گام اصلی روبهرو هستیم:
- گام اول، تعریف مسئله به صورت تابع کمی که دامنه تغییرات مشخص باشد.
- گام دوم، یافتن نقاط بحرانی (نقاطی که احتمال دارد نقاط بیشینه یا کمینه باشند) در تابع مورد نظر
- گام سوم، یافتن نقطه اکسترمم (ماکزیمم یا مینیمم) از بین نقاط بحرانی
بهینهسازی تحلیلی (کلاسیک)
اگرچه این نوع بهینهسازی بیشتر در گذشته کاربرد داشته، اما همچنان دقیقترین روش یافتن جواب بهینه در مسائل مختلف است. سازوکار روش تحلیلی برخلاف بهینهسازی فراابتکاری، مبتنی بر مشتق یا اصطلاحاً gradient-based است. میدانیم که مشتق هر تابع در نقاط اکسترمم صفر است. بنابراین در روند بهینهسازی تحلیلی، مشتق تابع را برابر صفر قرار میدهند و با حل معادلات، نقاطی که در آن مشتق صفر است را بهدست میآورند. با وجود دقت بالا، بهینهسازی کلاسیک برای بعضی مسائل پیچیده قابل استفاده نیست و گاهی نیز بسیار زمانبر است. به همین دلیل روشهای نوینی برای بهینهسازی توسعه یافت.
الگوریتمهای هوشمند بهینهسازی چیستند؟
در حالت مقابل روش دقیق، روشهای تقریبی در سه دسته کلی ابتکاری (heuristic)، فراابتکاری (meta-heuristic) و فوق ابتکاری (hyper-heuristic) ایجاد شده و توسعه یافتند که الگوریتمهای فراابتکاری مهمترین آنها هستند. الگوریتمهای فراابتکاری انواع مختلفی دارند که روشهای مبتنی بر جمعیت، پرکاربردترین آنها هستند. در دوره آموزش جامع بهینه سازی با متلب (MATLAB) مهمترین انواع الگوریتمها را بهصورت کاربردی خواهید آموخت. البته اگر با متلب آشنایی ندارید، پیشنهاد میکنیم ابتدا در دوره آموزش نرم افزار متلب (MATLAB) شرکت نمایید. در ادامه به چند الگوریتم از بهینهسازی فراابتکاری مبتنی بر جمعیت میپردازیم.
معرفی و بررسی مهمترین الگوریتمهای هوشمند بهینهسازی در متلب
الگوریتم ژنتیک
یکی از انواع روشهای بهینهسازی فراابتکاری مبتنی بر جمعیت، الگوریتمهای تکاملی (Evolutionary Algorithm) هستند که معروفترین آنها، الگوریتم ژنتیک است. اساس این روش الهامگرفته شده از طبیعت و بر پایه فرآیند زیستی موجودات است. در طبیعت هر نسلی از موجودات با تولیدمثل نسل دیگری را به وجود میآورند و هر موجودی سازگاری بیشتری با طبیعت داشته باشد، باقی میماند. همین اصول، پایهی اصلی الگوریتم ژنتیک هستند.
اجزای اصلی الگوریتم ژنتیک:
- شخص یا ژن یا متغیر
- تابع برازندگی یا تابع هدف
- جمعیت
- انتخاب والدین
- ترکیب والدین
- جهش
عملکرد کلی الگوریتم ژنتیک به زبان ساده به این صورت است که ابتدا یک جمعیت از افراد در نظر گرفته میشوند، از بین آنها افراد با ویژگیهای خوب (خوب بودن در واقع همان معیار بهینهسازی مسئله است) به عنوان والد انتخاب میشوند، والدین به کمک یکی از روشهای ترکیب، باعث ایجاد افراد جدید میشوند. پس از اتمام، افراد با ویژگی خوب بیشتر (افراد برازندهتر) جایگزین افرادی که ویژگی خوب کمتری دارند میشوند و این فرآیند بارها و بارها تکرار میشود. حال به جای افراد، جوابهای دستیافتنی را قرار دهید. به این ترتیب این فرآیند ما را به یافتن جواب بهینه نزدیک و نزدیکتر میکند تا جایی که تولید نسل جدید، تغییر چندانی در بهتر شدن نتیجه ایجاد نمیکند. اینجا زمان توقف این الگوریتم بهینهسازی فراابتکاری است.
ازدحام ذرات (Particle Swarm Optimization)
الگوریتم ازدحام ذرات یا PSO بر اساس رفتار جمعی پرندههای در حال پرواز ایجاد شده است. این موضوع که مسیر پرندهها در هنگام پرواز تحت تأثیر رفتار سایر پرندگان است و در واقع جستجوی هر پرنده تحت تأثیر انبوه جمعیت است، مبنای شکلگیری این روش از بهینهسازی فراابتکاری است. الگوریتم به گونهای پیش میرود که هر ذره (پاسخ احتمالی) در هر لحظه مکان خود را در فضای کلی جستجو با در نظر گرفتن بهترین مکانی که تا الان تجربه کرده و همچنین با توجه به بهترین مکانی که اطرافش وجود دارد، تنظیم میکند.
کلونی مورچگان (Ant Colony Optimization)
ایده این الگوریتم از روشهای بهینهسازی فراابتکاری نیز با الهام از طبیعت شکل گرفته است. همانطور که میدانیم مورچهها در کلونی و به صورت گروهی زندگی میکنند و تلاش همه اعضا برای بقا و حفظ کلونی است. مورچهها برای یافتن غذا ابتدا به طور تصادفی به این سو و آن سو حرکت میکنند، پس از یافتن غذا به خانه بازمیگردند و در طی مسیر از خود فرومون (ماده شیمیایی ترشحشده از بدن حشرات) به جای میگذارند. مورچههای بعدی در جستجوهایشان با این آثار سفیدرنگ مواجه شده و مسیر خود را در آن مسیر ادامه میدهند. به این ترتیب مسیر منتهی به غذا پرتردد شده و همه به آن مسیر هدایت میشوند. البته فرومونها بعد از مدتی تبخیر میشوند و این موضوع کمک میکند همواره کوتاهترین مسیر قابل دید و استفاده باشد و در واقع کوتاهترین مسیر برای رسیدن به غذا به دست آید.
در الگوریتم کلونی مورچگان (ACO) همین تئوری پیادهسازی شده است، با این تفاوت که مورچههای مصنوعی روی نمودار (به کمک گرافها) در حال حرکت هستند و هدف یافتن کوتاهترین مسیر برای رسیدن به جواب مسئله است.
الگوریتم |
ویژگیهای اصلی |
کاربردها |
الگوریتم ژنتیک |
مبتنی بر جمعیت و فرایند زیستی موجودات |
نزدیک شدن تدریجی به جواب بهینه |
ازدحام ذرات |
مبتنی بر ذرات (پاسخهای احتمالی) |
جستجوی بهینه در فضای پیوسته الگوریتم ساده و سریع |
کلونی مورچگان |
الهام گرفته شده از مسیرهای حرکت مورچهها |
یافتن کوتاهترین مسیرها مناسب مسائل مسیریابی و ترکیبی |
مقدمات پیادهسازی الگوریتمها در MATLAB
متلب (MATLAB) به بیان خود سایت توسعهدهندهاش MathWorks.com هم یک نرمافزار، هم یک بستر برنامهنویسی و هم یک زبان برنامهنویسی است که برای اهداف بسیار ساده مانند محاسبات جبری خطی تا مسائل بسیار پیچیده به مهندسین شاخههای متفاوت مثل مکانیک، هوافضا، برق، کامپیوتر، عمران و ... و حتی محققین سایر رشتهها کمک میکند. در همین راستا، یکی از ابزارهای پرکاربرد برای اجرای فرآیندهای بهینهسازی همین برنامه است.
متلب دارای یک جعبهابزار مخصوص برای بهینهسازی است که با نام Optimization Toolbox شناخته میشود و برای مسائل مختلف بهینهسازی خطی و غیرخطی و همچنین روشهای بهینهسازی فراابتکاری مورد استفاده قرار میگیرد. به طور مثال، برای حل یک مسئله از طریق الگوریتم ژنتیک، MATLAB یک فرم مخصوص دارد که حتی شاید بدون تسلط ۱۰۰٪ بر تئوریهای پشت الگوریتم، با انتخاب تعداد جمعیت، اهداف، روش ترکیب و ... قادر هستید از این ابزار استفاده کنید. البته جدا از این تولباکس، با فراخوانی مستقیم خود توابع مربوط به الگوریتمها نیز میتوان حل را دنبال کرد. بنابراین مقدمات پیادهسازی الگوریتمها در MATLAB عبارتند از:
- استفاده از نرمافزار متلب (MATLAB) به عنوان یک زبان و بستر برنامهنویسی برای حل مسائل مختلف مهندسی و تحقیقاتی
- بهرهگیری از جعبهابزار Optimization Toolbox برای انجام فرآیندهای بهینهسازی
- به کارگیری Optimization Toolbox برای حل مسائل بهینهسازی خطی، غیرخطی و فراابتکاری
- استفاده از فرمهای مخصوص مانند فرم الگوریتم ژنتیک برای حل مسائل بهینهسازی بدون نیاز به تسلط کامل بر تئوری
- تعیین پارامترهایی مانند تعداد جمعیت، اهداف، روش ترکیب در فرم الگوریتم ژنتیک
- استفاده مستقیم از توابع مربوط به الگوریتمها بدون نیاز به تولباکس مخصوص برای حل مسائل بهینهسازی
جمعبندی
در نهایت، بهینهسازی علمی است که به کمک بشر آمده تا در کمترین زمان و با صرف کمترین انرژی به بهترین راهحلها و اهداف برسد. طبیعی است که انسانها در علوم مختلف تا به امروز برای بسیاری از مسائل و مشکلات راهحلهایی یافتهاند، اما اینکه بین این راهحلها کدام یک با کمترین هزینه به بیشترین بازدهی منتهی میشود، سوالی است که پاسخ آن در بهینهسازی به دست میآید. اگر به روشهای تحلیلی دقیق و یا روشهای تقریبی مانند بهینهسازی فراابتکاری و همچنین ابزارهایی مانند زبانهای برنامهنویسی مثل پایتون (Python) یا جعبهابزارهای موجود در متلب علاقه دارید، دورههای گروه آموزشی پارس پژوهان را از دست ندهید.
نویسنده: ستاره دهقان، کارشناس مهندسی هوافضا – رضا صفایی، کارشناس مدیریت صنعتی