الگوریتم ژنتیک

الگوریتم‌های ژنتیک، با توجه به کاربرد‌های متنوع خود در بین الگوریتم‌های تکاملی، محبوب‌ترین هستند. الگوریتم‌های ژنتیک، برای حل گستره وسیعی از مسائل بهینه‌سازی شناخته شده، به کار گرفته شده‌است. علاوه‌برین، الگوریتم‌های ژنتیک، مبتنی بر جمعیت هستند و بسیاری از الگوریتم‌های تکاملی جدید، به طور مستقیم بر پایه الگوریتم‌های ژنتیک هستند یا اینکه شباهت‌های زیادی به ‌این ‌الگوریتم‌ها دارند.

الگوریتم ژنتیک (GA)، توسط هالند و همکاران در سال ۱۹۶۰ توسعه داده شد. الگوریتم ارائه شده، یک مدل یا انتزاع از تکامل بیولوژیکی مبتنی بر تئوری داروین از انتخاب طبیعی است. هالند احتمالا اولین کسی بود که عملگر‌های برش و ترکیب، جهش و انتخاب را در مطالعه سیستم‌های تطبیقی و مصنوعی، به کار برده‌‌ است. این عملگر‌های ژنتیکی ( انتخاب، برش، جهش)، بخش اساسی الگوریتم ژنتیک به عنوان یک استراتژی برای حل مسئله است. تاکنون، انواع زیادی از الگوریتم‌های ژنتیک توسعه یافته‌است و برای طیف گسترده‌ای از مسائل بهینه‌سازی نظیر رنگ‌آمیزی گراف، تشخیص الگو و … به کار گرفته شده‌است.

الگوریتم‌های ژنتیک، دارای مزیت‌های فراوانی نسبت به سایر الگوریتم‌های بهینه‌سازی سنتی هستند. دو تا از برجسته‌ترین آن عبارتست از توانایی مقابله با مسائل پیچیده و موازی بودن. الگوریتم‌های ژنتیک، توانایی مقابله با انواع مختلف مسائل بهینه‌سازی با تابع هدف ثابت یا ناثابت، خطی یا غیر‌خطی و پیوسته یا گسسته را دارند. از آنجا که  فرزندان در جمعیت مانند عوامل مستقل عمل می‌کنند، جمعیت ( یا هر زیر گروهی از جمعیت) فضای جستجو را در بسیاری از جهات به طور همزمان، اکتشاف می‌کنند. این ویژگی، آن را ایده‌ال برای موازی‌سازی الگوریتم‌ها برای پیاده‌سازی می سازد.

با این حال، الگوریتم‌های ژنتیک دارای برخی معایب نیز هستند. فرموله کردن تابع برازندگی، اندازه جمعیت، انتخاب مناسب پارامترهای مهمی مانند نرخ جهش و نرخ برش و معیارهای انتخاب از جمعیت جدید، باید با دقت انجام شده باشد. انتخاب نامناسب این پارامترها منجر به واگرایی الگوریتم و تولید نتایج بی معنی خواهد شد. با وجود این معایب، الگوریتم‌های ژنتیک به همچنان به عنوان یکی از الگوریتم‌های پرکاربرد برای حل مسائل بهینه‌سازی غیرخطی باقی مانده است.

ذات الگوریتم ژنتیک (GA)، شامل رمزگذاری یک تابع بهینه‌سازی به عنوان آرایه‌ای از بیت‌ها برای نمایش کروموزوم‌ها، دستکاری رشته‌ها با عملگرهای ژنتیکی و انتخاب با توجه به برازندگی آنها با هدف پیدا کردن راه‌حل خوب برای مسئله در نظر‌گرفته‌شده است.

عملیات مذکور، اغلب توسط رویه زیر انجام می‌شود:

  1. رمزگذاری تابع هدف یا هزینه.
  2. تعریف تابع برازندگی یا معیار انتخاب.
  3. ایجاد جمعیت اولیه.
  4. انجام چرخه تکامل و یا تکرار با ارزیابی برازندگی تمام افراد جامعه، ایجاد جمعیت جدید با اعمال عملگرهای برش و جهش، تولید مثل متناسب با برازنگی و … ، و جایگزین کردن فرزندان جدید مناسب در جمعیت قدیمی و تکرار دوباره با استفاده از جمعیت جدید.
  5. رمزگشایی نتایج برای بدست آوردن راه‌حل مسئله.

این مراحل، به صورت شبه کدی از الگوریتم ژنتیک در ‏۲۱، نشان داده شده است.

کد متلب الگوریتم ؤنتیک را می توانید از لینک زیر دانلود کنید.

Genetic Algorithm Matlab Codes

دانلود

دیدگاه ها:



درج دیدگاه