مرداد
۳۰
۱۳۹۷

پیاده سازی یک مثال ساده از الگوریتم های ژنتیک

سلام به همه دوستان

در این پست قصد دارم یکی از برنامه هایی که در زمان دانشجویی نوشتم را به قصد استفاده آموزشی قرار بدم (البته اگر قابل باشه). این برنامه یکی از هیجان انگیزترین کدهایی است که در زمان دانشجویی نوشتم و پیاده سازی اون واقعا برام لذتبخش بود.

جوابدهی الگوریتم ژنتیک شبیه معجزه است و چون الگوی اون از طبیعت برداشت شده واقعا میشه قابل اجرا بودن نظریه تکامل موجودات رو با اون حس کرد. تا جاییکه من میدونم به طور کلی از الگوریتم ژنتیک در مسائلی که دامنه جستجوی بسیار بزرگی دارند و نتیجه تقریبی (و نه لزوما قطعی) میتونه جوابگوی مسئله ما باشه استفاده میشه.

متاسفانه چون حدود ۱۰ سال از زمانی که این کد را نوشتم میگذره جزئیات را کامل به خاطر ندارم اما در صورتیکه شما در حال سپری کردن درس هوش مصنوعی باشید یا به الگوریتم ژنتیک علاقمند باشید میتونید با خواندن کدها متوجه بخش های مختلف اون بشید. قسمت هایی مثل mutation و crossover را به صورت بیتی پیاده سازی کردم. هر بیت معرف یک ژن و هر بایت یک کروموزوم است. این بیت و بایت ها در فرایند های متعدد mutation و cross over با هم ترکیب میشن به شکلی که برنامه سعی در استفاده از نتایجی میکنه که به خواسته ما نزدیکتر است. به این ترتیب به مرور نسل های بهتری به وجود میان که میتونن جواب تقریبی مسئله ما باشن.

 

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

 

برای نمونه این برنامه سعی میکنه جواب ماکزیمم تابع sinc را به دست بیاره. تکه کد زیر روال کلی الگوریتم ژنتیک را پیاده سازی میکند:

متاسفانه بعد از این تجربه فرصت نشد نمونه های مهمتر و واقعی از این الگوریتم را پیاده سازی کنم اما به شخصه خیلی علاقه دارم در آینده یک نمونه واقعیتر در این باره پیاده سازی کنم. پیشنهاد میکنم که به جای دانلود فایل ها پروژه را توسط گیت کلون کنید و تغییرات خودتان را اعمال کنید و در صورتیکه اصلاحات یا تغییرات مفیدی در اون دادید با استفاده از گیت برای من merge request ارسال کنید تا به نام خودتون به پروژه اضافه بشه.

clone کردن پروژه: git clone https://gitlab.com/mohsenrsd/GeneticAlgorithmExampleInCpp.git

صفحه gitlab پروژه

موفق و سربلند باشید.

اشتراک گذاری این مطلب:

نوشته‌های مرتبط

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

برنامه‌نویس ++‏C/C‏ - برنامه‌نویس سیستم‌های گرافیکی با استفاده از کتابخانه ‏OpenGL - برنامه‌نویس #‏C و ..‏



فرستادن دیدگاه