الگوریتم ژنتیک
مقدمه
هنگامی که لغت تنازع بقا به کار میرود اغلب بار ارزشی منفی آن به ذهن میآید. شاید همزمان قانون جنگل به ذهن برسد و حکم بقای قویترها!
البته همیشه هم قویترینها برنده نبودهاند. مثلاً دایناسورها با وجود جثه عظیم و قویتر بودن در طی روندی کاملاً طبیعی بازیِ بقا و ادامه نسل را واگذار کردند در حالی که موجوداتی بسیار ضعیفتر از آنها حیات خویش را ادامه دادند. ظاهراً طبیعت، بهترینها را تنها بر اساس هیکل انتخاب نمیکند! در واقع درستتر آنست که بگوییم طبیعت مناسب ترینها (Fittest) را انتخاب میکند نه بهترینها.
قانون انتخاب طبیعی بدین صورت است که تنها گونههایی از یک جمعیت ادامه نسل میدهند که بهترین خصوصیات را داشته باشند و آنهایی که این خصوصیات را نداشته باشند به تدریج و در طی زمان از بین میروند.
الگوریتم های ژنتیک یکی از الگوریتم های جستجوی تصادفی است که ایده آن برگرفته از طبیعت می باشد . الگوریتم های ژنتیک برای روش های کلاسیک بهینه سازی در حل مسائل خطی، محدب و برخی مشکلات مشابه بسیار موفق بوده اند ولی الگوریتم های ژنتیک برای حل مسایل گسسته و غیر خطی بسیار کاراتر می باشند.به عنوان مثال می توان به مسئله فروشنده دوره گرد اشاره کرد . در طبیعت از ترکیب کروموزوم های بهتر ، نسل های بهتری پدید می آیند . در این بین گاهی اوقات جهش هایی نیز در کروموزوم ها روی می دهد که ممکن است باعث بهتر شدن نسل بعدی شوند. الگوریتم ژنتیک نیز با استفاده از این ایده اقدام به حل مسائل می کند . روند استفاده از الگوریتم های ژنتیک به صورت زیر می باشد: الف) معرفی جواب های مسیله به عنوان کروموزوم ب) معرفی تابع فیت نس ج) جمع آوری اولین جمعیت د) معرفی عملگر های انتخاب ه) معرفی عملگر های تولید مثل در الگوریتم های ژنتیک ابتدا به طور تصادفی یا الگوریتمیک ، چندین جواب برای مسئله تولید می کنیم . این مجموعه جواب را جمعیت اولیه می نامیم . هر جواب را یک کروموزوم می نامیم . سپس با استفاده از عملگرهای الگوریتم ژنتیک پس از انتخاب کروموزوم های بهتر ، کروموزوم ها را باهم ترکیب کرده و جهشی در آنها ایجاد می کنیم . در نهایت نیز جمعیت فعلی را با جمعیت جدیدی که از ترکیب و جهش در کروموزوم ها حاصل می شود ، ترکیب می کنیم .
مثلا فرض کنید گونه خاصی از افراد، هوش بیشتری از بقیه افرادِ یک جامعه یا کولونی دارند. در شرایط کاملاً طبیعی، این افراد پیشرفت بهتری خواهند کرد و رفاه نسبتاً بالاتری خواهند داشت و این رفاه، خود باعث طول عمر بیشتر و باروری بهتر خواهد بود (توجه کنید شرایط، طبیعیست نه در یک جامعه سطح بالا با ملاحظات امروزی؛ یعنی طول عمر بیشتر در این جامعه نمونه با زاد و ولد بیشتر همراه است). حال اگر این خصوصیت (هوش) ارثی باشد بالطبع در نسل بعدی همان جامعه تعداد افراد باهوش به دلیل زاد و ولد بیشترِ اینگونه افراد، بیشتر خواهد بود. اگر همین روند را ادامه دهید خواهید دید که در طی نسلهای متوالی دائماً جامعه نمونه ما باهوش و باهوشتر میشود. بدین ترتیب یک مکانیزم ساده طبیعی توانسته است در طی چند نسل عملاً افراد کم هوش را از جامعه حذف کند علاوه بر اینکه میزان هوش متوسط جامعه نیز دائماً در حال افزایش است.
بدین ترتیب میتوان دید که طبیعت با بهرهگیری از یک روش بسیار ساده (حذف تدریجی گونههای نامناسب و در عین حال تکثیر بالاتر گونههای بهینه)، توانسته است دائماً هر نسل را از لحاظ خصوصیات مختلف ارتقاء بخشد.
البته آنچه در بالا ذکر شد به تنهایی توصیف کننده آنچه واقعاً در قالب تکامل در طبیعت اتفاق میافتد نیست. بهینهسازی و تکامل تدریجی به خودی خود نمیتواند طبیعت را در دسترسی به بهترین نمونهها یاری دهد. اجازه دهید تا این مسأله را با یک مثال شرح دهیم:
پس از اختراعاتومبیل به تدریج و در طی سالها اتومبیلهای بهتری با سرعتهای بالاتر و قابلیتهای بیشتر نسبت به نمونههای اولیه تولید شدند. طبیعیست که این نمونههای متأخر حاصل تلاش مهندسان طراح جهت بهینهسازی طراحیهای قبلی بودهاند. اما دقت کنید که بهینهسازی یک اتومبیل، تنها یک "اتومبیل بهتر" را نتیجه میدهد.
اما آیا میتوان گفت اختراع هواپیما نتیجه همین تلاش بوده است؟ یا فرضاً میتوان گفت فضاپیماها حاصل بهینهسازی طرح اولیه هواپیماها بودهاند؟
پاسخ اینست که گرچه اختراع هواپیما قطعاً تحت تأثیر دستاورهای صنعت اتومبیل بوده است؛ اما بههیچ وجه نمیتوان گفت که هواپیما صرفاً حاصل بهینهسازی اتومبیل و یا فضاپیما حاصل بهینهسازی هواپیماست. در طبیعت هم عیناً همین روند حکمفرماست. گونههای متکاملتری وجود دارند که نمیتوان گفت صرفاً حاصل تکامل تدریجی گونه قبلی هستند.
در این میان آنچه شاید بتواند تا حدودی ما را در فهم این مسأله یاری کند مفهومیست به نام تصادف یا جهش.
به عبارتی طرح هواپیما نسبت به طرح اتومبیل یک جهش بود و نه یک حرکت تدریجی. در طبیعت نیز به همین گونهاست. در هر نسل جدید بعضی از خصوصیات به صورتی کاملاً تصادفی تغییر مییابند سپس بر اثر تکامل تدریجی که پیشتر توضیح دادیم در صورتی که این خصوصیت تصادفی شرایط طبیعت را ارضا کند حفظ میشود در غیر اینصورت به شکل اتوماتیک از چرخه طبیعت حذف میگردد.
در واقع میتوان تکامل طبیعی را به اینصورت خلاصه کرد: جستوجوی کورکورانه (تصادف یا Blind Search) + بقای قویتر.
حال ببینیم که رابطه تکامل طبیعی با روشهای هوش مصنوعی چیست. هدف اصلی روشهای هوشمندِ به کار گرفته شده در هوش مصنوعی، یافتن پاسخ بهینه مسائل مهندسی است. بعنوان مثال اینکه چگونه یک موتور را طراحی کنیم تا بهترین بازدهی را داشته باشد یا چگونه بازوهای یک ربات را متحرک کنیم تا کوتاهترین مسیر را تا مقصد طی کند (دقت کنید که در صورت وجود مانع یافتن کوتاهترین مسیر دیگر به سادگی کشیدن یک خط راست بین مبدأ و مقصد نیست) همگی مسائل بهینهسازی هستند.
روشهای کلاسیک ریاضیات دارای دو اشکال اساسی هستند. اغلب این روشها نقطه بهینه محلی (Local Optima) را بعنوان نقطه بهینه کلی در نظر میگیرند و نیز هر یک از این روشها تنها برای مسأله خاصی کاربرد دارند. این دو نکته را با مثالهای سادهای روشن میکنیم.
بهینه محلی و بهینه کلی
به شکل زیر توجه کنید. این منحنی دارای دو نقطه ماکزیمم میباشد. که یکی از آنها تنها ماکزیمم محلی است. حال اگر از روشهای بهینهسازی ریاضی استفاده کنیم مجبوریم تا در یک بازه بسیار کوچک مقدار ماکزیمم تابع را بیابیم. مثلاً از نقطه 1 شروع کنیم و تابع را ماکزیمم کنیم. بدیهی است اگر از نقطه 1 شروع کنیم تنها به مقدار ماکزیمم محلی دست خواهیم یافت و الگوریتم ما پس از آن متوقف خواهد شد. اما در روشهای هوشمند، به ویژه الگوریتم ژنتیک بدلیل خصلت تصادفی آنها حتی اگر هم از نقطه 1 شروع کنیم باز ممکن است در میان راه نقطه A به صورت تصادفی انتخاب شود که در این صورت ما شانس دستیابی به نقطه بهینه کلی (Global Optima) را خواهیم داشت.
در مورد نکته دوم باید بگوییم که روشهای ریاضی بهینهسازی اغلب منجر به یک فرمول یا دستورالعمل خاص برای حل هر مسئله میشوند. در حالی که روشهای هوشمند دستورالعملهایی هستند که به صورت کلی میتوانند در حل هر مسئلهای به کار گرفته شوند. این نکته را پس از آشنایی با خود الگوریتم بیشتر و بهتر خواهید دید.
الگوریتم ژنتیک چیست؟
الگوریتمهای ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده میکنند. الگوریتمهای ژنتیک اغلب گزینه خوبی برای تکنیکهای پیشبینی بر مبنای رگرسیون هستند.
برای مثال اگر بخواهیم نوسانات قیمت نفت را با استفاده از عوامل خارجی و ارزش رگرسیون خطی ساده مدل کنیم، این فرمول را تولید خواهیم کرد : قیمت نفت در زمان t = ضریب 1 نرخ بهره در زمان t + ضریب 2 نرخ بیکاری در زمان t + ثابت 1 . سپس از یک معیار برای پیدا کردن بهترین مجموعه ضرایب و ثابتها جهت مدل کردن قیمت نفت استفاده خواهیم کرد. در این روش 2 نکته اساسی وجود دارد. اول این که روش خطی است و مسئله دوم این است که ما به جای اینکه در میان "فضای پارامترها" جستجو کنیم، پارامترهای مورد استفاده را مشخص کردهایم.
با استفاده از الگوریتمهای ژنتیک ما یک ابر فرمول یا طرح، تنظیم میکنیم که چیزی شبیه "قیمت نفت در زمان t تابعی از حداکثر 4 متغیر است" را بیان میکند. سپس دادههایی برای گروهی از متغیرهای مختلف، شاید در حدود 20 متغیر فراهم خواهیم کرد. سپس الگوریتم ژنتیک اجرا خواهد شد که بهترین تابع و متغیرها را مورد جستجو قرار میدهد. روش کار الگوریتم ژنتیک به طور فریبندهای ساده، خیلی قابل درک و به طور قابل ملاحظهای روشی است که ما معتقدیم حیوانات آنگونه تکامل یافتهاند. هر فرمولی که از طرح داده شده بالا تبعیت کند فردی از جمعیت فرمولهای ممکن تلقی میشود.
متغیرهایی که هر فرمول دادهشده را مشخص میکنند به عنوان یکسری از اعداد نشان دادهشدهاند که معادلدی.ان.ای آن فرد را تشکیل میدهند.
موتور الگوریتم ژنتیک یک جمعیت اولیه از فرمول ایجاد میکند. هر فرد در برابر مجموعهای از دادههای مورد آزمایش قرار میگیرند و مناسبترین آنها (شاید 10 درصد از مناسبترینها) باقی میمانند؛ بقیه کنار گذاشته میشوند. مناسبترین افراد با هم جفتگیری (جابجایی عناصر دی ان ای) و تغییر (تغییر تصادفی عناصر دی ان ای) کردهاند. مشاهده میشود که با گذشت از میان تعداد زیادی از نسلها، الگوریتم ژنتیک به سمت ایجاد فرمولهایی که دقیقتر هستند، میل میکنند. در حالی که شبکههای عصبی هم غیرخطی و غیرپارامتریک هستند، جذابیت زیاد الگوریتمهای ژنتیک این است نتایج نهایی قابل ملاحظهترند. فرمول نهایی برای کاربر انسانی قابل مشاهده خواهد بود، و برای ارائه سطح اطمینان نتایج میتوان تکنیکهای آماری متعارف را بر روی این فرمولها اعمال کرد. فناوری الگوریتمهای ژنتیک همواره در حال بهبود است و برای مثال با مطرح کردن معادله ویروسها که در کنار فرمولها و برای نقض کردن فرمولهای ضعیف تولید میشوند و در نتیجه جمعیت را کلاً قویتر میسازند.
مختصراً گفته میشود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامهنویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده میکند. مسئلهای که باید حل شود ورودی است و راه حلها طبق یک الگو کدگذاری میشوند که تابع fitness نام دارد و هر راه حل کاندید را ارزیابی میکند که اکثر آنها به صورت تصادفی انتخاب میشوند.
الگوریتم ژنتیک (GA) یک تکنیک جستجو در علم رایانه برای یافتن راه حل بهینه و مسائل جستجو است. الگوریتمهای ژنتیک یکی از انواع الگوریتمهای تکاملیاند که از علم زیستشناسی مثل وراثت، جهش، انتخاب ناگهانی(زیستشناسی)، انتخاب طبیعی و ترکیب الهام گرفته شده.
عموماً راهحلها به صورت 2 تایی 0 و 1 نشان داده میشوند، ولی روشهای نمایش دیگری هم وجود دارد. تکامل از یک مجموعه کاملاً تصادفی از موجودیتها شروع میشود و در نسلهای بعدی تکرار میشود. در هر نسل، مناسبترینها انتخاب میشوند نه بهترینها.
یک راهحل برای مسئله مورد نظر، با یک لیست از پارامترها نشان داده میشود که به آنها کروموزوم یا ژنوم میگویند. کروموزومها عموماً به صورت یک رشته ساده از دادهها نمایش داده میشوند، البته انواع ساختمان دادههای دیگر هم میتوانند مورد استفاده قرار گیرند. در ابتدا چندین مشخصه به صورت تصادفی برای ایجاد نسل اول تولید میشوند. در طول هر نسل، هر مشخصه ارزیابی میشود وارزش تناسب (fitness) توسط تابع تناسب اندازهگیری میشود.
گام بعدی ایجاد دومین نسل از جامعه است که بر پایه فرآیندهای انتخاب، تولید از روی مشخصههای انتخاب شده با عملگرهای ژنتیکی است: اتصال کروموزومها به سر یکدیگر و تغییر.
برای هر فرد، یک جفت والد انتخاب میشود. انتخابها به گونهایاند که مناسبترین عناصر انتخاب شوند تا حتی ضعیفترین عناصر هم شانس انتخاب داشته باشند تا از نزدیک شدن به جواب محلی جلوگیری شود. چندین الگوی انتخاب وجود دارد: چرخ منگنهدار(رولت)، انتخاب مسابقهای (Tournament) ،... .
معمولاً الگوریتمهای ژنتیک یک عدد احتمال اتصال دارد که بین 0.6 و 1 است که احتمال به وجود آمدن فرزند را نشان میدهد. ارگانیسمها با این احتمال دوباره با هم ترکیب میشوند. اتصال 2 کروموزوم فرزند ایجاد میکند، که به نسل بعدی اضافه میشوند. این کارها انجام میشوند تا این که کاندیدهای مناسبی برای جواب، در نسل بعدی پیدا شوند. مرحله بعدی تغییر دادن فرزندان جدید است. الگوریتمهای ژنتیک یک احتمال تغییر کوچک و ثابت دارند که معمولاً درجهای در حدود 0.01 یا کمتر دارد. بر اساس این احتمال، کروموزومهای فرزند به طور تصادفی تغییر میکنند یا جهش مییابند، مخصوصاً با جهش بیتها در کروموزوم ساختمان دادهمان.
این فرآیند باعث به وجود آمدن نسل جدیدی از کروموزومهایی میشود، که با نسل قبلی متفاوت است. کل فرآیند برای نسل بعدی هم تکرار میشود، جفتها برای ترکیب انتخاب میشوند، جمعیت نسل سوم به وجود میآیند و .... این فرآیند تکرار میشود تا این که به آخرین مرحله برسیم.
شرایط خاتمه الگوریتمهای ژنتیک عبارتند از:
- به تعداد ثابتی از نسلها برسیم.
- بودجه اختصاص دادهشده تمام شود(زمان محاسبه/پول).
- یک فرد(فرزند تولید شده) پیدا شود که مینیمم (کمترین) ملاک را برآورده کند.
- بیشترین درجه برازش فرزندان حاصل شود یا دیگر نتایج بهتری حاصل نشود.
- بازرسی دستی.
- ترکیبهای بالا.
روش های نمایش
قبل از این که یک الگوریتم ژنتیک برای یک مسئله اجرا شود، یک روش برای کد کردن ژنومها به زبان کامپیوتر باید به کار رود. یکی از روشهای معمول کد کردن به صورت رشتههای باینری است: رشتههای 0و1. یک راه حل مشابه دیگر کدکردن راه حلها در آرایهای از اعداد صحیح یا اعشاری است، که دوباره هر جایگاه یک جنبه از ویژگیها را نشان میدهد. این راه حل در مقایسه با قبلی پیچیدهتر و مشکلتر است. مثلاً این روش توسط استفان کرمر، برای حدس ساختار 3 بعدی یک پروتئین موجود در آمینو اسیدها استفاده شد. الگوریتمهای ژنتیکی که برای آموزش شبکههای عصبی استفاده میشوند، از این روش بهره میگیرند.
سومین روش برای نمایش صفات در یک GA یک رشته از حروف است، که هر حرف دوباره نمایش دهنده یک خصوصیت از راه حل است.
خاصیت هر 3تای این روشها این است که آنها تعریف سازندهایی را که تغییرات تصادفی در آنها ایجاد میکنند را آسان میکنند: 0 را به 1 وبرعکس، اضافه یا کم کردن ارزش یک عدد یا تبدیل یک حرف به حرف دیگر.
توضیحات بالا در شکل قابل مشاهده است
یک روش دیگر که توسط John Koza توسعه یافت، برنامهنویسی ژنتیک (genetic programming)است. که برنامهها را به عنوان شاخههای داده در ساختار درخت نشان میدهد. در این روش تغییرات تصادفی میتوانند با عوض کردن عملگرها یا تغییر دادن ارزش یک گره داده شده در درخت، یا عوض کردن یک زیر درخت با دیگری به وجود آیند.
عملگرهای یک الگوریتم ژنتیک
در هر مسئله قبل از آنکه بتوان الگوریتم ژنتیک را برای یافتن یک پاسخ به کار برد به دو عنصر نیاز است:در ابتدا روشی برای ارائه یک جواب به شکلی که الگوریتم ژنتیک بتواند روی آن عمل کند لازم است. در روش سنتی یک جواب به صورت یک رشته از بیتها، اعداد یا نویسهها نمایش داده میشود.دومین جزء اساسی الگوریتم ژنتیک روشی است که بتواند کیفیت هر جواب پیشنهاد شده را با استفاده از توابع تناسب محاسبه نماید. مثلاً اگر مسئله هر مقدار وزن ممکن را برای یک کوله پشتی مناسب بداند بدون اینکه کوله پشتی پاره شود، (مسئله کوله پشتی را ببینید) یک روش برای ارائه پاسخ میتواند به شکل رشته ای از بیتهای ۰ و۱ در نظر گرفته شود، که ۱ یا ۰ بودن نشانه اضافه شدن یا نشدن وزن به کوله پشتی است.تناسب پاسخ، با تعیین وزن کل برای جواب پیشنهاد شده اندازه گیری میشود.
شبه کد
1 Genetic Algorithm
2 begin
3 Choose initial population
4 repeat
5 Evaluate the individual fit nesses of a certain proportion of the population
6 Select pairs of best-ranking individuals to reproduce
7 Apply crossover operator
8 Apply mutation operator
9 until terminating condition
10 end
شمای کلی شبه کد
ایده اصلی
در دهه هفتاد میلادی دانشمندی از دانشگاه میشیگان به نام جان هلند ایده استفاده از الگوریتم ژنتیک را در بهینهسازیهای مهندسی مطرح کرد. ایده اساسی این الگوریتم انتقال خصوصیات موروثی توسط ژنهاست. فرض کنید مجموعه خصوصیات انسان توسط کروموزومهای او به نسل بعدی منتقل میشوند. هر ژن در این کروموزومها نماینده یک خصوصیت است. بعنوان مثال ژن 1 میتواند رنگ چشم باشد، ژن 2 طول قد، ژن 3 رنگ مو و الی آخر. حال اگر این کروموزوم به تمامی، به نسل بعد انتقال یابد، تمامی خصوصیات نسل بعدی شبیه به خصوصیات نسل قبل خواهد بود. بدیهیست که در عمل چنین اتفاقی رخ نمیدهد. در واقع بصورت همزمان دو اتفاق برای کروموزومها میافتد. اتفاق اول جهش (Mutation) است. "جهش" به این صورت است که بعضی ژنها بصورت کاملاً تصادفی تغییر میکنند. البته تعداد این گونه ژنها بسیار کم میباشد اما در هر حال این تغییر تصادفی همانگونه که پیشتر دیدیم بسیار مهم است. مثلاً ژن رنگ چشم میتواند بصورت تصادفی باعث شود تا در نسل بعدی یک نفر دارای چشمان سبز باشد. در حالی که تمامی نسل قبل دارای چشم قهوهای بودهاند. علاوه بر "جهش" اتفاق دیگری که میافتد و البته این اتفاق به تعداد بسیار بیشتری نسبت به "جهش" رخ میدهد چسبیدن دو کروموزوم از طول به یکدیگر و تبادل برخی قطعات بین دو کروموزوم است. این مسأله با نام Crossover شناخته میشود. این همان چیزیست که باعث میشود تا فرزندان ترکیب ژنهای متفاوتی را (نسبت به والدین خود) به فرزندان خود انتقال دهند.
روش های انتخاب
روشهای مختلفی برای الگوریتمهای ژنتیک وجود دارند که میتوان برای انتخاب ژنومها از آنها استفاده کرد. اما روشهای لیست شده در پایین از معمولترین روشها هستند.
انتخاب Elitist
مناسبترین عضو هر اجتماع انتخاب میشود.Elitist Selection
انتخاب Roulette
یک روش انتخاب است که در آن عنصری که عدد برازش (تناسب) بیشتری داشته باشد، انتخاب میشود. در واقع به نسبت عدد برازش براي هر عنصر يك احتمال تجمعي نسبت ميدهيم و با اين احتمال است كه شانس انتخاب هر عنصر تعيين مي شود.
انتخاب Scaling
به موازات افزایش متوسط عدد برازش جامعه، سنگینی انتخاب هم بیشتر میشود و جزئیتر. این روش وقتی کاربرد دارد که مجموعه دارای عناصری باشد که عدد برازش بزرگی دارند و فقط تفاوتهای کوچکی آنها را از هم تفکیک میکند.Scaling Selection
انتخاب Tournament
یک زیر مجموعه از صفات یک جامعه انتخاب میشوند و اعضای آن مجموعه با هم رقابت میکنند و سرانجام فقط یک صفت از هر زیرگروه برای تولید انتخاب میشوند.Tournament Selection
بعضی از روشهای دیگر عبارتند از:Hierarchical Selection, Steady-State Selection, Rank Selection, Tournament Selection
مثال عملی
در این مثال می خواهیم مسئله ی ۸ وزیر را بوسیله ی این الگوریتم حل کنیم . هدف مشخص کردن چیدمانی از ۸ وزیر در صفحه ی شطرنج است به نحوی که هیچ یک همدیگر را تهدید نکند. ابتدا باید نسل اولیه را تولید کنیم . صفحه شطرنج ۸ در ۸ را در نظر بگیرید. ستونها را با اعداد ۰ تا ۷ و سطرها را هم از ۰ تا ۷ مشخص می کنیم . برای تولید حالات ( کروموزومها ) اولیه بصورت تصادفی وزیرها را در ستونهای مختلف قرار می دهیم . باید در نظر داشت که وجود نسل اولیه با شرایط بهتر سرعت رسیدن به جواب را افزایش می دهد ( اصالت نژاد ) به همین خاطر وزیر i ام را در خانهی تصادفی در ستون i ام قرار می دهیم ( به جای اینکه هر مهره ای بتواند در هر خانه خالی قرار بگیرد ). با اینکار حداقل از برخورد ستونی وزیرها جلوگیری می شود. توضیح بیشتر اینکه مثلا وزیر اول را بطور تصادفی در خانه های ستون اول که با ۰ مشخص شده قرار می دهیم تا به اخر. i=۰.....۷ حال باید این حالت را به نحوی کمی مدل کرد . چون در هر ستون یک وزیر قرار دادیم هر حالت را بوسیله ی رشته اعدادی که عدد k ام در این رشته شماره ی سطر وزیر موجود در ستون i ام را نشان می دهد. یعنی یک حالت که انتخاب کردیم میتواند بصورت زیر باشد: ۶۷۲۰۳۴۲۲ که ۶ شماره ی سطر ۶ است که وزیر اول که شمارهی ستونش ۰ است می باشد تا اخر. فرض کنید ۴ حالت زیر به تصادف تولید شدهاند.این چهار حالت را بعنوان کروموزومهای اولیه بکار می گیریم.
- ) ۶۷۲۰۳۴۲۲
- ) ۷۰۰۶۳۳۵۴
- ) ۱۷۵۲۲۰۶۳
- )۴۳۶۰۲۴۷۱
حال نوبت به تابع برازش fitness function می رسد. تابعی را که در نظر می گیریم تابعی است که برای هر حالت تعداد برخوردها ( تهدیدها )را در نظر می گیرد . هدف صفر کردن یا حداقل کردن این تابع است . پس احتمال انتخاب کروموزومی برای تولید نسل بیشتر است که مقدار محاسبه شده توسط تابع برازش برای آن کمتر باشد.( روشهای دیگری نیز برای انتخاب وجود دارد ) مقدار برازش برای حالات اولیه بصورت زیر می باشد : ( مقدار عدد برازش در جلوی هر کروموزوم( با رنگ قرمز )همان تعداد برخوردهای وزیران می باشد )
- ) ۶۷۲۰۳۴۲۰ ۶
- )۷۰۰۶۳۳۵۴ ۸
- )۱۷۵۲۲۰۶۳ ۲
- ) ۴۳۶۰۲۴۷۱ ۴
پس احتمالها بصورت زیر است :
p(۳)>p(۴)>p(۱)>p(۲
در اینجا کروموزومهایی را انتخاب می کنیم که برازندگی کمتری دارند.پس کروموزوم ۳ برای crossover با کروموزومهای ۴ و ۱ انتخاب می شود . نقطه ی ترکیب را بین ارقام 6 و 7 در نظر می گیریم.
۴و۳ :
- ) ۷۱ ۱۷۵۲۲۰
- )۶۳ ۴۳۶۰۲۴
۱و۳:
- )۲۰ ۱۷۵۲۲۰
- )۶۳ ۶۷۲۰۳۴
حال نوبت به جهش می رسد .در جهش باید یکی از ژنها تغییر کند
. فرض کنید از بین کروموزومهای ۵ تا ۸ کروموزوم شماره ی ۷ واز بین ژن چهارم از ۲ به ۳ جهش یابد . پس نسل ما شامل کروموزومهای زیر با امتیازات نشان داده شده می باشد : ( امتیازات تعداد برخوردها می باشد )
- )۶۲۲۰۳۴۲۰ ۶
- )۷۰۰۶۳۳۵۴ ۸
- )۱۷۵۲۲۰۶۳ ۲
- )۴۳۶۰۲۴۷۱ ۴
- )۱۷۵۲۲۰۷۱ ۶
- )۴۳۶۰۲۴۶۳ ۴
- )۱۷۵۲۲۰۲۰ ۴
- )۶۷۲۰۳۴۶۳ ۵
کروموزوم ۳ کاندیدای خوبی برای ترکیب با ۶و۷ می باشد . ( فرض در این مرحله جهشی صورت نگیرد و نقطه ی اتصال بین ژنهای ۱ و ۲ باشد )
- ) ۶۷۲۰۳۴۲۰ ۶
- )۷۰۰۶۳۳۵۴ ۸
- )۱۷۵۲۲۰۶۳ ۲
- )۴۳۶۰۲۴۷۱ ۴
- )۱۷۵۲۲۰۷۱ ۶
- )۴۳۶۰۲۴۶۳ ۴
- )۱۷۵۳۲۰۳۰ ۴
- )۶۷۲۰۳۴۶۳ ۵
- )۱۳۶۰۲۴۶۳ ۲
- )۴۷۵۲۲۰۶۳ ۲
- )۱۷۵۲۲۰۲۰ ۴
- )۱۷۵۲۲۰۶۳ ۲
مطالب مشابه :
الگویتم ژنتیک برای حل مساله n- وزیر
الگویتم ژنتیک برای حل برای مسئله 8 وزیر در بدترین حالت هر وزیر با همه وزیر های
آموزش #c
می باشد نتیجه نهایی حل مسئله می بایست که نمای شهر از (8 وزیر) با الگوریتم ژنتیک vb
فهرست عناوین کتاب
، الگوریتم ژنتیک الگوریتم های 1-17-3-9- حل مسئلهی n- وزیر با استفاده از روش اول
پیاده سازی جدول سودوکو با الگوریتم ژنتیک
پیاده سازی جدول سودوکو با الگوریتم ژنتیک برای حل مسئله با الگوریتم ژنتیک 8 وزیر. خوشه
مسئله هشت وزیر
روشهای حل مسئله الگوریتم ژنتیک. برای مسئله ۸ وزیر در بدترین حالت هر وزیر با همه
الگوریتم های متاهیوریستیکی ...
در مسئله 8 وزیر هدف الگوریتم برای حل مساله 8 در الگوریتم sa حل شده است، با این
پروژه پایانی - دانشگاه پیام نور
بررسی حل مسئله n وزیر با روش های فرا کاربرد الگوریتم ژنتیک در داده
الگوریتم ژنتیک
الگوریتم ژنتیک نیز با در این مثال می خواهیم مسئله ی ۸ وزیر را بوسیله ی این الگوریتم حل
برچسب :
حل مسئله 8 وزیر با الگوریتم ژنتیک