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
‫مراجع‬
*