آشنائی با الگوریتمهای ژنتیک
همانطور که گفتیم یکی از شاخههای پردازش تکاملی، الگوریتمهای ژنتیک میباشد. این الگوریتمها با الهام از روند تکاملی طبیعت، مسائل را حل میکنند. به این معنی که مانند طبیعت یک جمعیت از موجودات تشکیل میدهند و درون این موجودات اقدام به انجام اعمالی چون انتخاب والدین، تولید مثل، جهش و ... میکنند و این اعمال را آنقدر تکرار میکنند تا به مجموعه بهینه و یا موجود بهینه برسند.
این الگوریتمها با توجه به خصوصیات خاصی که دارند، به خوبی از عهده حل مسائلی که نیاز به بهینهسازی دارند و یا پارامترهای زیادی در آنها دخیل است، برمیآیند. در این قسمت به معرفی این الگوریتمها میپردازیم.
تشریح ساختار الگوریتمهای ژنتیک
روند اجرای الگوریتم های ژنتیک به صورت زیر است:
انتخاب والدین
همانطور که میبینید، برای حل یک مساله با استفاده از الگوریتمهای ژنتیک بایستی مراحل زیر را طی کنیم:
1. مدل سازی مساله یا بازنمائی
2. تشکیل جمعیت اولیه
3. ارزیابی جمعیت
4. انتخاب والدین
5. بازترکیبی
6. جهش
7. انتخاب فرزندان
8. شرط خاتمه الگوریتم
در ادامه به تشریح هر یک از قسمتهای این الگوریتمها میپردازیم.
مدلسازی مساله یا بازنمائی
بر خلاف بسیاری از روشهای حل مساله که از همان فرم کلی مساله برای حل مساله استفاده میکنند، برای اینکه بتوانیم یک مساله را بوسیله الگوریتمهای ژنتیک حل کنیم، بایستی آنرا به فرم مخصوص مورد نیاز این الگوریتمها تبدیل کنیم.
در این روند ما بایستی راه حل مورد نیاز مساله را به گونهای تعریف کنیم که قابل نمایش بوسیله یک کروموزوم باشد. این کروموزوم میتواند یک آرایه از اعداد، رشتهها و یا بیتها باشد، یا اینکه یک عدد طبیعی، یا حقیقی و ... باشد. اما به طور کلی بایستی به گونهای تعریف شود که بتوانیم عملگرهای خاص الگوریتمهای ژنتیک که بازترکیبی، جهش و ارزیابی هستند را برروی کروموزومها تعریف و اعمال کنیم.
به عنوان مثال در یک مساله مرتب سازی، کروموزوم را میتوانیم به این شکل تعریف کنیم که بعنوان مثال از چپ به راست، اندیس عناصر از کوچک به بزرگ را نگهداری کند. که در این حالت سمت چپترین عنصر، اندیس کوچکترین و سمت راستترین عنصر، اندیس بزرگترین عنصر آرایه باشد.
اینکه مساله خود را چگونه بازنمائی کنیم بسیار مهم است، چرا که یک بازنمائی خوب میتواند سرعت پیدا شدن جواب را افزایش دهد. علاوه بر اینکه در میزان مصرف حافظه و سرعت اعمال عملگرهای ژنتیک تاثیر فراوانی دارد. علت این امر نیز این است که هر یک از عملگرهای ژنتیک بایستی هزاران بار، در طول اجرای الگوریتم بر روی کروموزومهای مختلف اعمال شوند.
اینکه چه نوع بازنمائی را برای مساله استفاده شود، به شخص طراح و فرم مساله بستگی دارد. در زیر چند نمونه از بازنمائیهایی را که معمولاً استفاده میشوند را تعریف میکنیم:
< >اعداد صحیحرشتههای بیتی اعداد حقیقی در فرم نقطه شناوراعداد حقیقی به فرم رشته های بیتییک مجموعه از اعداد حقیقی یا صحیحماشینهای حالت محدودهر فرم دیگری که بتوانیم عملگرهای ژنتیک را بر روی آنها تعریف کنیم
تشکیل جمعیت اولیه
بعد از اینکه شکل کروموزومها را تعریف نمودیم، بایستی جمعیتی را تشکیل دهیم، که میخواهیم عناصر آنرا تکامل دهیم. تعداد عناصر موجود در این جمعیت معمولاً ثابت است. به این معنی که هنگامی که تعدادی عنصر در جریان تولید مثل به این جمعیت اضافه میکنیم، بایستی به همین تعداد عنصر نیز از جمعیت قبلی حذف کنیم.
قبل از اینکه الگوریتم بتواند آغاز به کار کند، بایستی یک جمعیت اولیه از کروموزومها تشکیل بدهیم. در اکثر الگوریتمها این جمعیت اولیه به صورت تصادفی تشکیل میشود. به این معنی که به اندازه طول جمعیت، کروموزوم تصادفی ایجاد میکنیم و آنها را به جمعیت اولیه اضافه میکنیم.
البته برای اینکه الگوریتم سریعتر به جواب برسد، میتوانیم بوسیله یکی از الگوریتمهای کم هزینه تعدادی از جوابهای تقریباً بهینه را محاسبه کرده و از آنها بعنوان جمعیت اولیه استفاده میکنیم. دیده شده است که در بعضی مسائل انجام این عمل تاثیر بسزائی در سرعت همگرائی الگوریتم دارد. البته نباید فراموش کنیم که انجام این عمل در مواردی باعث می شود، الگوریتم در مینیممهای محلی ناشی از جمعیت آغازی گیر افتاده و نتواند جوابهای بهتری را پیدا کند. برای جلوگیری از این مشکل علاوه بر جوابهای بهینه پیدا شده، تعدادی عنصر نیز به صورت تصادفی به جمعیت اضافه میکنیم.
ارزیابی جمعیت
برای اینکه بتوانیم موجودات بهتر را درون جمعیت تشخیص بدهیم بایستی معیاری را تعریف کنیم که بر اساس آن موجودات بهتر را تشخیص دهیم.
به این کار، یعنی تعیین میزان خوبی یک موجود، ارزیابی آن موجود میگویند. ارزیابی، اینگونه است که بر حسب اینکه موجود چقدر خوب است یک عدد به آن نسبت میدهیم، این عدد که برای موجودات بهتر بزرگتر (یا کوچکتر) است را شایستگی آن موجود مینامیم.
به عنوان مثال در صورتی که به دنبال مینیمم یک تابع هستیم، مقدار شایستگی را میتوانیم مقدار خروجی تابع به ازای ورودی مشخص باشد. همانطور که میبینید، هدف ما پیدا کردن مینیمم تابع است، پس ورودیهایی که مقادیر تابع برای آنها کمتر است، ورودیهای بهتری هستند.
بسته به نوع مساله ما میخواهیم شایستگی را بیشینه و یا کمینه کنیم. البته معمولاً در مطالعات تئوری فرض بر این گذاشته میشود که میخواهیم مقدار شاسیتگی را کمینه کنیم.
در مطالب این فصل تعاریف به گونهای ارائه شدهاند که در آنها سعی در مینیمم کردن یک تابع داریم، اما شایستگی عناصر به گونهای تعریف شده است که برای عناصر کوچکتر، مقادیر بزرگتری ارائه میدهد.
انتخاب والدین
در هر نسل تعدادی از عناصر جمعیت این فرصت را پیدا میکنند که تولید مثل کنند. به این عناصر که از میان جمعیت انتخاب میشوند، والدین میگویند. روشهای مختلفی برای انتخاب والدین وجود دارند. در زیر به چند مورد از این روشها اشاره میکنیم:
< >انتخاب تمام جمعیت بعنوان والدین: در واقع هیچگونه انتخابی انجام نمیدهیم.انتخاب تصادفی: بصورت تصادفی تعدادی از موجودات جمعیت را بعنوان والدین انتخاب میکنیم، این انتخاب میتواند با جایگذاری یا بدون جایگذاری باشد.روشهای مبتنی بر شایستگی: در این روشها عناصر با شایستگی بیشتر شانس بیشتری برای انتخاب شدن بعنوان والدین را دارند. سایر روشها: این روشها با استفاده از تکنیکهایی سعی میکنند که انتخابهایی را ارائه دهند، که هم رسیدن به جواب نهایی را تسریع کنند و هم اینکه کمک میکنند که جواب بهینهتری پیدا شود.باز ترکیبی (Recombination)
همانطور که میدانیم یک کروموزوم در طبیعت از تعداد زیادی ژن تشکیل شده است، که یک ژن یا ترکیبی از این ژنها یکی از خصوصیات موجود را معرفی مینمایند. بعنوان مثال یک ژن رنگ چشم، ژن دیگر شکل چشم و ... را نشان میدهند.
در حین عملیات تشکیل سلول تخم، کروموزومهای والدین با یکدیگر ترکیب میشوند و کروموزومهای جدیدی را بوجود میآورند، در جریان این کار به صورت اتفاقی بخشهایی از کروموزومها با یکدیگر عوض میشوند. این موضوع باعث میشود که فرزندان ترکیبی از خصوصیات والدین خود را به همراه داشته باشند و دقیقاً مشابه یکی از والدین نباشند.
(نمودار و تصاویر در فایل اصلی موجود است)