الگوریتم ژنتیک1- مقدمه محدوده کاری الگوریتم ژنتیک بسیار وسیع می باشد و هر روز با پیشرفت روزافزون علوم و تکنولوژی استفاده از این روش در بهینه سازی و حل مسائل بسیار گسترش یافته است. الگوریتم ژنتیک یکی از زیر مجموعه های محاسبات تکامل یافته می باشد که رابطه مستقیمی با مبحث هوش مصنوعی دارد در واقع الگوریتم ژنتیک یکی از زیر مجموعه های هوش مصنوعی می باشد. الگوریتم ژنتیک را میتوان یک روش جستجوی کلی نامید که از قوانین تکامل بیولوژیک طبیعی تقلید میکند .الگوریتم ژنتیک برروی یکسری از جوابهای مساله به امید بدست آوردن جوابهای بهتر قانون بقای بهترین را اعمال می کند. درهر نسل به کمک فرآیند انتخابی متناسب با ارزش جوابها و تولید مثل جواب-های انتخاب شده به کمک عملگرهایی که از ژنتیک طبیعی تقلید شدهاند ,تقریبهای بهتری از جواب نهایی بدست میآید. این فرایند باعث میشود که نسلهای جدید با شرایط مساله سازگارتر باشد.2- تاریخچه حساب تکاملی ,برای اولین بار در سال 1960 توسط آقای ریچنبرگ ارائه شد که تحقیق وی در مورد استراتژی تکامل بود.بعدها نظریه او توسط محققان زیادی مورد بررسی قرار گرفت تا اینکه الگوریتم ژنتیک (GA ) توسط جان هولند(John Holland ) و در سال 1975 در دانشگاه میشیگان ,ارائه شد.در سال 1992 نیز جان کوزا (John Koza ) از الگوریتم ژنتیک (GA ) برای حل و بهینه سازی مسائل مهندسی پیشرفته استفاده کرد و توانست برای اولین بار روند الگوریتم ژنتیک (GA ) را به زبان کامپیوتر در آورد و برای آن یک زبان برنامه نویسی ابداع کندکه به این روش برنامه نویسی ,برنامه نویسی ژنتیک (GP ) گویندو نرم افزاری که توسط وی ابداع گردید به نرم افزار LISP مشهور است که هم اکنون نیز این نرم افزار کاربرد زیادی در حل و بهینه سازی مسائل مهندسی پیدا کرده است .2-1 تاریخچه بیولوژیکی بدن هر موجود زنده ای از سلول تشکیل یافته است و هر سلول هم از کروموزوم تشکیل یافته است.کروموزومها نیز از رشته های DNA تشکیل یافته اند.کروموزومها هم از ژن تشکیل یافته اند.و به هر بلوک DNA یک ژن می گویند و هر ژن نیز از یک پروتئین خاص ومنحصر به فرد تشکیل یافته است.و به مجموعه از ژنها یک ژنوم (Genome ) می گویند. 3- ساختار الگوریتمهای ژنتیكی
به طور كلی, الگوریتمهای ژنتیكی از اجزاء زیر تشكیل میشوند: 3-1 كروموزومدر الگوریتمهای ژنتیكی, هر كروموزوم نشان دهنده یك نقطه در فضای جستجو و یك راهحل ممكن برای مسئله مورد نظر است. خود كروموزومها (راه حلها) از تعداد ثابتی ژن (متغیر) تشكیل میشوند. برای نمایش كروموزومها, معمولاً از كدگذاریهای دودویی (رشتههای بیتی) استفاده میشود.3-2 جمعیتمجموعهای از كروموزومها یك جمعیت را تشكیل میدهند. با تاثیر عملگرهای ژنتیكی بر روی هر جمعیت, جمعیت جدیدی با همان تعداد كروموزوم تشكیل میشود. 3-3 تابع برازندگیبه منظور حل هر مسئله با استفاده از الگوریتمهای ژنتیكی, ابتدا باید یك تابع برازندگی برای آن مسئله ابداع شود. برای هر كروموزوم, این تابع عددی غیر منفی را برمیگرداند كه نشان دهنده شایستگی یا توانایی فردی آن كروموزوم است. 3-4 عملگرهای الگوریتم ژنتیك
در الگوریتمهای ژنتیكی, در طی مرحله تولید مثل ازعملگرهای ژنتیكی استفاده میشود. با تاثیر این عملگرها بر روی یك جمعیت, نسل بعدی آن جمعیت تولید میشود. عملگرهای انتخاب , آمیزش و جهش معمولاً بیشترین كاربرد را در الگوریتمهای ژنتیكی دارند. 3-4-1 عملگر انتخاب (Selection ):این عملگر از بین كروموزومهای موجود در یك جمعیت, تعدادی كروموزوم را برای تولید مثل انتخاب میكند. كروموزومهای برازندهتر شانس بیشتری دارند تا برای تولید مثل انتخاب شوند. روش های انتخاب : - : Elitist Selection (انتخاب نخبگان)
o مناسبترین عضو هر اجتماع انتخاب میشود. با توجه به مقدار شایستگی که از تابع ارزیاب دریافت کرده است. - نمونهبرداری به روش چرخ رولت
در این روش, به هر فرد قطعهای از یك چرخ رولت مدور اختصاص داده میشود. اندازه این قطعه متناسب با برازندگی آن فرد است. چرخ N بار چرخانده میشود كه N تعداد افراد در جمعیت است. در هر چرخش, فرد زیر نشانگر چرخ انتخاب میشود و در مخزن والدین نسل بعد قرار میگیرد. این روش میتواند به صورت زیر پیادهسازی شود:1- نرخ انتظار كل افراد جمعیت را جمع كنید و حاصل آن را T بنامید.2- مراحل زیر را N بار تكرار كنید:یك عدد تصادفی r بین 0 و T انتخاب كنید.در میان افراد جمعیت بگردید و نرخهای انتظار( مقدار شایستگی) آنها را با هم جمع كنید تا این كه مجموع بزرگتر یا مساوی r شود. فردی كه نرخ انتظارش باعث بیشتر شدن جمع از این حد میشود, به عنوان فرد برگزیده انتخاب میشود.شکل 2 نحوه ارزیابی شایستگی در چرخ رولت - Tournament Selection (انتخاب تورنومنت) :
یک زیر مجموعه از صفات یک جامعه انتخاب میشوند و اعضای آن مجموعه با هم رقابت میکنند و سرانجام فقط یک صفت از هر زیرگروه برای تولید انتخاب میشوند.3-4-2 عملگر آمیزش (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 یك كروموزوم قبل و بعد از اعمال عملگر جهش |
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- شرط پایان الگوریتمچون که الگوریتم های ژنتیک بر پایه تولید و تست می باشند، جواب مساله مشخص نیست و نمی دانیم که کدامیک از جواب های تولید شده جواب بهینه است تا شرط خاتمه را پیدا شدن جواب در جمعیت تعریف کنیم. به همین دلیل، معیارهای دیگری را برای شرط خاتمه در نظر می گیریم: - تعداد مشخصی نسل: می توانیم شرط خاتمه را مثلاً 100 دور چرخش حلقه اصلی برنامه قرار دهیم.
- عدم بهبود در بهترین شایستگی جمعیت در طی چند نسل متوالی
- بهترین شایستگی جمعیت تا یک زمان خاصی تغییری نکند.
ü شرایط دیگری نیز می توانیم تعریف کنیم و همچنین می توانیم ترکیبی از موارد فوق را به عنوان شرط خاتمه به کار ببندیم. یک مثال ساده: ما یک مربع 3*3 داریم که می خواهیم اعدادی بین 1تا15 را در این مربع قرار دهیم به طوری که جمع اعداد در هر سطرو ستون برابر 24 شود. ابن مسئله تا حدودی پیچیده است.ممکن است یک انسان بتواند آن را در مدت زمانی مشخص حل کند ولی هیچ گاه یک کامپیوتر نخواهد توانست آن رادر مدت زمان کوتاهی با استفاده از اعداد تصادفی حل کند. ولی الگوریتم ژنتیک می تواند این مشکل را حل کند.نسل اولاولین گام ایجاد کردن یک نسل ابتدایی برای شروع کار است که شامل تعدادی ژنوم تصادفی است.این ژنوم ها به صورت باینری(0و1) نشان داده می شوند. حالا مثال مان:اول یکسری عدد به صورت تصادفی تولید می شوند. هر ژنوم یا کروموزوم شامل اطلاعاتی برای هر 9 جای خالی است .چون این اعداد مقادیر بین 0تا15 دارند می توان آنها را با 4 بیت یا ژن داده نمایش داد. پس هر ژنوم شامل 36 بیت است. یک نمونه ژنوم می تواند به شکل زیر باشد:Bits (Genes) 0110 1100 1111 1011 0100 1010 0111 0101 1110Values(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 CrossingFather 011110010011 001011011000111011010000Mother 010100111110 010101111101000100010010After CrossingChild1 011110010011 010101111101000100010010Child2 010100111110 0010110110001110110100003- جهش(Mutation) قبل از این که ژنوم ها در نسل بعدی قرار بگیرند،احتمال دارد دچار جهش یا تغییر ناگهانی شوند شوند.جهش یک تغییر ناگهانی در ژن است.در ژنهای باینری این تغییر به معنای تغییر یک بیت از 0به 1 یا از 1 به 0 است. درجه جهش نشان دهنده احتمال بروز جهش در یک ژن است و تغریباً بین 1-5% برای ژنهای باینری و 5-20%برای ژنهای عددی است.این روند تا تولید نسل های متعددی ادامه می یابد تا در نهایت به جواب برسیم.7- برخی از كاربرد الگوریتمهای ژنتیكیتوپولوژی های شبکه های کامپیوتی توزیع شده.بهینه سازی ساختار ملکولی شِمیایی (شیمی)مهندسی برق برای ساخت آنتنهای Crooked-Wire Genetic Antennaمهندسی نرم افزاربازی های کامپیوتریمهندسی موادمهندسی سیستمرباتیک(Robotics)تشخیص الگوو استخراج داده(Data mining)حل مسئله فروشنده دوره گردآموزش شبکه های عصبی مصنوعییاددهی رفتار به رباتها با GA .یادگیری قوانین فازی با استفاده از الگویتم های ژنتیک.8- نتیجه گیریالگوریتمهای ژنتیك الگوریتمهایی هستند كه دارای قدرت بسیار زیادی در یافتن جواب مسئله هستند، اما باید توجه داشت كه شاید بتوان كاربرد اصلی این الگوریتم ها را در مسائلی در نظر گرفت كه دارای فضای حالت بسیار بزرگ هستند و عملاً بررسی همه حالتها برای انسان در زمانهای نرمال (در حد عمر بشر) ممكن نیست. از طرفی باید توجه داشت كه حتماً بین حالات مختلف مسئله باید دارای پیوستگی مناسب و منطقی باشیم. در نهایت الگوریتمهای ژنتیك این امكان را به ما میدهد كه دارای حركتی سریع در فضای مسئله به سوی هدف باشیم. به گونهای كه میتوانیم تصور كنیم كه در فضای حالات مسئله به سوی جواب مشغول پرواز هستیم. الگوریتم ژنتیک (Genetic Algorithm - GA) تکنیک جستجویی در علم رایانه برای یافتن راهحل تقریبی برای بهینهسازی و مسائل جستجو است. الگوریتم ژنتیک نوع خاصی از الگوریتمهای تکامل است که از تکنیکهای زیستشناسی فرگشتی مانند وراثت و جهش استفاده میکند. این الگوریتم برای اولین بار توسط جان هلند معرفی شد.
در واقع الگوریتمهای ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده میکنند.الگوریتمهای ژنتیک اغلب گزینه خوبی برای تکنیکهای پیشبینی بر مبنای رگرسیون هستند. مختصراً گفته میشود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامهنویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده میکند.مسئلهای که باید حل شود ورودی است و راهحلها طبق یک الگو کد گذاری میشوند که تابع fitness نام دارد هر راه حل کاندید را ارزیابی میکند که اکثر آنها به صورت تصادفی انتخاب میشوند.
الگوریتمهای ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده میکنند. الگوریتمهای ژنتیک اغلب گزینه خوبی برای تکنیکهای پیشبینی بر مبنای رگرسیون هستند.
برای مثال اگر بخواهیم نوسانات قیمت نفت را با استفاده از عوامل خارجی و ارزش رگرسیون خطی ساده مدل کنیم، این فرمول را تولید خواهیم کرد : قیمت نفت در زمان t = ضریب 1 نرخ بهره در زمان t + ضریب 2 نرخ بیکاری در زمان t + ثابت 1 . سپس از یک معیار برای پیدا کردن بهترین مجموعه ضرایب و ثابتها جهت مدل کردن قیمت نفت استفاده خواهیم کرد. در این روش 2 نکته اساسی وجود دارد. اول این که روش خطی است و مسئله دوم این است که ما به جای اینکه در میان "فضای پارامترها" جستجو کنیم، پارامترهای مورد استفاده را مشخص کردهایم.
با استفاده از الگوریتمهای ژنتیک ما یک ابر فرمول یا طرح، تنظیم میکنیم که چیزی شبیه "قیمت نفت در زمان t تابعی از حداکثر 4 متغیر است" را بیان میکند. سپس دادههایی برای گروهی از متغیرهای مختلف، شاید در حدود 20 متغیر فراهم خواهیم کرد. سپس الگوریتم ژنتیک اجرا خواهد شد که بهترین تابع و متغیرها را مورد جستجو قرار میدهد. روش کار الگوریتم ژنتیک به طور فریبندهای ساده، خیلی قابل درک و به طور قابل ملاحظهای روشی است که ما معتقدیم حیوانات آنگونه تکامل یافتهاند. هر فرمولی که از طرح داده شده بالا تبعیت کند فردی از جمعیت فرمولهای ممکن تلقی میشود.
متغیرهایی که هر فرمول دادهشده را مشخص میکنند به عنوان یکسری از اعداد نشان دادهشدهاند که معادل [دی ان ای|دی.ان.ای](DNA) آن فرد را تشکیل میدهند.
موتور الگوریتم ژنتیک یک جمعیت اولیه از فرمول ایجاد میکند. هر فرد در برابر مجموعهای از دادههای مورد آزمایش قرار میگیرند و مناسبترین آنها (شاید 10 درصد از مناسبترینها) باقی میمانند؛ بقیه کنار گذاشته میشوند. مناسبترین افراد با هم جفتگیری (جابجایی عناصر دی ان ای) و تغییر (تغییر تصادفی عناصر دی ان ای) کردهاند. مشاهده میشود که با گذشت از میان تعداد زیادی از نسلها، الگوریتم ژنتیک به سمت ایجاد فرمولهایی که دقیقتر هستند، میل میکنند. در حالی که شبکههای عصبی هم غیرخطی و غیرپارامتریک هستند، جذابیت زیاد الگوریتمهای ژنتیک این است نتایج نهایی قابل ملاحظهترند. فرمول نهایی برای کاربر انسانی قابل مشاهده خواهد بود، و برای ارائه سطح اطمینان نتایج میتوان تکنیکهای آماری متعارف را بر روی این فرمولها اعمال کرد. فناوری الگوریتمهای ژنتیک همواره در حال بهبود است و برای مثال با مطرح کردن معادله ویروسها که در کنار فرمولها و برای نقض کردن فرمولهای ضعیف تولید میشوند و در نتیجه جمعیت را کلاً قویتر میسازند.
مختصراً گفته میشود که الگوریتم ژنتیک (یا GA) یک تکنیک برنامهنویسی است که از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده میکند. مسئلهای که باید حل شود ورودی است و راه حلها طبق یک الگو کدگذاری میشوند که تابع fitness نام دارد و هر راه حل کاندید را ارزیابی میکند که اکثر آنها به صورت تصادفی انتخاب میشوند.
الگوریتم ژنتیک (GA) یک تکنیک جستجو در علم رایانه برای یافتن راه حل بهینه و مسائل جستجو است. الگوریتمهای ژنتیک یکی از انواع الگوریتمهای تکاملیاند که از علم زیستشناسی مثل وراثت، جهش، [انتخاب ناگهانی(زیستشناسی)|انتخاب ناگهانی]، انتخاب طبیعی و ترکیب الهام گرفته شده.
عموماً راهحلها به صورت 2 تایی 0 و 1 نشان داده میشوند، ولی روشهای نمایش دیگری هم وجود دارد. تکامل از یک مجموعه کاملاً تصادفی از موجودیتها شروع میشود و در نسلهای بعدی تکرار میشود. در هر نسل، مناسبترینها انتخاب میشوند نه بهترینها.
یک راهحل برای مسئله مورد نظر، با یک لیست از پارامترها نشان داده میشود که به آنها کروموزوم یا ژنوم میگویند. کروموزومها عموماً به صورت یک رشته ساده از دادهها نمایش داده میشوند، البته انواع ساختمان دادههای دیگر هم میتوانند مورد استفاده قرار گیرند. در ابتدا چندین مشخصه به صورت تصادفی برای ایجاد نسل اول تولید میشوند. در طول هر نسل، هر مشخصه ارزیابی میشود وارزش تناسب (fitness) توسط تابع تناسب اندازهگیری میشود