Transcript GA 2
بسم هللا الرحمن الرحیم
آشنایی با الگوریتم های ژنتیک
استاد راهنما :
ارائه دهندگان :
مهندس حسین زاده
سعید ستاری
احد پارسا
حجت امامی
دوشنبه 24فروردین
فهرست مطالب
استراتژیهای جستجو (مقدمه)
الگوريتمهای تکاملی (پیشینهکاری)
الگوريتمهای ژنتيک
چند اصطالح
آشنایی با الگوریتم های ژنتیک
ساختار الگوریتم های ژنتیک
عملگر های الگوریتم ژنتیک
مزایای الگوریتم ژنتیک
معایب و اشکاالت وارد به الگوریتم های ژنتیک
برنامه نویس ی ژنتیک
تاریخچه
قدم های اولیه برنامه نویس ی ژنتیک
برنامه نویس ی ژنتیک
مشکالت برنامه نویس ی ژنتیک
کاربرد ها
مراجع
Jenetic algorithm
مقدمه :استراتژیهای
جستجو
Jenetic algorithm
کامل
استراتژیهای جستجو
)(Search Strategies
قطعی
مکاشفه ای
)(Heuristic
غیر قطعی
برنامه ريزی تکاملی
)(Non-deterministic
استراتژی تکاملی
الگوريتمهای ژنتيک
تک جوابی
مبتنی بر جمعيت
)(Population-based
الگوريتمهای تکاملی
برنامه ريزی ژنتيک
الگوريتمهای تخمین توزيع
)(Estimation of Distribution Algorithms
)(Evolutionary Algorithms
الگوریتم های تکاملی
Jenetic algorithm
نمودار گردش ی فرآيند يک الگوريتم تکاملی
•
Jenetic algorithm
فرايند توليد تا وقتی که جواب مورد نظر حاصل شود ادامه می يابد
( اغلب جمعيت اوليه بصورت تصادفی توليد می شود)
جمعيت جديد
پروسه توليد جمعيت جديد از جمعيت فعلی
جايگزينی جمعيت حاصل بجای جمعيت قبلی
جمعيت اوليه
چند اصطالح (زمینه بیولوژیکی)
Jenetic algorithm
کروموزوم( :)Chromosomeدر هر سلول مجموعه ای از موجودات هم شکل بنام کروموزوم وجود دارد .
ژن) : )Geneهر کروموزوم از تعدادی ژن تشکیل یافته است ؛ هر ژن یک خصیصه را کد می کند(.مثل رنگ
چشم)
آلل( : )Alleleمجموعه های ممکن برای یک خصیصه آلل نامیده می شود.
لوکس( :)Locusهر ژن در کروموزوم موقعیت خاص ی را داراست.
ژنوم( : )Genomeمجموعه کامل همه کروموزوم ها.
ژنوتیپ( : )Genotypeیک مجموعه خاص از ژن ها در ژنوم .
فنوتیپ ( :)Phenotypeژنوتیپ ها بعد از تکامل بیشتر به فنوتیپ ها (که همان خصوصیات فیزیکی و روانی
مانند رنگ چشم یا هوش و )...تبدیل می شوند .
آشنایی با الگوریتم های ژنتیک
Jenetic algorithm
الگوریتم های ژنتیک یکی از شاخه های پردازش تکاملی می باشند.
این الگوریتم ها با الهام از روند تکاملی طبیعت مسائل را حل می نمایند .
یعنی مانند طبیعت یک جمعیت از موجودات را تشکیل می دهند و با اعمالی بر روی این مجموعه به یک مجموعه
بهینه و یا موجود بهینه دست می یابند.
با توجه به خصوصیات خاص خودشان به خوبی از عهده حل مسائلی که نیاز به بهینه سازی دارند
بر می آیند.
ساختار الگوریتم های ژنتیک
مساله
مدلسازی
مساله
تشکیل جمعیت اولیه
تست شرط خاتمه
Jenetic algorithm
جستجوی ژنتیکی
ارزیابی جمعیت
انتخاب فرزندان
جهش
انتخاب والدین
بازترکیبی
جواب
ساختار الگوریتم های ژنتیک
Jenetic algorithm
انتخاب )( Selection
والدين )(Parents
کروسور)(Crossover
فرزندان)( Offspring
جمعيت اوليه)( Initial Population
جهش )(Mutation
جمعيت جديد)( New Population
جايگزينی جمعيت جديدبجای جمعيت قبلی
ساختار الگوریتم های ژنتیک
برای حل یک مساله با الگوریتم های ژنتیک مراحل ذیل را داریم:
)1مدلسازی مساله یا بازنمایی
)2تشکیل جمعیت اولیه
)3ارزیابی جمعیت
)4انتخاب والدین
)5باز ترکیبی
)6جهش
)7انتخاب فرزندان
)8تست شرط خاتمه الگوریتم
Jenetic algorithm
مکانیزم یک الگوریتم ژنتیک
Jenetic algorithm
شروع
جمعيت اوليه
T=0
ارزيابی جوابها
خیر
انتخاب
کروسور
آيا جواب مورد نظر حاصل شده؟
بل
ه
پايان
جهش
T=T+1
جدول هم ارزی مفاهيم بيولوژيکی
و عناصر GA
Jenetic algorithm
سیر تکاملی طبيعی
GA
محيط
مساله برای حل
جمعيت
مجموعه جوابهای جايگزين
توليد
گام تکرار
فرد
جواب داوطلب
والدين
جوابهای برگزيده شده
اندازة انطباق
مقدار برازندگی ( تابع ارزياب)
جدول هم ارزی مفاهيم بيولوژيکی
سیر تکاملی طبيعی
و عناصر GA
Jenetic algorithm
GA
بقاء
انتخاب والدين متناسب
با مقدار برازندگی
ژنوتيب
جواب رمزگذاری شده
فنوتيب
جواب رمزگشايی شده
ژن
موقعيت در رشته
آلل
مقدار در يک موقعيت
معین در رشته
تناوب توليد
پروسه رسيدن از جمعيت
فعلی به جمعيت بعدی
شبه کد یک الگوریتم ژنتیک ساده
Jenetic algorithm
مدلسازی مساله (بازنمایی)
Jenetic algorithm
برای اینکه بتوانیم یک مساله را بوسیله الگوریتم های ژنتیک حل کنیم ،بایستی آنرا به فرم مخصوص مورد نیاز این الگوریتم ها تبدیل
کنیم.
در این روند ما بایستی راه حل مورد نیاز مساله را به گونه ای تعریف کنیم که قابل نمایش بوسیله یک کروموزوم باشد.
اینکه چه نوع بازنمائی را برای مساله استفاده شود ،به شخص طراح و فرم مساله بستگی دارد.
ً
چند نمونه از بازنمائی هایی را که معموال استفاده می شوند :
.1اعداد صحیح
.2رشته های بیتی
.3اعداد حقیقی در فرم نقطه شناور
.4اعداد حقیقی به فرم رشته های بیتی
.5یک مجموعه از اعداد حقیقی یا صحیح
.6ماشینهای حالت محدود
.7هر فرم دیگری که بتوانیم عملگرهای ژنتیک را بر روی آنها تعریف کنیم
عملگر های الگوریتم ژنتیک
Jenetic algorithm
ارزیابی حمعیت Fitness
برای اینکه بتوانیم موجودات بهتر را درون جمعیت تشخیص بدهیم بایستی معیاری را تعریف کنیم که بر اساس آن موجودات بهتر را
تشخیص دهیم .به این کار ،یعنی تعیین میزان خوبی یک موجود ،ارزیابی آن موجود می گویند.
ارزیابی ،اینگونه است که بر حسب اینکه موجود چقدر خوب است یک عدد به آن نسبت می دهیم ،این عدد که برای موجودات بهتر
بزرگتر (یا کوچکتر) است را شایستگی آن موجود می نامیم.
به عنوان مثال در صورتی که به دنبال مینیمم یک تابع هستیم ،مقدار شایستگی را می توانیم ورودیهایی که مقادیر تابع بررای آنهرا کمترر اسرت
در نظر بگیریم که ورودیهای بهتری هستند.
بسته به نوع مساله ما می خواهیم شایستگی را بیشینه و یا کمینه کنیم.
عملگر های الگوریتم ژنتیک
Jenetic algorithm
انتخاب ( Selectionانتخاب والدین)
سوق دادن جستجو به بخشهايی از فضا که امکان يافتن جوابهای با کیفيت باالتر وجود دارد.
نسل جدیدی از راه حل ها را با انتخاب والدینی که باالترین Fitnessرا دارند تولید می کند.
والدین :در هر نسل تعدادی از عناصر جمعیت این فرصت را پیدا می کنند که تولید مثل کنند .به این عناصر که از میان جمعیت
انتخاب می شوند ،والدین می گویند.
روشهای مختلفی برای انتخاب والدین وجود دارند .در زیر به چند مورد از این روشها اشاره می کنیم:
روش های انتخاب والدین
Jenetic algorithm
انتخاب تمام جمعیت بعنوان والدین:
در واقع هیچگونه انتخابی انجام نمی دهیم (همه عناصر انتخاب می شوند) .
انتخاب تصادفی:
بصورت تصادفی تعدادی از موجودات جمعیت را بعنوان والدین انتخاب می کنیم ،این انتخاب می تواند با جایگذاری یا بدون
جایگذاری باشد.
در این روشها عناصر با شایستگی بیشتر شانس بیشتری برای انتخاب شدن بعنوان والدین را دارند.
سایر روشها:
این روشها با استفاده از تکنیک هایی سعی می کنند که انتخاب هایی را ارائه دهند ،که هم رسیدن به جواب نهایی را تسریع کنند و
هم اینکه کمک می کنند که جواب بهینه تری پیدا شود.
روش های انتخاب
Jenetic algorithm
معمول ترین روش های انتخاب
: Elitist Selection
مناسبترین عضو هر اجتماع انتخاب میشود.
:Roulette Selection
یک روش انتخاب است که در آن عنصری که عدد برازش (تناسب) بیشتری داشته باشد ،انتخاب میشود.
ScalingSelection
به موازات افزایش متوسط عدد برازش جامعه ،سنگینی انتخاب هم بیشتر میشود و جزئیتر .این روش وقتی کاربرد دارد که مجموعه
دارای عناصری باشد که عدد برازش بزرگی دارند و فقط تفاوتهای کوچکی آنها را از هم تفکیک میکند.
Tournament Selection
یک زیر مجموعه از صفات یک جامعه انتخاب میشوند و اعضای آن مجموعه با هم رقابت میکنند و سرانجام فقط یک صفت از هر
زیرگروه برای تولید انتخاب میشوند.
عملگر های الگوریتم ژنتیک
Jenetic algorithm
ترکيب مجدد )(Recombination/Crossover
امکان ترکيب جوابهای جزيی ) (partial solutionsيافت شده و در نتيجه بدست آوردن جوابهایی با کيفيت باالتر
را فراهم میآورد.
در جریان عمل بازترکیبی به صورت اتفاقی بخشهایی از کروموزوم ها با یکدیگر تعویض می شوند .این موضوع
ً
باعث می شود که فرزندان ترکیبی از خصوصیات والدین خود را به همراه داشته باشند و دقیقا مشابه یکی
از
والدین نباشند.
هدف تولید فرزند جدید می باشد به این امید که خصوصیات خوب دو موجود در فرزندشان جمع شده و
یک
موجود بهتری را تولید کند.
روش انجام عمل بازترکیبی
Jenetic algorithm
*
0
0
0
0
0
0
0
0
0
0
0
0
0
والدین
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
فرزندان
0
0
0
0
0
0
0
0
0
نحوه انجام عملیات بازترکیبی
1
1
1
1
روش انجام عمل بازترکیبی
Jenetic algorithm
روش کار به صورت زیر است:
بصورت تصادفی یک نقطه از کروموزوم را انتخاب می کنیم
ژن های مابعد آن نقطه از کروموزوم ها را جابجا می کنیم
بازترکیبی تک نقطه ای ()Single Point Crossover
اگر عملیات بازترکیبی را در یک نقطه انجام دهیم به آن بازترکیبی تک نقطه ای می گویند.
در این روش یک مکان تصادفی در طول رشته انتخاب می شود و geneها از این مکان به بعد جابجا می شوند.
روش انجام عمل بازترکیبی
Jenetic algorithm
روش انجام عمل بازترکیبی
Jenetic algorithm
روش ادغام دو نقطه ای((Two-point CrossOver
در این روش دو مکان را به صورت تصادفی انتخاب کرده و مقادیر بین این دو نقطه را
جابجا می کنیم.
در این روش دو مکان را به صورت تصادفی انتخاب کرده و مقادیر بین این دو نقطه را جابجا می کنیم.
روش انجام عمل بازترکیبی
Jenetic algorithm
ادغام چند نقطه ای (: )Multipoint Crossover
می توانیم این عملیات را در چند نقطه انجام دهیم ،که به آن بازترکیبی چند نقطه ای می گویند .
ادغام جامع ()Uniform Crossover
اگر تمام نقاط کروموزوم را بعنوان نقاط بازترکیبی انتخاب کنیم به آن بازترکیبی جامع می گوئیم.
روش کار را برای این دو مورد اخیر بدین صورت است:
با احتمال ثابتی مثل Pcعمل بازترکیبی را انجام می دهیم
روش کار به صورت زیر است:
به ازای هر یک از قسمت های کروموزوم:
یک عدد تصادفی بین صفر و یک تولید می کنیم
اگر این عدد از مقدار ثابتی مثل Pcکوچکتر باشد ،ژنهای مابعد آن نقطه از کروموزوم ها را جابجا می کنیم.
یک نکته در مورد عمل بازترکیبی
Jenetic algorithm
نمونه ای از ادغام جامع:
*عملیات بازترکیبی موجودات جدیدی تولید نمی کند و تنها باعث می شود که موجودات موجود بهتر شوند.
*در صورتی که برای بازنمایی کروموزوم ها از روشهایی غیر از اعداد صحیح و یا رشته های عددی استفاده کرده
باشیم ،عملیات بازترکیبی را به روشهای دیگری پیاده سازی می کنیم .بعنوان مثال اگر از اعداد حقیقی برای ارائه مدل
مساله استفاده کرده باشیم ،یک روش اینست که قسمت حقیقی و مانتیس دو عدد را جابجا کنیم.
برای سایر بازنمایی ها نیز روشهای مختلفی برای بازترکیبی ارائه شده است .
عملگر های الگوریتم ژنتیک
Jenetic algorithm
جهش )(mutation
ويژگی تصادفی بودن و امکان فرار از نقاط بهينه محلی را فراهم میآورد.
برای انجام جهش به این صورت عمل می کنیم:
بصورت تصادفی تعدادی از کروموزوم های فرزند را انتخاب می کنیم به صورت تصادفی مقادیر یک یا چند ژن وی را تغییر می دهیم.
همچنین در هنگام پیاده سازی به صورت زیر عمل می کنیم:
به ازای هر کروموزوم اعمال زیر را انجام می دهیم:
یک عدد تصادفی بین صفر و یک تولید می کنیم
اگر عدد تولید شده کوچکتر از Pmبود ،به ازای هر ژن اعمال زیر را انجام می دهیم ،در غیر اینصورت از جهش دادن کروموزوم
صرف نظر می کنیم
یک عدد تصادفی بین صفر و یک تولید می کنیم
اگر عدد تولید شده کوچکتر از Pgبود ،ژن مربوطه را جهش می دهیم
عملگر های الگوریتم ژنتیک
Jenetic algorithm
بعنوان مثال جهش برای کروموزوم های به فرم باینری به صورت زیر می باشد:
والد
0
0
0
0
0
0
0
0
0
0
0
0
0
فرزند
0
0
1
1
0
0
0
1
0
0
1
0
0
نحوه انجام عملیات جهش
* جهش ،برای بازنمایی های که از مقادیر حقیقی استفاده کرده اند ،به این صورت پیاده سازی می شود که یک عدد حقیقی بصورت
تصادفی در یک محدوده خاص تعیین و جایگزین عدد قبلی می گردد و یا اینکه عدد اصلی با یک مقدار خاص جمع گردد و ....برای سایر
مدل های بازنمایی مساله نیز انواع خاص ی از جهش پیشنهاد شده است.
Jenetic algorithm
یک مثال
( Bitwise Mutation) جهش بيتی
نکاتی در مورد عمل جهش
Jenetic algorithm
جهش ابتکاری(: )Heuristic
با توجه به اینکه هدف از جهش بهتر شدن کروموزوم ها و یا اینکه پیدا شدن یک راه حل جدید است ،می توانیم به جای تغییر تصادفی
کروموزوم ها ،تغییرات کروموزوم ها را هدفمند کنیم .برای اینکار ،بسته به نوع مساله ،بر روی کروموزوم انتخاب شده یکی از روشهای
کالسیک حل مساله را اعمال کرده ،و جواب حاصل را بعنوان کروموزوم جدید جایگزین می کنند .استفاده از این روش که از آن با
عنوان جهش ابتکاری یاد می شود ،بسته به نوع مساله ممکن است دستیابی به راه حل نهایی را سریعتر کنند.
* جهش باعث ایجراد تغییررات ناخواسرته در جمعیرت شرده ،و باعرث بوجرود آمردن موجرودات جدیرد مری شرود .در واقرع برترری جهرش نسربت بره
بررازترکیبی نیررز همررین مطلررب مرری باشررد.در صررورتی کرره فقررط از جهررش اسررتفاده کنرریم ،ممکررن اسررت کرره بترروانیم جررواب بهینرره را پیرردا کنرریم ،امررا
استفاده از بازترکیبی به تنهایی پیدا شدن جواب بهینه را تضمین نمی کند.
شرط خاتمه الگوریتم
Jenetic algorithm
چون که الگوریتم های ژنتیک بر پایه تولید و تست می باشند ،جواب مساله مشخص نیست و نمی دانیم که کدامیک از جواب های
تولید شده جواب بهینه است تا شرط خاتمه را پیدا شدن جواب در جمعیت تعریف کنیم .به همین دلیل ،معیارهای دیگری را برای شرط
خاتمه در نظر می گیریم:
ً
.1تعداد مشخص ی نسل :می توانیم شرط خاتمه را مثال 100دور چرخش حلقه اصلی برنامه قرار دهیم.
.2عدم بهبود در بهترین شایستگی جمعیت در طی چند نسل متوالی
.3واریانس شایستگی جمعیت از یک مقدار مشخص ی پائین تر بیاید و یا اینکه در طی چند نسل متوالی مشخص ،تغییر نکند.
.4بهترین شایستگی جمعیت از یک حد خاص ی کمتر شود.
شرایط دیگری نیز می توانیم تعریف کنیم و همچنین می توانیم ترکیبی از موارد فوق را به عنوان شرط خاتمه به کار ببندیم.
مزایا و معایب استفاده از الگوریتم های
ژنتیکJenetic algorithm
این نکته که الگوریتم های ژنتیک خوب یا بد هستند ،تا حد زیادی به مساله مربوط می شود .
این الگوریتم ها پارامترهای بسیار زیادی دارند که با تنظیم صحیح این پارامترها می توان نتایج بسیار متفاوتی بدست بیاوریم.
مزایای الگوریتم های ژنتیک
ً
این الگوریتم ها همیشه یک جواب نسبتا خوب پیدا خواهند کرد
در هر مرحله از کار می توانیم الگوریتم را متوقف کنیم .در این حالت نیز یک جواب خواهیم داشت.
به راحتی می توانیم این الگوریتم ها را بصورت موازی بر روی چند پردازنده اجرا کنیم
فهم آسان و مجزا بودن
پشتیبانی از بهینه سازی چند تابعی
همیشه یک جواب داریم که با گذشت زمان بهتر می شود
روشهای مختلفی برای افزایش سرعت و پیشرفت الگوریتم وجود دارد.
بهره برداری ساده از جواب قبلی.
انعطاف پذیر برای کاربرد های ترکیبی.
معایب الگوریتم های ژنتیک
Jenetic algorithm
معایب
• یک جواب خوب پیدا می کنند ولی ممکن است جواب بهینه را پیدا نکنند
• به حافظه و محاسبات زیادی نیاز دارند
• در مورد اینکه جواب پیدا شده چقدر خوب است و آیا جواب بهتری وجود دارد ،نمی توانیم هیچگونه ادعائی داشته باشیم
• پشتوانه ریاض ی ضعیفی دارند
• در دو بار اجرای مختلف ،جواب های متفاوتی دریافت می کنیم
• تعدد پارامترهای الگوريتم :هر چند الگوریتمهای ژنتیکی در دسته الگوریتمهای بهینهسازی قرار میگیرند ،اما تنظیم کردن این پارامترها
گاهی به یک مساله بهینهسازی دیگر تبدیل خواهد شد.
• نحوه کدینگ ،نوع عملگر ترکیب ،نرخ ترکیب ،نوع عملگر جهش ،نرخ جهش
فهرست مطالب
استراتژیهای جستجو (مقدمه)
الگوريتمهای تکاملی (پیشینهکاری)
الگوريتمهای ژنتيک
چند اصطالح
آشنایی با الگوریتم های ژنتیک
ساختار الگوریتم های ژنتیک
عملگر های الگوریتم ژنتیک
مزایای الگوریتم ژنتیک
معایب و اشکاالت وارد به الگوریتم های ژنتیک
برنامه نویس ی ژنتیک
تاریخچه
قدم های اولیه برنامه نویس ی ژنتیک
برنامه نویس ی ژنتیک
مشکالت برنامه نویس ی ژنتیک
کاربرد ها
مراجع
Jenetic algorithm
برنامه نویس ی ژنتیک
Jenetic algorithm
تاریخچه
برنامه نویس ی ژنتیک در اوائل دهه نود میالدی بوسیله John Kozaدر آمریکا مطرح شد ،و به تدریج توسعه داده شد .البته الزم به ذکر
است که بیشترین پیشرفت ها در این زمینه نیز بوسیله خود آقای Kozaدر طی سالهای مختلف ارائه شده است .
برنامه نویس ی ژنتیک چیست؟
برنامه نویس ی ژنتیک در واقع به هدف ما ،یعنی برنامه نویس ی اتوماتیک
(که با نامهای Automatic Programming, Program synthesis, Program inductionنیز شناخته می شود) با
استفاده از پرورش یک جمعیت از برنامه های کامپیوتری می رسد .پرورش این جمعیت با استفاده از نسخه الهام گرفته از عملهای انتخاب
و تولید مثل بیولوژیکی صورت می گیرد.
درخت های تجزیه ()Parse Trees
Jenetic algorithm
یکری از نیازمنردیهای اسایر ی کره در تولیرد برنامره هرا نیراز اسرت ،ایرن اسرت کره بایسرتی از تحرا ،دسرتوری ،درسرتی برنامره هرای نوشرته شرده تائیرد گردنرد.
بنابراین برنامه بایستی در ابتدا به یک شکل بهتری تبدیل شود .بنابراین کامپایلرها سرعی مری کننرد کره برنامره نوشرته شرده را بره یرک فررم یکنروا و سراده
تر که درختهای تجزیه نام دارند ،تبدیل کنند.
در جریان کامپایل یک برنامه سطح باال (مثل ،)C/C++کد نوشته شده ،به یک درخت تجزیه تبدیل مری شرود ،ترا کامپرایلر راحرت ترر بتوانرد برر روی
آن کررار کنررد .از طرررف دیگررر در صررورتی کرره مررا در برنامرره نویسر ی ژنتیررک از ایررن سرراختار اسررتفاده کنرریم ،هررم تعریررف عملگرهررای ژنتیررک بررر روی آن سرراده تررر
اسررت و هررم دردسررر خطایررابی کرردها و اصررالح خطاهررای دسررتوری را نخررواهیم داشررت .زیررا در صررورتی کرره کامپررایلر بتوانررد از روی برنامرره نوشررته شررده ،بررا
موفقیت درخت تجزیه را ایجاد کند ،برنامه نوشته شده از تحا ،دستوری خطائی ندارد.
به عنوان مثال برای عبارت ())) x/y+(10+32))-(3*(Pow(x , yدرخت تجزیه به صورت زیر است:
-
+
*
pow
y
3
x
+
32
/
10
y
x
قدم های اولیه برنامه نویس ی ژنتیک
Jenetic algorithm
برای اینکه بتوانیم با استفاده از برنامه نویس ی ژنتیک یک برنامه برای یک مساله سطح باال تهیه کنیم ،بایستی با انجام یک سری اعمال،
برنامه سطح باال را به فرم مناسب الگوریتم ژنتیک تبدیل کنیم .پنج قدم اسای ی زیر را باید در ابتدا بوسیله یک عامل انسانی ،انجام
دهیم:
(1یک مجموعه از عناصر پایانی تعیین کنیم:
عناصر پایانی ،متغیرهای مستقل مساله ،توابع بدون پارامتر ورودی یا ثابت هایی هستند که بصورت تصادفی ایجاد شده اند.
)2مجموعه توابع اولیه که بایستی برنامه بر پایه آنها تولید شود.
)3معی ررار شایس ررتگی (بر ررای اینک رره بوس رریله آن بت رروانیم برنام رره ه ررای تولی ررد ش ررده بوس رریله الگ رروریتم ژنتی ررک را ارزی ررابی و برنام رره ه ررای بهت ررر را
شناسائی کنیم)
)4پارامترهررایی کرره ب ررای کنترررل اج ررای الگرروریتم ژنتیررک مررورد نیرراز هسررتند ،برره عنرروان مثررال نرروع انتخرراب والرردین و انتخرراب فرزنرردان ،نرررخ
جهش ،نرخ بازترکیبی و ....
)5شرط خاتمه و روش ی برای اینکه نتیجه اجرا را بتوانیم تعیین کنیم.
برنامه نویس ی ژنتیک به همراه یک مثال
Jenetic algorithm
روند اجرای الگوریتم های ژنتیک را بدین صورت در نظر گرفتیم :
)1ایجاد یک جمعیت اولیه
)2ارزیابی عناصر جمعیت
)3بازترکیبی
)4جهش
)5تکرار موارد فوق تا زمانی که به نتیجه مورد نظر نرسیده ایم .
در رابطه با برنامه نویس ی ژنتیک بازنمائی (ارئه مدل برای مساله) کروموزومها را بصورت درخت های تجزیه درنظر می گیریم .
مثال) مساله یافتن برنامه ای برای محاسبه تابع XORبا استفاده از توابع OR ،ANDو NOTرا مطرح و نشان می دهیم که
الگوریتم به صورت نمادین ،چگونه جواب مورد نیاز را پیدا خواهد کرد.
برنامه نویس ی ژنتیک
Jenetic algorithm
جدول درستی برای توابع NOT ،OR ،ANDو XORبه صورت زیر است :
A xor B
not A not B
A or B
A and B
B
A
False
False
False
True
True
True
True
True
True
False
True
False
False
True
True
False
True
True
False
True
False
False
True
True
False
False
False
False
برای حل مساله با استفاده از برنامه نویس ی ژنتیک به این صورت عمل می کنیم که مجموعه عملگرهای منطقی {AND, OR,
}NOTرا به عنوان توابع برنامه و مجموعه }{A, B, True, Falseرا به عنوان عناصر پایانی مطرح می کنیم .دو نکته در اینجا مهم
ً
است ،که اوال هر ترکیبی از توابع که در درخت تجزیه وارد شود قابل ارزیابی است و باعث بروز خطا نمی شود و دوم اینکه مساله با
استفاده از توابع و پایانی هایی که ذکر شده است ،قابل بازسازی است.
برنامه نویس ی ژنتیک
Jenetic algorithm
قدم اول :ایجاد جمعیت اولیه.
نکته ای که در مورد درختهایی که به جمعیت اضافه می شوند ،بایستی مدنظر قرار گیرد ،کنترل عمق درخت ها است.
در تولید جمعیت اولیه دو استراتژی مختلف وجود دارد:
روش اول این است که تمام درختهای اولیه ایجاد شده یک عمق مشخص داشته و بصورت پر باشند ،روش تولید این درختها به این شکل
است که بصورت تصادفی و سطح به سطح از توابع موجود بصورت تصادفی انتخاب و به جای گره های درخت قرار می دهند .این روند
آنقدر تکرار می شود تا به بیشترین عمق مورد نظر برسیم ،در این حالت برای سطح آخر ،از مقادیر مجموعه پایانی ها به جای گره های
درخت قرار می دهیم تا یک درخت تجزیه کامل تشکیل شود .البته می توانیم درخت های پر با عمق های متفاوت به عنوان جمعیت اولیه
ً
تولید کنیم .که معموال روش دوم بهتر است.
AND
AND
AND
AND
B
OR
A
B
FALSE
AND
OR
برنامه نویس ی ژنتیک
Jenetic algorithm
در روش دوم به این صورت عمل می شود که محدودیتی در نوع درخت ایجاد شده اولیه وجود ندارد ،تنها محدودیت ها در این است که
یک درخت تجزیه معتبر داشته باشیم و اینکه عمق درخت ایجاد شده از حداکثر مجاز فراتر نرود .نمونه تشکیل این درختها در شکل زیر
نشان داده شده است.
AND
B
AND
B
OR
A
AND
OR
B
برنامه نویس ی ژنتیک
Jenetic algorithm
قدم دوم :ارزیابی عناصر.
برای ارزیابی یک کروموزم بایستی بتوانید روش ی را بدست بیاورید که بصورت عددی بیان کند که یک برنامه چقدر خوب است و در واقع
ً
چقدر توانسته است که هدف مورد نیاز را برآورده کند .معموال روند کار به این صورت است که برنامه را با پارامترهای مختلف چندین بار
اجرا
می کنند و با ارزیابی خروجی ارائه شده توسط برنامه بیان می کنند که برنامه چقدر توانسته است هدف مورد نظر ما را برآورده
کند .برای مثال ما ،بایستی نتیجه خروجی را برای چهار حالت ممکن برای Aو Bامتحان کنیم و بر اساس جدول درستی تعیین کنیم که
برنامه چقدر توانسته است ،خروجی مناسب را تولید کند .البته در حالت کلی ممکن است که برای یک برنامه تست های مختلفی برای
ارزیابی آن طراحی شود.
برنامه نویس ی ژنتیک
Jenetic algorithm
قدم سوم :بازترکیبی.
برای انجام بازترکیبی به سادگی به این صورت عمل می کنیم که دو عنصر (زیر درخت یا پایانی) ،را از دو درخت پدر ،به صورت تصادفی
انتخاب می کنیم و آنها را بین دو درخت جابجا می کنیم .به عنوان مثال برای برنامه های مثال فوق این عمل به صورت زیر خواهد بود:
اگر والدین را به صورت زیر درنظر بگیریم:
AND
AND
B
AND
OR
OR
A
B
FALSE
B
B
A
برنامه نویس ی ژنتیک
Jenetic algorithm
با انتخاب گره های ORو Bبه ترتیب از درختهای راست و چپ ،فرزندان حاصل از این دو درخت در اثر بازترکیبی به صورت زیر خواهند بود:
AND
AND
B
AND
OR
B
A
B
OR
A
B
FALSE
برنامه نویس ی ژنتیک
Jenetic algorithm
قدم چهارم :جهش.
انجام جهش نیز مانند بازترکیبی ساده است .روند کار به این صورت است که هر تابع یا پایانی در درخت تجزیه را می توانیم با هر تابع یا
پایانی دیگری جایگزین کنیم ،حتی ممکن است که به این شکل عمل کنیم که به جای یک زیر درخت یا پایانی ،یک زیر درخت دیگر
(که به روش ی که در تولید جمعیت اولیه گفته شد ،ایجاد شده است) را جایگزین می کنیم .در این حالت ممکن است که بخواهیم یک زیر
درخت را با یک زیر درخت دیگر جایگزین کنیم ،برای انجام کار ،بایستی تمام زیر درخت مربوطه را از درخت حذف کنیم و به جای آن زیر
درخت یا پایانی جدید را قرار دهیم .اما اگر می خواهیم یک پایانی را با یک زیر درخت جایگزین کنیم ،روند کار به این صورت است که به
جای گره پایانی زیر درخت مورد نظر را قرار می دهیم .برای درک بهتر مطلب تصویر زیر را داریم :
جهش
AND
OR
B
AND
OR
AND
A
B
B
جهش
B
OR
A
A
AND
B
B
A
مشکالت برنامه نویس ی ژنتیک
Jenetic algorithm
به طور کلی مشکالت برنامه نویس ی ژنتیک را می توان بصورت زیر لیست کنیم:
فضای بسیار وسیع مساله (تعداد زیاد توابع ،متغیرها ،ثابت ها ،عملگرها و ...و ترکیب های مختلف آنها)
تعداد زیاد کروموزومها در هر نسل(محاسبه شایستگی تمام عناصر زمان بر است).
زمان زیاد برای تست اینکه جواب یک کروموزوم (برنامه) به ازای ورودی های متفاوت (که در مواردی بسیار زیاد است) ،چقدر به
جواب واقعی نزدیک است (محاسبه شایستگی کروموزوم).
الگوریتم ژنتیک استفاده شده برای یافتن جواب بایستی تعداد نسلهای بسیار زیادی کار کند .برای یک مساله ساده ممکن است نیاز
باشد که الگوریتم ژنتیک چند صد هزار نسل کار کند.
با در نظر گرفتن موارد فوق می بینیم که برنامه نویس ی ژنتیک برای پیدا کردن جواب های مناسب ،نیاز به کامپیوترهای بسیار سریع
دارد.
ً
نکته :برای اینکه یک برنامه نویس ی ژنتیک با موفقیت به نتیجه برسد ،کامال به نحوه انتخاب عملگرها و توابع از یک طرف و پایانی های
طرف و پایانی های درخت های تجزیه دارد .انتخاب درست این موارد نه تنها رسیدن به جواب را تضمین می کند ،بلکه در سرعت رسیدن
در سرعت رسیدن به جواب نیز تاثیر فراوانی دارد .
کاربرد الگوریتم های ژنتیک
Jenetic algorithm
• نرمافزار شناسايي چهره با استفاده از تصوير ثبت شده به همت مبتکران ايراني طراحي و ساخته شده است .در اين روش ،شناسايي چهره
براساس فاصله اجزاي چهره و ويژگيهاي محلي و هندی ي صورت ميگیرد که تغيیرات ناش ي از گيم ،تغيیرات نور و افزايش سن کمترين تأثیر را
خواهد داشت .
•همچنین گرافها براي چهرههاي جديد با استفاده از الگويتمهاي ژنتيک ساخته شده و با استفاده از يک تابع تشابه ،قابل مقايسه با يکديگر
هستند که اين امر تأثیر بهسزايي در افزايش سرعت شناسايي خواهد داشت .
•توپولوژي هاي شبکه هاي کامپيوتري توزيع شده.
•بهينه سازي ساختار ملکولي شیميايي (شيمي)
•مهندی ي برق براي ساخت آنتنهاي Crooked-Wire Genetic Antenna
•مهندی ي نرم افزار
•بازي هاي کامپيوتري
•مهندی ي مواد
•مهندی ي سيستم
•رباتيک)(Robotics
•تشخيص الگو و استخراج داده )(Data mining
•حل مسئله فروشنده دوره گرد
•آموزش شبکه هاي عصبي مصنوعي
•ياددهي رفتار به رباتها با . GA
•يادگیري قوانین فازي با استفاده از الگويتم هاي ژنتيک.
نتیجه گیری
Jenetic algorithm
الگوريتمهاي ژنتيك الگوريتمهايي هستند كه داراي قدرت بسيار زيادي در يافتن جواب مسئله هستند،
اما بايد توجه داشت كه شايد بتوان كاربرد اصلي اين الگوريتم ها را در مسائلي در نظر گرفت كه داراي
ً
فضاي حالت بسيار بزرگ هستند و عمال برری ي همه حالتها براي انسان در زمانهاي نرمال (در حد عمر بشر) ممكن نيست.
ً
از طرفي بايد توجه داشت كه حتما بین حاالت مختلف مسئله بايد داراي پيوستگي مناسب و منطقي باشيم.
در نهايت الگوريتمهاي ژنتيك اين امكان را به ما ميدهد كه داراي حركتي سريع در فضاي مسئله به سوي هدف باشيم.
به گونهاي كه ميتوانيم تصور كنيم كه در فضاي حاالت مسئله به سوي جواب مشغول پرواز هستيم.
مراجع
Jenetic algorithm
www.genetic-programing.com/johnkoza.html
www.genetic-programing.com
www.generation5.org
www.ilam.ac.ir/weblogs
اطالعات شخصی ناقص و منقوص
یک پیام و پایان
Jenetic algorithm
همیشه سعی کنیم بهترین باشیم نه مهمترین
با تشکر
ساغ اوالسیز
Jenetic algorithm
مراجع
*
Jenetic algorithm
مراجع
*
Jenetic algorithm
مراجع
*