700 likes | 973 Views
بسم الله الرحمن الرحیم . آشنایی با الگوریتم های ژنتیک . استاد راهنما : مهندس حسین زاده ارائه دهندگان : سعید ستاری احد پارسا حجت امامی. دوشنبه 24 فروردین. فهرست مطالب. Jenetic algorithm. استراتژیهای جستجو (مقدمه) الگوريتمهای تکاملی (پیشینهکاری)
E N D
بسم الله الرحمن الرحیم آشنایی با الگوریتم های ژنتیک استاد راهنما : مهندس حسین زاده ارائه دهندگان : سعید ستاری احد پارسا حجت امامی دوشنبه 24 فروردین
فهرست مطالب Jenetic algorithm • استراتژیهای جستجو (مقدمه) • الگوريتمهای تکاملی (پیشینهکاری) • الگوريتمهای ژنتيک • چند اصطلاح • آشنایی با الگوریتم های ژنتیک • ساختار الگوریتم های ژنتیک • عملگر های الگوریتم ژنتیک • مزایای الگوریتم ژنتیک • معایب و اشکالات وارد به الگوریتم های ژنتیک • برنامه نویسی ژنتیک • تاریخچه • قدم های اولیه برنامه نویسی ژنتیک • برنامه نویسی ژنتیک • مشکلات برنامه نویسی ژنتیک • کاربرد ها • مراجع
مقدمه : استراتژیهای جستجو Jenetic algorithm کامل استراتژیهای جستجو (Search Strategies) قطعی مکاشفه ای (Heuristic) غير قطعی تک جوابی برنامه ريزی تکاملی (Non-deterministic) مبتنی بر جمعيت استراتژی تکاملی (Population-based) الگوريتمهای تکاملی الگوريتمهای ژنتيک (Evolutionary Algorithms) برنامه ريزی ژنتيک الگوريتمهای تخمين توزيع (Estimation of Distribution Algorithms)
الگوریتم های تکاملی Jenetic algorithm
نمودار گردشی فرآيند يک الگوريتم تکاملی Jenetic algorithm • فرايند توليد تا وقتی که جواب مورد نظر حاصل شود ادامه می يابد • ( اغلب جمعيت اوليه بصورت تصادفی توليد می شود) جمعيت اوليه جمعيت جديد پروسه توليد جمعيتجديد از جمعيت فعلی جايگزينی جمعيت حاصل بجای جمعيت قبلی
Jenetic algorithm کروموزوم(Chromosome): در هر سلول مجموعه ای از موجودات هم شکل بنام کروموزوم وجود دارد . ژنGene)) : هر کروموزوم از تعدادی ژن تشکیل یافته است ؛ هر ژن یک خصیصه را کد می کند.(مثل رنگ چشم) آلل(Allele) : مجموعه های ممکن برای یک خصیصه آلل نامیده می شود. لوکس(Locus): هر ژن در کروموزوم موقعیت خاصی را داراست. ژنوم(Genome) : مجموعه کامل همه کروموزوم ها. ژنوتیپ(Genotype) : یک مجموعه خاص از ژن ها در ژنوم . فنوتیپ (Phenotype): ژنوتیپ ها بعد از تکامل بیشتر به فنوتیپ ها (که همان خصوصیات فیزیکی و روانی مانند رنگ چشم یا هوش و ...)تبدیل می شوند . چند اصطلاح (زمینه بیولوژیکی)
آشنایی با الگوریتم های ژنتیک Jenetic algorithm • الگوریتم های ژنتیک یکی از شاخه های پردازش تکاملی می باشند. • این الگوریتم ها با الهام از روند تکاملی طبیعت مسائل را حل می نمایند . • یعنی مانند طبیعت یک جمعیت از موجودات را تشکیل می دهند و با اعمالی بر روی این مجموعه به یک مجموعه بهینه و یا موجود بهینه دست می یابند. • با توجه به خصوصیات خاص خودشان به خوبی از عهده حل مسائلی که نیاز به بهینه سازی دارند • بر می آیند.
ساختار الگوریتم های ژنتیک Jenetic algorithm جواب جستجوی ژنتیکی تشکیل جمعیت اولیه مدلسازی مساله مساله ارزیابی جمعیت تست شرط خاتمه انتخاب فرزندان انتخاب والدین جهش بازترکیبی
ساختار الگوریتم های ژنتیک Jenetic algorithm انتخاب ( Selection) والدين(Parents) کروسور(Crossover) جمعيت اوليه( Initial Population) فرزندان( Offspring) جهش (Mutation) جمعيت جديد( New Population) جايگزينی جمعيت جديدبجای جمعيت قبلی
ساختار الگوریتم های ژنتیک Jenetic algorithm برای حل یک مساله با الگوریتم های ژنتیک مراحل ذیل را داریم: 1)مدلسازی مساله یا بازنمایی 2)تشکیل جمعیت اولیه 3)ارزیابی جمعیت 4)انتخاب والدین 5)باز ترکیبی 6)جهش 7)انتخاب فرزندان 8)تست شرط خاتمه الگوریتم
مکانیزم یک الگوریتم ژنتیک Jenetic algorithm شروع جمعيت اوليه T=0 ارزيابی جوابها خير آيا جواب مورد نظر حاصل شده؟ انتخاب بله کروسور پايان T=T+1 جهش
جدول هم ارزی مفاهيم بيولوژيکی و عناصر GA Jenetic algorithm سير تکاملی طبيعی GA مساله برای حل محيط جمعيت مجموعه جوابهای جايگزين توليد گام تکرار فرد جواب داوطلب جوابهای برگزيده شده والدين مقدار برازندگی ( تابع ارزياب) اندازة انطباق
جدول هم ارزی مفاهيم بيولوژيکی و عناصر GA Jenetic algorithm سير تکاملی طبيعی GA انتخاب والدين متناسب با مقدار برازندگی بقاء جواب رمزگذاری شده ژنوتيب جواب رمزگشايی شده فنوتيب موقعيت در رشته ژن مقدار در يک موقعيت معين در رشته آلل پروسه رسيدن از جمعيت فعلی به جمعيت بعدی تناوب توليد
Jenetic algorithm شبه کد یک الگوریتم ژنتیک ساده
Jenetic algorithm • برای اینکه بتوانیم یک مساله را بوسیله الگوریتم های ژنتیک حل کنیم، بایستی آنرا به فرم مخصوص مورد نیاز این الگوریتمها تبدیل کنیم. • در این روند ما بایستی راه حل مورد نیاز مساله را به گونهای تعریف کنیم که قابل نمایش بوسیله یک کروموزوم باشد. • اینکه چه نوع بازنمائی را برای مساله استفاده شود، به شخص طراح و فرم مساله بستگی دارد. • چند نمونه از بازنمائیهایی را که معمولاً استفاده می شوند : • اعداد صحیح • رشتههای بیتی • اعداد حقیقی در فرم نقطه شناور • اعداد حقیقی به فرم رشته های بیتی • یک مجموعه از اعداد حقیقی یا صحیح • ماشینهای حالت محدود • هر فرم دیگری که بتوانیم عملگرهای ژنتیک را بر روی آنها تعریف کنیم مدلسازی مساله (بازنمایی)
Jenetic algorithm • ارزیابی حمعیتFitness • برای اینکه بتوانیم موجودات بهتر را درون جمعیت تشخیص بدهیم بایستی معیاری را تعریف کنیم که بر اساس آن موجودات بهتر را تشخیص دهیم.به این کار، یعنی تعیین میزان خوبی یک موجود، ارزیابی آن موجود میگویند. • ارزیابی، اینگونه است که بر حسب اینکه موجود چقدر خوب است یک عدد به آن نسبت میدهیم، این عدد که برای موجودات بهتر • بزرگتر (یا کوچکتر) است را شایستگی آن موجود مینامیم. • به عنوان مثال در صورتی که به دنبال مینیمم یک تابع هستیم، مقدار شایستگی را میتوانیمورودیهایی که مقادیر تابع برای آنها کمتر است در نظر بگیریم که ورودیهای بهتری هستند. • بسته به نوع مساله ما میخواهیم شایستگی را بیشینه و یا کمینه کنیم. عملگر های الگوریتم ژنتیک
Jenetic algorithm • انتخاب Selection (انتخاب والدین) • سوق دادن جستجو به بخشهايی از فضا که امکان يافتن جوابهای با کیفيت بالاتر وجود دارد. • نسل جدیدی از راه حل ها را با انتخاب والدینی که بالاترین Fitness را دارند تولید می کند. • والدین :در هر نسل تعدادی از عناصر جمعیت این فرصت را پیدا میکنند که تولید مثل کنند. به این عناصر که از میان جمعیت • انتخاب میشوند، والدین میگویند. • روشهای مختلفی برای انتخاب والدین وجود دارند. در زیر به چند مورد از این روشها اشاره می کنیم: عملگر های الگوریتم ژنتیک
Jenetic algorithm • انتخاب تمام جمعیت بعنوان والدین: • در واقع هیچگونه انتخابی انجام نمیدهیم (همه عناصر انتخاب می شوند) . • انتخاب تصادفی: • بصورت تصادفی تعدادی از موجودات جمعیت را بعنوان والدین انتخاب میکنیم، این انتخاب میتواند با جایگذاری یابدون جایگذاری باشد. • در این روشها عناصر با شایستگی بیشتر شانس بیشتری برای انتخاب شدن بعنوان والدین را دارند. • سایر روشها: • این روشها با استفاده از تکنیکهایی سعی میکنند که انتخابهایی را ارائه دهند، که هم رسیدن به جواب نهایی را تسریع کنند و هم اینکه کمک میکنند که جواب بهینهتری پیدا شود. روش های انتخاب والدین
Jenetic algorithm معمول ترین روش های انتخاب : Elitist Selection مناسبترین عضو هر اجتماع انتخاب میشود. SelectionRoulette: یک روش انتخاب است که در آن عنصری که عدد برازش (تناسب) بیشتری داشته باشد، انتخاب میشود. ScalingSelection به موازات افزایش متوسط عدد برازش جامعه، سنگینی انتخاب هم بیشتر میشود و جزئیتر. این روش وقتی کاربرد دارد که مجموعه دارای عناصری باشد که عدد برازش بزرگی دارند و فقط تفاوتهای کوچکی آنها را از هم تفکیک میکند. Tournament Selection یک زیر مجموعه از صفات یک جامعه انتخاب میشوند و اعضای آن مجموعه با هم رقابت میکنند و سرانجام فقط یک صفت از هر زیرگروه برای تولید انتخاب میشوند. روش های انتخاب
Jenetic algorithm • ترکيب مجدد (Recombination/Crossover) • امکان ترکيب جوابهای جزيی (partial solutions) يافت شده و در نتيجه بدست آوردن جوابهایی با کيفيت بالاتر را فراهم میآورد. • در جریان عمل بازترکیبی به صورت اتفاقی بخشهایی از کروموزوم ها با یکدیگر تعویض می شوند. این موضوع باعث می شود که فرزندان ترکیبی از خصوصیات والدین خود را به همراه داشته باشند و دقیقاً مشابه یکی از والدین نباشند. • هدف تولید فرزند جدید می باشد به این امید که خصوصیات خوب دو موجود در فرزندشان جمع شده و یک موجود بهتری را تولید کند. عملگر های الگوریتم ژنتیک
Jenetic algorithm * روش انجام عمل بازترکیبی نحوه انجام عملیات بازترکیبی
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 بعنوان مثال جهش برای کروموزوم های به فرم باینری به صورت زیر می باشد: * جهش، برای بازنمایی های که از مقادیر حقیقی استفاده کردهاند، به این صورت پیاده سازی می شود که یک عدد حقیقی بصورت تصادفی در یک محدوده خاص تعیین و جایگزین عدد قبلی می گردد و یا اینکه عدد اصلی با یک مقدار خاص جمع گردد و ....برای سایر مدل های بازنمایی مساله نیز انواع خاصی از جهش پیشنهاد شده است. عملگر های الگوریتم ژنتیک نحوه انجام عملیات جهش
Jenetic algorithm جهش بيتی ( Bitwise Mutation) یک مثال
Jenetic algorithm جهش ابتکاری(Heuristic): با توجه به اینکه هدف از جهش بهتر شدن کروموزوم ها و یا اینکه پیدا شدن یک راه حل جدید است، می توانیم به جای تغییر تصادفی کروموزوم ها، تغییرات کروموزوم ها را هدفمند کنیم. برای اینکار، بسته به نوع مساله، بر روی کروموزوم انتخاب شده یکی از روشهای کلاسیک حل مساله را اعمال کرده، و جواب حاصل را بعنوان کروموزوم جدید جایگزین می کنند. استفاده از این روش که از آن با عنوان جهش ابتکاری یاد می شود، بسته به نوع مساله ممکن است دستیابی به راه حل نهایی را سریعتر کنند. * جهش باعث ایجاد تغییرات ناخواسته در جمعیت شده، و باعث بوجود آمدن موجودات جدید می شود. در واقع برتری جهش نسبت به بازترکیبی نیز همین مطلب می باشد.در صورتی که فقط از جهش استفاده کنیم، ممکن است که بتوانیم جواب بهینه را پیدا کنیم، اما استفاده از بازترکیبی به تنهایی پیدا شدن جواب بهینه را تضمین نمی کند. نکاتی در مورد عمل جهش
Jenetic algorithm • چون که الگوریتم های ژنتیک بر پایه تولید و تست می باشند، جواب مساله مشخص نیست و نمی دانیم که کدامیک از جواب های تولید شده جواب بهینه است تا شرط خاتمه را پیدا شدن جواب در جمعیت تعریف کنیم. به همین دلیل، معیارهای دیگری را برای شرط خاتمه در نظر میگیریم: • تعداد مشخصی نسل: میتوانیم شرط خاتمه را مثلاً 100 دور چرخش حلقه اصلی برنامه قرار دهیم. • عدم بهبود در بهترین شایستگی جمعیت در طی چند نسل متوالی • واریانس شایستگی جمعیت از یک مقدار مشخصی پائین تر بیاید و یا اینکه در طی چند نسل متوالی مشخص، تغییر نکند. • بهترین شایستگی جمعیت از یک حد خاصی کمتر شود. • شرایط دیگری نیز میتوانیم تعریف کنیم و همچنین میتوانیم ترکیبی از موارد فوق را به عنوان شرط خاتمه به کار ببندیم. شرط خاتمه الگوریتم
Jenetic algorithm • این نکته که الگوریتم های ژنتیک خوب یا بد هستند، تا حد زیادی به مساله مربوط میشود . • این الگوریتمها پارامترهای بسیار زیادی دارند که با تنظیم صحیح این پارامترها میتوان نتایج بسیار متفاوتی بدست بیاوریم. • مزایای الگوریتم های ژنتیک • این الگوریتمها همیشه یک جواب نسبتاً خوب پیدا خواهند کرد • در هر مرحله از کار میتوانیم الگوریتم را متوقف کنیم. در این حالت نیز یک جواب خواهیم داشت. • به راحتی میتوانیم این الگوریتمها را بصورت موازی بر روی چند پردازنده اجرا کنیم • فهم آسان و مجزا بودن • پشتیبانی از بهینه سازی چند تابعی • همیشه یک جواب داریم که با گذشت زمان بهتر می شود • روشهای مختلفی برای افزایش سرعت و پیشرفت الگوریتم وجود دارد. • بهره برداری ساده از جواب قبلی. • انعطاف پذیر برای کاربرد های ترکیبی. مزایا و معایب استفاده از الگوریتم های ژنتیک
Jenetic algorithm • معایب • یک جواب خوب پیدا می کنند ولی ممکن است جواب بهینه را پیدا نکنند • به حافظه و محاسبات زیادی نیاز دارند • در مورد اینکه جواب پیدا شده چقدر خوب است و آیا جواب بهتری وجود دارد، نمی توانیم هیچگونه ادعائی داشته باشیم • پشتوانه ریاضی ضعیفی دارند • در دو بار اجرای مختلف، جواب های متفاوتی دریافت می کنیم • تعدد پارامترهای الگوريتم: هر چند الگوریتمهای ژنتیکی در دسته الگوریتمهای بهینهسازی قرار میگیرند، اما تنظیم کردن این پارامترها گاهی به یک مساله بهینهسازی دیگر تبدیل خواهد شد. • نحوه کدینگ، نوع عملگر ترکیب، نرخ ترکیب، نوع عملگر جهش، نرخ جهش معایب الگوریتم های ژنتیک
Jenetic algorithm • استراتژیهای جستجو (مقدمه) • الگوريتمهای تکاملی (پیشینهکاری) • الگوريتمهای ژنتيک • چند اصطلاح • آشنایی با الگوریتم های ژنتیک • ساختار الگوریتم های ژنتیک • عملگر های الگوریتم ژنتیک • مزایای الگوریتم ژنتیک • معایب و اشکالات وارد به الگوریتم های ژنتیک • برنامه نویسی ژنتیک • تاریخچه • قدم های اولیه برنامه نویسی ژنتیک • برنامه نویسی ژنتیک • مشکلات برنامه نویسی ژنتیک • کاربرد ها • مراجع فهرست مطالب
Jenetic algorithm تاریخچه برنامه نویسی ژنتیک در اوائل دهه نود میلادی بوسیله John Koza در آمریکا مطرح شد، و به تدریج توسعه داده شد. البته لازم به ذکر است که بیشترین پیشرفت ها در این زمینه نیز بوسیله خود آقای Koza در طی سالهای مختلف ارائه شده است . برنامه نویسی ژنتیک چیست؟ برنامه نویسی ژنتیک در واقع به هدف ما، یعنی برنامه نویسی اتوماتیک (که با نامهای Automatic Programming, Program synthesis, Program induction نیز شناخته می شود) با استفاده از پرورش یک جمعیت از برنامه های کامپیوتری می رسد. پرورش این جمعیت با استفاده از نسخه الهام گرفته از عملهای انتخاب و تولید مثل بیولوژیکی صورت می گیرد. برنامه نویسی ژنتیک
- + * / + 3 pow x y 10 32 x y Jenetic algorithm یکی از نیازمندیهای اساسی که در تولید برنامهها نیاز است، این است که بایستی از لحاظ دستوری، درستی برنامههای نوشته شده تائید گردند. بنابراین برنامه بایستی در ابتدا به یک شکل بهتری تبدیل شود. بنابراین کامپایلرها سعی میکنند که برنامه نوشته شده را به یک فرم یکنوا و سادهتر که درختهای تجزیه نام دارند، تبدیل کنند. در جریان کامپایل یک برنامه سطح بالا (مثل C/C++)، کد نوشته شده، به یک درخت تجزیه تبدیل میشود، تا کامپایلر راحتتر بتواند بر روی آن کار کند. از طرف دیگر در صورتی که ما در برنامه نویسی ژنتیک از این ساختار استفاده کنیم، هم تعریف عملگرهای ژنتیک بر روی آن ساده تر است و هم دردسر خطایابی کدها و اصلاح خطاهای دستوری را نخواهیم داشت. زیرا در صورتی که کامپایلر بتواند از روی برنامه نوشته شده، با موفقیت درخت تجزیه را ایجاد کند، برنامه نوشته شده از لحاظ دستوری خطائی ندارد. به عنوان مثال برای عبارت (x/y+(10+32))-(3*(Pow(x , y))) درخت تجزیه به صورت زیر است: درخت های تجزیه (Parse Trees)
Jenetic algorithm برای اینکه بتوانیم با استفاده از برنامه نویسی ژنتیک یک برنامه برای یک مساله سطح بالا تهیه کنیم، بایستی با انجام یک سری اعمال، برنامه سطح بالا را به فرم مناسب الگوریتم ژنتیک تبدیل کنیم. پنج قدم اساسی زیر را باید در ابتدا بوسیله یک عامل انسانی، انجام دهیم: یک مجموعه از عناصر پایانی تعیین کنیم: عناصر پایانی، متغیرهای مستقل مساله، توابع بدون پارامتر ورودی یا ثابت هایی هستند که بصورت تصادفی ایجاد شده اند. 2) مجموعه توابع اولیه که بایستی برنامه بر پایه آنها تولید شود. 3) معیار شایستگی (برای اینکه بوسیله آن بتوانیم برنامه های تولید شده بوسیله الگوریتم ژنتیک را ارزیابی و برنامه های بهتر را شناسائی کنیم) 4) پارامترهایی که برای کنترل اجرای الگوریتم ژنتیک مورد نیاز هستند، به عنوان مثال نوع انتخاب والدین و انتخاب فرزندان، نرخ جهش، نرخ بازترکیبی و .... 5) شرط خاتمه و روشی برای اینکه نتیجه اجرا را بتوانیم تعیین کنیم. قدم های اولیه برنامه نویسی ژنتیک
Jenetic algorithm • روند اجرای الگوریتم های ژنتیک را بدین صورت در نظر گرفتیم : • 1) ایجاد یک جمعیت اولیه • 2) ارزیابی عناصر جمعیت • 3) بازترکیبی • 4) جهش • 5) تکرار موارد فوق تا زمانی که به نتیجه مورد نظر نرسیده ایم . • در رابطه با برنامه نویسی ژنتیک بازنمائی (ارئه مدل برای مساله) کروموزومها را بصورت درخت های تجزیه درنظر می گیریم . • مثال) مساله یافتن برنامه ای برای محاسبه تابع XORبا استفاده از توابع AND،OR و NOTرا مطرح و نشان می دهیم که الگوریتم به صورت نمادین، چگونه جواب مورد نیاز را پیدا خواهد کرد. برنامه نویسی ژنتیک به همراه یک مثال
Jenetic algorithm جدول درستی برای توابع AND، OR، NOT و XOR به صورت زیر است : برای حل مساله با استفاده از برنامه نویسی ژنتیک به این صورت عمل می کنیم که مجموعه عملگرهای منطقی {AND, OR, NOT}را به عنوان توابع برنامه و مجموعه {A, B, True, False}را به عنوان عناصر پایانی مطرح می کنیم. دو نکته در اینجا مهم است ، که اولاً هر ترکیبی از توابع که در درخت تجزیه وارد شود قابل ارزیابی است و باعث بروز خطا نمی شود و دوم اینکه مساله با استفاده از توابع و پایانی هایی که ذکر شده است، قابل بازسازی است. برنامه نویسی ژنتیک
AND AND AND OR AND OR AND FALSE B A B Jenetic algorithm • قدم اول: ایجاد جمعیت اولیه. • نکته ای که در مورد درختهایی که به جمعیت اضافه می شوند، بایستی مدنظر قرار گیرد، کنترل عمق درخت ها است. • در تولید جمعیت اولیه دو استراتژی مختلف وجود دارد: • روش اول این است که تمام درختهای اولیه ایجاد شده یک عمق مشخص داشته و بصورت پر باشند، روش تولید این درختها به این شکل است که بصورت تصادفی و سطح به سطح از توابع موجود بصورت تصادفی انتخاب و به جای گره های درخت قرار می دهند. این روند آنقدر تکرار می شود تا به بیشترین عمق مورد نظر برسیم، در این حالت برای سطح آخر ، از مقادیر مجموعه پایانی ها به جای گره های درخت قرار می دهیم تا یک درخت تجزیه کامل تشکیل شود. البته می توانیم درخت های پر با عمق های متفاوت به عنوان جمعیت اولیه تولید کنیم. که معمولاً روش دوم بهتر است. برنامه نویسی ژنتیک
AND AND AND B B A B Jenetic algorithm در روش دوم به این صورت عمل می شود که محدودیتی در نوع درخت ایجاد شده اولیه وجود ندارد، تنها محدودیت ها در این است که یک درخت تجزیه معتبر داشته باشیم و اینکه عمق درخت ایجاد شده از حداکثر مجاز فراتر نرود. نمونه تشکیل این درختها در شکل زیر نشان داده شده است. برنامه نویسیژنتیک OR OR
Jenetic algorithm قدم دوم: ارزیابی عناصر. برای ارزیابی یک کروموزم بایستی بتوانید روشی را بدست بیاورید که بصورت عددی بیان کند که یک برنامه چقدر خوب است و در واقع چقدر توانسته است که هدف مورد نیاز را برآورده کند. معمولاً روند کار به این صورت است که برنامه را با پارامترهای مختلف چندین بار اجرا می کنند و با ارزیابی خروجی ارائه شده توسط برنامه بیان می کنند که برنامه چقدر توانسته است هدف مورد نظر ما را برآورده کند. برای مثال ما، بایستی نتیجه خروجی را برای چهار حالت ممکن برای Aو B امتحان کنیم و بر اساس جدول درستی تعیین کنیم که برنامه چقدر توانسته است، خروجی مناسب را تولید کند. البته در حالت کلی ممکن است که برای یک برنامه تست های مختلفی برای ارزیابی آن طراحی شود. برنامه نویسی ژنتیک
AND AND OR B FALSE B A B A B Jenetic algorithm قدم سوم: بازترکیبی. برای انجام بازترکیبی به سادگی به این صورت عمل می کنیم که دو عنصر (زیر درخت یا پایانی)، را از دو درخت پدر، به صورت تصادفی انتخاب می کنیم و آنها را بین دو درخت جابجا می کنیم. به عنوان مثال برای برنامه های مثال فوق این عمل به صورت زیر خواهد بود: اگر والدین را به صورت زیر درنظر بگیریم: برنامه نویسی ژنتیک OR AND
AND AND OR B FALSE A B A B B Jenetic algorithm با انتخاب گرههای ORو B به ترتیب از درختهای راست و چپ، فرزندان حاصل از این دو درخت در اثر بازترکیبی به صورت زیر خواهند بود: برنامه نویسی ژنتیک OR AND
AND AND AND AND B A B A B A A B B B Jenetic algorithm قدم چهارم: جهش. انجام جهش نیز مانند بازترکیبی ساده است. روند کار به این صورت است که هر تابع یا پایانی در درخت تجزیه را میتوانیم با هر تابع یا پایانی دیگری جایگزین کنیم، حتی ممکن است که به این شکل عمل کنیم که به جای یک زیر درخت یا پایانی، یک زیر درخت دیگر (که به روشی که در تولید جمعیت اولیه گفته شد، ایجاد شده است) را جایگزین میکنیم. در این حالت ممکن است که بخواهیم یک زیر درخت را با یک زیر درخت دیگر جایگزین کنیم، برای انجام کار، بایستی تمام زیر درخت مربوطه را از درخت حذف کنیم و به جای آن زیر درخت یا پایانی جدید را قرار دهیم. اما اگر میخواهیم یک پایانی را با یک زیر درخت جایگزین کنیم، روند کار به این صورت است که به جای گرهپایانی زیر درخت مورد نظر را قرار میدهیم. برای درک بهتر مطلب تصویر زیر را داریم : برنامه نویسی ژنتیک جهش جهش OR OR OR
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 همیشه سعی کنیم بهترین باشیم نه مهمترین با تشکر ساغ اولاسیز یک پیام و پایان