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

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

 محدوده کاري الگوريتم ژنتيک  بسيار وسيع مي باشد و هر روز با پيشرفت روزافزون علوم و تکنولوژي استفاده از اين روش در بهينه سازي و حل مسائل بسيار گسترش يافته است. الگوريتم ژنتيک يکي از زير مجموعه هاي محاسبات تکامل يافته مي باشد که رابطه مستقيمي با مبحث هوش مصنوعي دارد در واقع الگوريتم ژنتيک  يکي از زير مجموعه هاي هوش مصنوعي مي باشد.  الگوريتم ژنتيک را مي­توان يک روش جستجوي کلي ناميد که از قوانين تکامل بيولوژيک طبيعي تقليد مي­کند .الگوريتم ژنتيک برروي يکسري از جواب­هاي مساله به اميد بدست آوردن جوابهاي بهتر قانون بقاي بهترين را اعمال مي کند. در هر نسل به کمک فرآيند انتخابي متناسب با ارزش جواب­ها و توليد مثل جواب-هاي انتخاب شده به کمک عملگرهايي که از ژنتيک طبيعي تقليد شده­اند ,تقريب­هاي بهتري از جواب نهايي بدست مي­آيد. اين فرايند باعث مي­شود که نسلهاي جديد با شرايط مساله سازگارتر باشد .

2- تاریخچه

   حساب تکاملي ,براي اولين بار در سال 1960 توسط آقاي ريچنبرگ ارائه شد که تحقيق وي در مورد استراتژي تکامل بود.بعدها نظريه او توسط محققان زيادي مورد بررسي قرار گرفت تا اينکه الگوريتم ژنتيک  (GA  ) توسط جان هولند(John Holland ) و در سال 1975 در دانشگاه ميشيگان ,ارائه شد.

در سال 1992 نيز جان کوزا (John Koza ) از الگوريتم ژنتيک  (GA  ) براي حل و بهينه سازي مسائل مهندسي پيشرفته استفاده کرد و توانست براي اولين بار روند الگوريتم ژنتيک  (GA  )  را به زبان کامپيوتر در آورد و براي آن يک زبان برنامه نويسي ابداع کندکه به اين روش برنامه نويسي ,برنامه نويسي ژنتيک ( GP ) گويند و نرم افزاري که توسط وي ابداع گرديد به نرم افزار LISP مشهور است که هم اکنون نيز اين نرم افزار کاربرد زيادي در حل و بهينه سازي مسائل مهندسي پيدا کرده است .

2-1  تاريخچه بيولوژيکي

بدن  هر موجود زنده اي از سلول تشکيل يافته است و هر سلول هم از کروموزوم تشکيل يافته است.کروموزومها نيز از رشته هاي DNA تشکيل يافته اند.کروموزومها هم از ژن تشکيل يافته اند.و به هر بلوک DNA يک ژن مي گويند و هر ژن نيز از يک پروتئين خاص ومنحصر به فرد تشکيل يافته است.و به مجموعه از ژنها يک ژنوم (Genome ) مي گويند.

3- ساختار الگوريتم‏هاي ژنتيكي

به طور كلي, الگوريتم‏هاي ژنتيكي از اجزاء زير تشكيل مي‏شوند:

 3-1 كروموزوم[1]

در الگوريتم‏هاي ژنتيكي, هر كروموزوم نشان دهنده يك نقطه در فضاي جستجو و يك راه‏حل ممكن براي مسئله مورد نظر است. خود كروموزوم‏ها (راه حل‏ها) از تعداد ثابتي ژن[2] (متغير) تشكيل مي‏شوند. براي نمايش كروموزوم‏ها, معمولاً از كدگذاري‏هاي دودويي (رشته‏هاي بيتي) استفاده مي‏شود.

3-2  جمعيت[3]

مجموعه‏اي از كروموزوم‏ها يك جمعيت را تشكيل مي‏دهند. با تاثير عملگرهاي ژنتيكي  بر روي هر جمعيت, جمعيت جديدي با همان تعداد كروموزوم تشكيل مي‏شود.

 

3-3  تابع برازندگي[4]

به منظور حل هر مسئله با استفاده از الگوريتم‏هاي ژنتيكي, ابتدا بايد يك تابع برازندگي براي آن مسئله ابداع شود. براي هر كروموزوم, اين تابع عددي غير منفي را برمي‏گرداند كه نشان دهنده شايستگي يا توانايي فردي آن كروموزوم است.

 

3-4 عملگرهاي الگوریتم  ژنتيك

در الگوريتم‏هاي ژنتيكي, در طي مرحله توليد مثل[5] ازعملگرهاي ژنتيكي استفاده مي‏شود. با تاثير اين عملگرها بر روي يك جمعيت, نسل[6] بعدي آن جمعيت توليد مي‏شود. عملگرهاي انتخاب[7] , آميزش[8]  و جهش[9] معمولاً بيشترين كاربرد را در الگوريتم‏هاي ژنتيكي دارند.

 

3-4-1     عملگر انتخاب  (Selection ):

اين عملگر از بين كروموزوم‏هاي موجود در يك جمعيت, تعدادي كروموزوم را براي  توليد مثل انتخاب مي‏كند. كروموزوم‏هاي برازنده‏تر شانس بيشتري دارند تا براي توليد مثل انتخاب شوند.

 

روش های انتخاب :

  • : Elitist Selection (انتخاب نخبگان)

o       مناسب‌ترین عضو هر اجتماع انتخاب می‌شود. با توجه به مقدار شایستگی که از تابع ارزیاب دریافت کرده است.

 

  • نمونه‏برداري به روش چرخ رولت

در اين روش, به هر فرد قطعه‏اي از يك چرخ رولت مدور اختصاص داده مي‏شود. اندازه اين قطعه متناسب با برازندگي آن فرد است. چرخ N بار چرخانده مي‏شود كه N تعداد افراد در جمعيت است. در هر چرخش, فرد زير نشانگر چرخ انتخاب مي‏شود و در مخزن والدين نسل بعد قرار مي‏گيرد. اين روش مي‏تواند به صورت زير پياده‏سازي شود:

1-    نرخ انتظار كل افراد جمعيت را جمع كنيد و حاصل آن را T بناميد.

2-    مراحل زير را N بار تكرار كنيد:

يك عدد تصادفي r بين 0 و T  انتخاب كنيد.

در ميان افراد جمعيت بگرديد و نرخ‏هاي انتظار( مقدار شایستگی) آنها را با هم جمع كنيد تا اين كه مجموع بزرگتر يا مساوي r شود. فردي كه نرخ انتظارش باعث بيشتر شدن جمع از اين حد مي‏شود, به عنوان فرد برگزيده انتخاب مي‏شود.

 

  • Tournament Selection (انتخاب تورنومنت) :

یک زیر مجموعه از صفات یک جامعه انتخاب می‌شوند و اعضای آن مجموعه با هم رقابت می‌کنند و سرانجام فقط یک صفت از هر زیر‌گروه برای تولید انتخاب می‌شوند.

3-4-1    عملگر آميزش (Crossover ):

 در جریان عمل تلفیق  به صورت اتفاقی بخشهایی از کروموزوم ها با یکدیگر تعویض می شوند. این موضوع باعث می شود که فرزندان ترکیبی از خصوصیات والدین خود را به همراه داشته باشند و دقیقاً مشابه یکی از والدین نباشند.

هدف تولید فرزند جدید می باشد  به این امید که خصوصیات خوب دو موجود در فرزندشان جمع شده و یک             موجود بهتری را تولید کند.

روش کار به صورت زیر است:

بصورت تصادفی یک نقطه از کروموزوم را انتخاب می کنیم

ژن های مابعد آن نقطه از کروموزوم ها را جابجا می کنیم

  • تلفیق تک نقطه ای (Single Point Crossover)

 اگر  عملیات تلفیق را در یک نقطه انجام دهیم به آن تلفیق تک نقطه ای می گویند.

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

شکل 3 یک نمونه تلفیق (آمیزش)

در شکل بالا کروموزومهاي 1 و2 در نقش والدين هستند. و حاصل توليد مثل آنها در رشته هائي بنام Offspring ذخيره شده است.دقت شود که علامت  “|” مربوط به نقطه شروع توليد مثل مي باشد و در رشته هاي Offspring اعدادي که بعد از نقطه شروع توليد مثل قرار مي گيرند مربوط به کروموزومهاي مربوط به خود مي باشند.بطوريکه اععدار بعد از نقطه شروع مربوط به Offspring1  مربوط به اعداد بعد از نقطه شروع مربوط به کرومکوزوم 1 و اعداد بعد از نقطه شروع توليد مثل مربوط به Offspring2 مربوط به اعداد بعد از نقطه شروع توليد مثل مربوط به کروموزوم 2 مي باشند

  • روش ادغام دو نقطه ای((Two-point CrossOver :

در این روش دو مکان را به صورت تصادفی انتخاب کرده و مقادیر بین این دو نقطه را جابجا می کنیم.

  • تلفیق نقطه ای (Multipoint Crossover) :

می توانیم این عملیات را در چند نقطه انجام دهیم ، که به آن بازترکیبی چند نقطه ای می گویند

  • .تلفیق جامع (Uniform Crossover) :

  اگر تمام نقاط کروموزوم را بعنوان نقاط بازترکیبی انتخاب کنیم به آن بازترکیبی جامع می گوئیم.  مثال)

3-4-3.عملگر جهش (Mutation ):

پس از اتمام عمل آميزش, عملگر جهش بر روي كروموزوم‏ها اثر داده مي‏شود. اين عملگر يك ژن از يك كروموزوم را به طور تصادفي انتخاب نموده و سپس محتواي آن ژن را تغيير مي‏دهد. اگر ژن از جنس اعداد دودويي باشد, آن را به وارونش تبديل مي‏كند و چنانچه متعلق به يك مجموعه باشد, مقدار يا عنصر ديگري از آن مجموعه را به جاي آن ژن    قرار مي‏دهد. در شكل 2 چگونگي جهش يافتن پنجمين ژن يك كروموزوم نشان    داده شده است.

پس از اتمام عمل جهش, كروموزوم‏هاي توليد شده به عنوان نسل جديد شناخته شده و براي دور بعد اجراي الگوريتم ارسال مي‏شوند.

 

 

4- روند كلي الگوريتم‏هاي ژنتيكي

قبل از اين كه يك الگوريتم ژنتيكي بتواند اجرا شود, ابتدا بايد كدگذاري (يا نمايش) مناسبي براي مسئله مورد نظر پيدا شود. معمولي ترين شيوه نمايش کروموزومها در الگوريتم ژنتيک به شکل رشته هاي دودويياست. هر متغير تصميم گيري به صورت دودويي در آمده و سپس با کنار هم قرار گرفتن اين متغيرها کروموزوم ايجاد مي­شود .گرچه اين روش گسترده ترين شيوه کدگذاري است اما شيوه هاي ديگري مثل نمايش با اعداد حقيقي در حال گسترش هستند.همچنين يك تابع برازندگي نيز بايد ابداع شود تا به هر راه‏ حل كدگذاري شده ارزشي را نسبت دهد. در طي اجرا, والدين براي توليد مثل انتخاب مي‏شوند و با استفاده از عملگرهاي آميزش و جهش با هم تركيب مي‏شوند تا فرزندان جديدي توليد كنند. اين فرآيند چندين بار تكرار مي‏شود تا نسل بعدي جمعيت توليد شود. سپس اين جمعيت بررسي مي‏شود و در صورتي كه ضوابط همگرايي رآورده شوند, فرآيند فوق خاتمه مي‏يابد.

شکل 5 کد برنامه مجازي الگوريتم ژنتيک ساده و فلوچارت آن

5- روند کلي بهينه سازي و حل مسائل در الگوريتم ژنتيک :

5-1 شروع(Start ) : توليد تصادفي يک جمعيت(Population ) که شامل تعداد زيادي کروموزم(روشهاي حل مسئله است) مي باشد.

5-2-صحت و درستي(Fitness ): ارزيابي صحت براي تابع f(x) به ازائ هر کروموزوم x درجمعيت.

شکل 6 نحوه ارزیابی تابع شایستگی در چرخ رولت

5-3-ايجاد يک جمعيت جديد(New Population ):توليد يک جمعيت جديد با انجام تمامي زير گروههاي زير  تا آنکه يک جمعيت جديد ايجاد گردد.

5-3-1 : انتخاب(Selection ):انتخاب کروموزومهاي پدر و مادر  از جمعيت قبلي با توجه به صحت و درستي آن (Fitness ).بطوريکه هر چه Fitnees بهتر باشد (دقت جواب در همگرائي بيشتر باشد) شانس بيشتري براي انتخاب دارد.

5-3-2 :توليد مثل(Crossover ):انجام زادو ولد و ايجاد يک نسل جديد.

5-3-3 :جهش(Mutation ):مشخص شدن مکان فرزند توليد شده در کروموزوم

5-3-4 :پذيرش(Accepting ): جا دادن فرزند جديد در داخل جمعيت.

5-4-جايگزيني(Replace ):جايگزيني جمعيت جديد به حاي جمعيت قبلي و مورد استفاده قرار دادن جمعيت جديد در مراحل بعدي الگوريتم

5-5-امتحان: (Test ): اگر شرائط مطلوب در حل مسئله ارضا شد اعلام ميکنيم که به بهترين جواب رسيده ايم و از الگوريتم خارج مي شويم در غير اين صورت به مرحله 2 يعني Fitneess ميرويم و دوباره همين روند را تکرار مي کنيم.

 

6- شرط پايان الگوريتم

چون که الگوریتم های ژنتیک  بر پایه تولید و تست می باشند، جواب مساله مشخص نیست و نمی دانیم که کدامیک از جواب های تولید شده جواب بهینه است تا شرط خاتمه را پیدا شدن جواب در جمعیت تعریف کنیم. به همین دلیل، معیارهای دیگری را برای شرط خاتمه در نظر میگیریم:

  1. تعداد مشخصی نسل: میتوانیم شرط خاتمه را مثلاً 100 دور چرخش حلقه اصلی برنامه قرار دهیم.
  2. عدم بهبود در بهترین شایستگی جمعیت در طی چند نسل متوالی
  3. بهترین شایستگی جمعیت تا یک زمان خاصی تغییری نکند.

ü      شرایط دیگری نیز میتوانیم تعریف کنیم و همچنین میتوانیم ترکیبی از موارد فوق را به عنوان شرط خاتمه به کار ببندیم.

 

يک مثال ساده:

 ما يک مربع 3*3 داريم که مي خواهيم اعدادي بين 1تا15 را در اين مربع قرار دهيم به طوري که جمع اعداد در هر سطرو ستون برابر 24 شود.

 ابن مسئله تا حدودي پيچيده است.ممکن است يک انسان بتواند آن را در مدت زماني مشخص حل کند ولي هيچ گاه يک کامپيوتر نخواهد توانست آن رادر مدت زمان کوتاهي با استفاده از اعداد تصادفي حل کند. ولي الگوريتم ژنتيک مي تواند اين مشکل را حل کند.

نسل اول

اولين گام ايجاد کردن يک نسل ابتدايي براي شروع کار است که شامل تعدادي ژنوم تصادفي است.اين ژنوم ها به صورت باينري(0و1) نشان داده مي شوند. حالا مثال مان:

اول يکسري عدد به صورت تصادفي توليد مي شوند. هر ژنوم يا کروموزوم  شامل اطلاعاتي براي هر 9 جاي خالي است .چون اين اعداد مقادير بين 0تا15 دارند مي توان آنها را با 4 بيت يا ژن داده نمايش داد. پس هر ژنوم شامل 36 بيت است.

يک نمونه ژنوم مي تواند به شکل زير باشد:

Bits (Genes)    0110    1100    1111    1011    0100    1010    0111    0101   1110

Values(Traits)    6          12         15       11         4         10         7            5          14

حالابايد به هر ژنوم در مجموعه يک عدد تناسب(Fitness) بنابر تاثير آن در حل مسئله نسبت داد.فرآيند وروش محاسبه اين عدد براي هر مسئله فرق مي کند.انتخاب الگوي مناسب براي مسئله مشکلترين و حساسترين بخش در حل مسئله ژنتيک است.دراين مثال ما اعداد را در مکان هايشان جايگذاري مي کنيم و بررسي مي کنيم که چقدر با جواب اصلي فاصله دارند.

     

مقادير معادل عبارتند از 33و25و26و24و21و39.واضح است که اين مقادير مسئله را حل نمي کنند.پس بايد مقادير تناسب را براي اين ژنوم محاسبه کرد.براي اين کار ابتدا فاصله هرمجموع را از24 محاسبه کرده،سپس معکوس مجموع تفاصل آنها را محاسبه مي کنيم .

بنابراين درجه تناسب براي اين ژنوم تقريباً برابر 0.033 است.هرچقدر که اعداد ما به جواب نزديکتر باشند عدد تناسب بزرگتر خواهد شد.اما اگر مخرج ما برابر 0شود چه اتفاقي مي افتد؟ دراين صورت همه اعداد ما برابر 24 شده اند وما به جواب رسيده ايم.

نسل بعدي:   دو ژنوم (کروموزوم) به طور تصادفي براي توليد نسل بعدي انتخاب مي شوند. اين اصلي ترين بخش الگوريتم ژنتيک است که از 3 مرحله تشکيل شده:

1-انتخاب

 دو ژنوم به طور تصادفي از نسل قبل انتخاب مي شوند.اين ژنوم ها داراي اعداد تناسب بزرگتري هستند و بعضي صفات آنها به نسل بعدي منتقل مي شوند. اين بدين معني است که عدد تناسب در حال افزايش خواهد بود.

بهترين روش براي تابع انتخاب(Fitness) در اين مسئله روشي به نام رولت(Roulette) است.اول يک عدد تصادفي بين 0 وعدد تناسب نسل قبلي انتخاب مي شود. تابع انتخاب به صورت زير خواهد بود:

RouletteSelection(){    float ball  = rand_float_between(0.0, total_fitness);    float slice = 0.0;     for each genome in population    {     slice += genome.fitness;//مقدار شایستگی هر ژنوم( کروموزوم) با ژنوم های بعدی جمع میشود         if slice > ball            return genome;    }}

2- تلفیق(Crossover)  

  حالا دو ژنوم بخشي از ژنهايشان را براي ايجاد نسل بعدي اهدا مي کنند. اگر آنها تغيير پيدا نکنند همانطور بي تغيير به نسل بعدي منتقل خواهند شد.درجهCrossover نشان دهنده اين است که هر چند وقت يکبار ژنوم ها تغيير پيدا خواهند کرد و اين عدد بايد در حدود 65-85% باشد.

عملگر تغيير در ژنوم هاي باينري مثال ما با انتخاب يک مکان تصادفي در ژنوم براي تغيير آغاز مي شود. بخش اول ژنهاي پدر و بخش دوم ژنهاي مادر با هم ترکيب مي شوند(و بالعکس) تا2 فرزند توليد شوند. در زيريک عمل تغيير را مي بينيم.

 

 

Before Crossing

Father 011110010011 001011011000111011010000

Mother 010100111110 010101111101000100010010

After Crossing

Child1 011110010011 010101111101000100010010

Child2 010100111110 001011011000111011010000

3- جهش(Mutation)

قبل از اين که ژنوم ها در نسل بعدي قرار بگيرند،احتمال دارد دچار جهش يا تغيير ناگهاني شوند شوند.جهش يک تغيير ناگهاني در ژن است.در ژنهاي باينري اين تغيير به معناي تغيير يک بيت از 0به 1 يا از 1 به 0 است. درجه جهش نشان دهنده احتمال بروز جهش در يک ژن است و تغريباً بين 1-5% براي ژنهاي باينري و 5-20%براي ژنهاي عددي است.

این روند تا تولید نسل های متعددی ادامه می یابد تا در نهایت به جواب برسیم.

7- برخي از كاربرد الگوريتم‏هاي ژنتيكي

توپولوژي هاي شبکه هاي کامپيوتي توزيع شده.

بهينه سازي ساختار ملکولي شِميايي (شيمي)

مهندسي برق براي ساخت آنتنهاي Crooked-Wire Genetic Antenna

مهندسي نرم افزار

بازي هاي کامپيوتري

مهندسي مواد

مهندسي سيستم

رباتيک(Robotics)

تشخيص الگوو استخراج داده(Data mining)

حل مسئله فروشنده دوره گرد

آموزش شبکه هاي عصبي مصنوعي

ياددهي رفتار به رباتها با GA .

يادگيري قوانين فازي با استفاده از الگويتم هاي ژنتيک.

8- نتيجه گيري‌

الگوريتم‌هاي ژنتيك الگوريتم‌هايي هستند كه داراي قدرت بسيار زيادي در يافتن جواب مسئله هستند، اما بايد توجه داشت كه شايد بتوان كاربرد اصلي اين الگوريتم ها را در مسائلي در نظر گرفت كه داراي فضاي حالت بسيار بزرگ هستند و عملاً بررسي همه حالت‌ها براي انسان در زمان‌هاي نرمال (در حد عمر بشر) ممكن نيست. از طرفي بايد توجه داشت كه حتماً بين حالات مختلف مسئله بايد داراي پيوستگي مناسب و منطقي باشيم. در نهايت الگوريتم‌هاي ژنتيك اين امكان را به ما مي‌دهد كه داراي حركتي سريع در فضاي مسئله به سوي هدف باشيم. به گونه‌اي كه مي‌توانيم تصور كنيم كه در فضاي حالات مسئله به سوي جواب مشغول پرواز هستيم.

 

 

لینک دانلود اصل فایل

 

 

 

 

 

 

 

 

 

 

 

 

[1] Chromosome

[2] Gene

[3] Population

[4] Fitness Function

[5] Reproduction

[6] Generation

[7] Selection

[8] Crossover

[9] Mutation

 

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *