IDS: Intrusion Detection System

intrusion detection system concepts and techniques

IDS: Intrusion Detection System

intrusion detection system concepts and techniques

سیستم تشخیص نفوذ مبتنی بر شبکه عصبی تکاملی با استفاده از بهینه سازی چند منظوره

در این بخش به معرفی مقاله" A new evolutionary neural networks based on intrusion  detection systems using multiverse optimization" در خصوص طراحی یک سیستم تشخیص نفوذ با رویکرد جدید در شبکه های عصبی تکاملی با استفاده از بهینه ساز چند منظوره می پردازیم.

چکیده :

ساخت یک سیستم تشخیص نفوذ یک به فوریت در سیستم ها و شبکه های کامپیوتر تبدیل شده است تا بتوان با استفاده از آن رخنه های امنیتی شبکه را شناسایی نمود.ساخت یک سیستم تشخیص نفوذ موثر و انعطاف پذیر امری  بسیار ضروری است.در این مقاله یک الگوریتم تکامل طبیعی (natural evolutionary algorithm) جدید که بهینه ساز چند منظوره (multiverse optimizer MVO) نامیده می شود مورد بررسی قرار گرفته و با شبکه های عصبی برای توسعه یک راه کار پیشرفته تشخیص برای سیستم های تشخیص نفوذ ترکیب می شود.در این متن  ترکیب شبکه های عصبی و الگوریتم تکاملی منجر به تولید شبکه های عصبی تکاملی می گردد evolutionaryneural network ENN.شبکه های عصبی تکاملی باعث می شود یک سیستم بهبود یافته برای حل مسائلی که شبکه های عصبی معمولی با آن برخورد دارند ایجاد شود.ایده اصلی در این راه کار این است که از MVO برای آموزش یک شبکه عصبی مصنوعی چند لایه پیش خورد (feed forward multilayer artificial neural network) برای شناسایی حملاتی جدید استفاد شود.راه کار ارائه شده بر روی مجموعه داده NSL-KDD و یک مجموعه داده جدید تر تحت نام UNSWNB15 اعمال شده است.در این روش کارایی راه کار ارائه شده در تشخیص انواع مختلف حملات نمایش داده می شود.نتایج بدست آمده  از UNSWNB15 بهتر از نتایجی است که با استفاده از NSL-KDD حاصل شده  است.همچنین کارایی متدی که توسط ما ارائه شده است  هنگامی که با روش های شناخته شده دیگر مثل PSO-ANN مقایسه می شود ثابت می شود.

روش کار :

در این مطالعه سیستم تشخیص نفوذ بر پایه شبکه عصبی مصنوعی که توسط MVO آموزش داده می شود  پیاده سازی می گردد.هدف این است که یک چهارچوب نو  و قدرتمند با استفاده از آموزش شبکه های عصبی توسط الگوریتم های تکاملی بدست آید.شبکه های عصبی این توانایی را دارند که مشکلات متعددی را که با راهکارهای موجود برای تشخیص نفوذ با آنها مواجه هستیم را مرتفع نمایند.شبکه های عصبی ویژگی های معمول کاربران سیستم را شناسایی و انحرافات آماری قابل توجه از رفتارهای تعریف شده کاربران را تشخیص می دهند.علاوه بر این شبکه های عصبی دارای ساختاری باز ، قابل توسعه و انعطاف پذیر هستند.آنها همچنین یک مدل عمومی دانش از رفتار ها در یک محیط تعریف می نمایند.این فرآیند عمدتا شامل ارزیابی پارامتر های نرونهاست تا توانایی تعریف ارتباطات میان الگوهای ورودی و خروجی هدف را بوسیله آموزش برای شبکه های عصبی مصنوعی فراهم نماید.آموزش شبکه عصبی یک وظیفه بسیار پیچیده است و یکی از کارهای مهم در مسائلی که نیاز به آموزش شبکه های عصبی دارند محسوب می شود.این فرآیند را می توان به صورت یک مسائله بهینه سازی در نظر گرفت.یافتن یک راه حل برای فرآیند آموزش نیاز به یک جواب  از یک ثابت خطی linear constraint با یک مسائله بهینه سازی غیر خطی مشتق شده دارد.بنابراین الگوریتم های تکاملی مختلف برای حل این مسائله به کار گرفته شده است.الگوریتم های تکاملی الگوریتم های جستجوی تصادفی جمعیت هستند که هدف آنها پیدا نمودن راه حل مورد پذیرش و یا تقریبا بهینه در فضاهای جستجو  چند حالته (multimodal) هستند.شکلی که در ادامه خوهد آمد   چهارچوب سیستم تشخیص نفوذ ارائه شده را نمایش می دهد و نشان می دهد که این سیستم می تواند به سه ماژول اصلی تقسیم شود که ورودی داده ، شبکه عصبی مصنوعی و ماژول MVO هستند.که شرح آنها در ادامه خواهد آمد.در قدم اول در فریم ورک ما ماژول ورودی داده مورد استفاده قرار می گیرد.این ماژول وظیفه پردازش ، پالایش (filtering) و استخراج ویژگی ها از داده های بازرسی audit data را بر عهده دارد.مجموعه داده شامل مجموعه های آزمایشی و آموزش از پیش تعریف شده است که به عنوان ورودی ها برای ماژول بعدی شبکه عصبی به کار گرفته می شود.قبل از اینکه داده ها وارد ماژول شبکه عصبی شوند ،  ماژول ورودی داده باید ورودی های داخل شده را به اعداد بین ۰ تا یک نگاشت نماید( نرمال سازی).این عمل برای مورد استفاده بودن داده های ورودی در ماژول بعدی ضروری است.در قدم دوم شبکه عصبی N ویژگی آموزشی را از ماژول ورودی داده دریافت می نماید.ماژول شبکه عصبی به صورت MLP طراحی شده است که یک شبکه عصبی پیش خور feed-forward با یک لایه ورودی ، یک لایه مخفی و یک لایه خروجی است.ورودی های داخل شده از ماژول ورودی داده ( داده های آموزشی ) به عنوان یک الگوی آموزشی برای آموزش شبکه عصبی وارد ماژول شبکه عصبی می شوند.این پروسه آموزش بوسیله ارسال وزنها به ماژول MVO انجام می شود.ماژول MVO ه عنوان یک سیستم مستقل برای به روز رسانی وزنهای سیناپتیک (synaptic weights) بعد از هر تکرار طراحی شده است.در هر تکرار فرآیند آموزش ، ماژول ‌MVO  افراد ( جمعیت) را به عنوان یک مجموعه از وزنها به ماژول شبکه عصبی ارسال می کند که این افراد را بر اساس یک مجموعه داده آموزشی مورد ارزیابی قرار داده و سپس مقادیر برازش آنها را باز می گرداند.در این ارائه خطای میانگین مربع Mean squared error (MSE) به عنوان یک تابع برازش شناخته شده برای الگوریتم آموزشی MVO پیشنهادی انتخاب شده است.وزنهای مربوط به سیناپتیک ها با استفاده از مینیمم نمودن مقدار MSE بدست می آید.فرآیند آموزش زمانی که حداثر تعداد تکرار بدست آمد متوقف می شود.بعد از این مرحله پایگاه دانش ( وزنها و biases) به روز رسانی شده اند.در سومین قدم شبکه عصبی که توسط مجموعه داده آموزشی آموزش دیده شده است برای پیش بینی خروجی از داده های ورودی تستی مورد استفاده قرار می گیرد

شکل : چهار چوب سیستم تشخیص نفوذ ارائه شده

دانلود مقاله :

کد برنامه نویسی حل یک معادله ساده ریاضی در زبان متلب

در پست قبل حل یک معادله ساده ریاضی را توسط الگوریتم ژنتیک توضیح دادیم.در این پست کد پیاده سازی این مثال در زبان متلب آورده می شود.زبان متلب یک زبان بسیار قوی برای پیاده سازی مسائل علمی است که با قابلیت های زیاد کار برنامه نویسی را برای کاربر بسیار آسان می نماید.کدها دقیقا پیاده سازی همان چیزی است که در مثال قبل گفته شده است و برای درک آن نیاز به آشنایی با کدنویسی تحت زبان برنامه نیسی متلب می باشد.

global popSize;
global chromosomeLength;
global F_OBJ;
global Fitness;
global arrProbability;
global arrCumulative;
global newPop;
global population;

global xoRate;
global mutRate;
global maxTor;
maxTor=100;
popSize=6;
chromosomeLength=4;
xoRate =0.3;
mutRate = 0.4;


initalPopulation();
for maxTorIndex=1:maxTor
   
    global Fitness;
    calculateFOBJ();
    solution=find(F_OBJ==0);
    if ~(isempty(solution))
        numRuleFound=size(solution,1);
        fprintf("We Finde %d Solution in generation %d \n",numRuleFound,maxTorIndex);
        for i=1:numRuleFound
            ruleIndex=solution(i);
            disp(population(ruleIndex,:))
        end
    return;
    end
    calculateFitness();
   
    calculateprobability();
    calculateCumulative();
    rouletteWheel();
    OnePointCrossOver();
    MutateGens();
   
end
function pop=initalPopulation()
%global population;
global popSize;
global population;
x=popSize;
population(1,:)= [12,05,23,08];
population(2,:)= [02,21,18,03];
population(3,:)= [10,04,13,14];
population(4,:)= [20,01,10,06];
population(5,:)= [01,04,13,19];
population(6,:)= [20,05,17,01];
%pop=population;
end
function calculateFOBJ()
global F_OBJ;
global popSize;
global population;
for i=1:popSize
    a=population(i,1);
    b=population(i,2);
    c=population(i,3);
    d=population(i,4);
    F_OBJ(i)=abs(a+2*b+3*c+4*d-30);
end
end
 
ادامه مطلب ...

استفاده از الگوریتم ژنتیک برای حل یک معادله ساده ریاضی

استفاده از الگوریتم ژنتیک برای حل یک معادله ساده ریاضی
این مطلب استفاده از الگوریتم ژنتیک را به شکلی ساده به همراه مثال برای افراد مبتدی شرح می دهد.ابتدا فلسفه اساسی و فلوچارت این الگوریتم شرح داده می شود و در مرحله بعد محاسبات قدم به قدم الگوریتم ژنتیک برای حل یک مسائله ساده تساوی ریاضیات بصورت کامل شرح داده می شود.
فلسفه پایه الگوریتم های ژنتیک
الگوریتم ژنتیک بوسیله goldberg توسعه و گسترش یافت که الهام گرفته  از تئوری تکامل داروین است ، مبنای این نظریه هم بقای گونه ها بر اساس میزان ارزش انها ست هرچه قوی تر احتمل بقا هم بیشتر. .داروین همچنین معتقد است که بقای یک نسل می‌تواند بوسیله فرآیند تولید مثل انتخاب ، برش و جهش  حفظ شود. بعدها از ایده داروین در خصوص تکامل برای بدست آوردن راه حل بهینه در مسائل محاسباتی استفاده شد که یکی از معروف ترین این الگوریتم ها ، الگوریتم ژنتیک است.

راه حلی که توسط الگوریتم های ژنتیک تولید می‌شود یک کروموزوم نامیده می‌شود و  مجموعه از کروموزم ها ، جمعیت population نامیده می شوند.کروموزم ها از ژنها تشکیل شده‌اند و مقدار آن می‌تواند عددی ، دودویی ، سمبل ها یا کاراکتر ها باشد که وابسته به مسائله است که قصد حل نمودن آن را داریم.شایان ذکر است نحوه نمایش کروموزوم ها و مقادیر ژنها یکی از اساسی ترین  قسمت های حل یک مسائله با استفاده از الگوریتم ژنتیک است و دیگر قسمت بسیار مهم در این الگوریتم ها تعریف تابع برازش است که در قسمت بعدی به ٔآن پرداخته می شود.
ارزش و بهای هر کروموزم توسط تابعی تحت نام برازش اندازه گیری می شود ، در واقع تابع برازش میزان مفید و مناسب بودن راه حل برای مسائله مورد نظر را اندزه گیری می نماید.پس ‌از هر مرحله ای که الگوریتم ژنتیک تکرار شد برازش هر یک از راه حل های تولید شده ( کروموزوم ها ) اندزه گیری می شود.برخی از کروموزم ها درون جمعیت تحت پروسه‌ای به نام crossover با یکدیگر ترکیب می‌شوند و بدین صورت کروموزم های جدیدی که فرزند نامیده می‌شود تولید می‌کنند که ترکیب ژن این کروموزم های جدید ترکیبی از ژنهای والدین آنهاست.در یک نسل تعدای از کروموزومها نیز در ژنهای خود دچار جهش mutation می شوند.
تعداد کروموزوم هایی که تحث تأثیر crossover و جهش mutation قرار میگیرند بوسیله نرخ برش و نرخ جهش کنترل می شوند.کروموزومی در جمعیت که برای نسل بعدی حفظ و نگاهداری می‌شود بوسیله قانون تکامل داروین انتخاب می شود.کروموزمی که مقدار برازش بالاتری دارد از احتمال بالاتری برای انتخاب دوباره در نسل بعدی برخوردار است.بعد از چندین نسل ، مقدار کروموزم به یک مقدار خاص که بهترین راه حل برای مسائله است همگرا می شود.
مراحل الگوریتم ژنتیک
۱: در الگوریتم ژنتیک فرآیند به شرح ذیل است
قدم ۱ : تعداد کروموزوم ها ، نسل ها و نرخ جهش و نرخ برش  معیین می شود
قدم ۲: بر اساس تعداد جمعیت کروموزوم – کروموزوم   ایجاد می شود و ژنهای کروموزوم –   با یک مقدار تصادفی مقدار دهی اولیه می شوند.
قدم ۳ : قدم‌های ۴-۷ را تا زمانی که تعداد نسل ها برآورده شود ( تأمین شود) انجام می شود
قدم ۴ :مقدار برازش کروموزوم  بوسیله محاسبه تابع هدف objective function مورد ارزیابی قرار می گیرد
قدم ۵ : انتخاب کرموزوم
قدم ۵ : برش
قدم ۶:جهش
قدم ۷: کرموزم جدید (فرزند)
قدم ۸ :راه حل( بهترین کرموزوم ها)
فلوچارت الگوریتم را می‌توان در شکل زیر مشاهده نمود :


مثال عددی
در اینجا یک مثال از کاربردی که از الگوریتم ژنتیک برای حل نمودن یک مسائله ترکیبی استفاده می‌کند را توضیح می دهیم.فرض کنیم که تساوی زیر را داریم
a+db+3c+4d=30
از الگوریتم ژنتیک برای بدست آوردن مقادیر a,b,c,d تا برای حل تساوی ذکر شده استفاده می کنیم.
.در ابتدا باید تابع هدف را فرمول کنیم ، برای این مسائله هدف مینیمم نمودن مقدار تابع f(x)  جایی که
 f (x) = ((a + 2b + 3c + 4d) – 30)
از آنجا که چهار متغیر در تساوی وجود دارد ، یعنی a,b,c,d می‌توانیم کروموزوم ها را به صورت زیر شکل دهیم


dcba

برای افزودن سرعت محاسبات ، می‌توانیم مقدار متغیر ها a,b,c,d را به اعداد صحیح بین ۰ تا ۳۰ محدود نماییم.
قدم اول: مقدار دهی اولیه
برای نمونه تعداد کروموزوم ها درون جمعیت را ۶ عدد تعریف می‌کنیم ، سپس مقادیر تصادفی را برای ژنهای a,b,c و d که تشکیل‌دهنده کروموزم مورد نظر ما هستند تولید می کنیم.پس همانطور که ملاحظه می شود ۶ کروموزمی را که در اختیار داریم به صورت زیر با اعداد تصادفی مقدار دهی می نماییم

Chromosome[1] = [a;b;c;d] = [12;05;23;08]

Chromosome[2] = [a;b;c;d] = [02;21;18;03]
Chromosome[3] = [a;b;c;d] = [10;04;13;14]
Chromosome[4] = [a;b;c;d] = [20;01;10;06]
Chromosome[5] = [a;b;c;d] = [01;04;13;19]
Chromosome[6] = [a;b;c;d] = [20;05;17;01]

قدم دوم : ارزیابی راه حل ها ( کروموزوم ها)

در این مرحله مقدار تابع هدف برای هر کروموزمی که در مرحله مقدار دهی جمعیت اولیه تولید شده است محسابه می شود

F_obj[1] = Abs(( 12 + 2*05 + 3*23 + 4*08 ) - 30)= Abs((12 + 10 + 69 + 32 ) - 30)= Abs(123 - 30)= 93

F_obj[2] = Abs((02 + 2*21 + 3*18 + 4*03) - 30)= Abs((02 + 42 + 54 + 12) - 30)= Abs(110 - 30)= 80
F_obj[3] = Abs((10 + 2*04 + 3*13 + 4*14) - 30)= Abs((10 + 08 + 39 + 56) - 30)= Abs(113 - 30)= 83
F_obj[4] = Abs((20 + 2*01 + 3*10 + 4*06) - 30)= Abs((20 + 02 + 30 + 24) - 30)= Abs(76 - 30)= 46
F_obj[5] = Abs((01 + 2*04 + 3*13 + 4*19) - 30)= Abs((01 + 08 + 39 + 76) - 30)= Abs(124 - 30)= 94
F_obj[6] = Abs((20 + 2*05 + 3*17 + 4*01) - 30)= Abs((20 + 10 + 51 + 04) - 30)= Abs(85 - 30)= 55

مرحله سوم : انتخاب

با ارزشترین کروموزوم از شانس و احتمال بیشتری برای برای انتخاب شدن به منظور تولید نسل بعدی دارد.برای محاسبه احتمال برازش باید برازش هر کروموزم محاسبه شود. برای جلوگیری از مشکل تقسیم بر صفر مقدار تابع هدفی که برای هر کرموزم در مرحله قبل بدست آمد با عدد ۱ جمع می شود :

Fitness[1] = 1 / (1+F_obj[1])= 1 / 94= 0.0106

Fitness[2] = 1 / (1+F_obj[2])= 1 / 81= 0.0123
Fitness[3] = 1 / (1+F_obj[3])= 1 / 84= 0.0119
Fitness[4] = 1 / (1+F_obj[4])= 1 / 47= 0.0213
Fitness[5] = 1 / (1+F_obj[5])= 1 / 95= 0.0105
Fitness[6] = 1 / (1+F_obj[6])= 1 / 56= 0.0179
Total = 0.0106 + 0.0123 + 0.0119 + 0.0213 + 0.0105 + 0.0179= 0.0845

احتمال مربوط به هر کروموزم را بو سیله فرمول P[i] = Fitness[i] / Total محاسبه می نماییم :

P[1] = 0.0106 / 0.0845= 0.1254
P[2] = 0.0123 / 0.0845= 0.1456
P[3] = 0.0119 / 0.0845= 0.1408P
[4] = 0.0213 / 0.0845= 0.2521
P[5] = 0.0105 / 0.0845= 0.1243P
[6] = 0.0179 / 0.0845= 0.2118


با توجه به احتمالاتی که در بالا محاسبه شده است مشاهده می وشد که کروموزوم ۴ بیشترین برازش را دارا می باشد و بنابراین احتمال انتخاب شدن آن برای نسل بعدی کروموزوم ها بسیار بالاست.برای فرآیند انتخاب از روش چرخ رولت استفاده می کنیم که بدین منظور ابتدا باید مقادیر احتمال تجمعی ( cumulative probability) را محاسبه کنیم:

C[1] = 0.1254

C[2] = 0.1254 + 0.1456= 0.2710
C[3] = 0.1254 + 0.1456 + 0.1408= 0.4118
C[4] = 0.1254 + 0.1456 + 0.1408 + 0.2521= 0.6639
C[5] = 0.1254 + 0.1456 + 0.1408 + 0.2521 + 0.1243= 0.7882
C[6] = 0.1254 + 0.1456 + 0.1408 + 0.2521 + 0.1243 + 0.2118= 1.0


با داشتن مقادیر احتمال تجمعی استفاده از چرخ رولت در فرآیند انتخاب امکان پذیر می گردد.فرآیند بعدی تولید یک عدد تصادفی در محدوده ۰ تا ۱ است که آن را R نامیم :

R[1] = 0.201, R[2] = 0.284, R[3] = 0.099, R[4] = 0.822, R[5] = 0.398, R[6] = 0.501
اگر برای مثال عدد تصادفی R[1]  بزرگتر از C[1] و کوچکتر از C[2] بود در این صورت     Chromosome [2] به عنوان یک کروموزوم در جمعیت جدید برای تولید نسل بعدی مورد استفاده قرار می گیرد. با توجه به مقادیر نمونه های بالا  خواهیم داشت :

NewChromosome[1] = Chromosome[2]

NewChromosome[2] = Chromosome[3]
NewChromosome[3] = Chromosome[1]
NewChromosome[4] = Chromosome[6]
NewChromosome[5] = Chromosome[3]
NewChromosome[6] = Chromosome[4]


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

Chromosome[1] = [02;21;18;03]

Chromosome[2] = [10;04;13;14]
Chromosome[3] = [12;05;23;08]
Chromosome[4] = [20;05;17;01]
Chromosome[5] = [10;04;13;14]
Chromosome[6] = [20;01;10;06]

مرحله ۴ : برش (Crossover)

در این مثال از برش یک نقطه ای(one cut point) استفاده می نماییم.به صورت تصادفی یک محل در کروموزم والدین انتخاب شده و سپس زیر کرموزوم هایی که از این نقطه بدست آمده اند در دو واحد تعویض می شود.کروموزم های والدینی که با همدیگر جفت شده اند به صورت تصادفی انتخاب می شوند و تعداد کروموزوم هایی که جفت می شوند توسط پارامتری به نام نرخ برش (Crossover rate ρc ) معین می شود.شبه کد فرآیند برش در ذیل آورده شده است :

begin

k← 0;
while(k<population) do
          R[k] ← random(0-1);
        if (R[k] < ρc ) then
                 select Chromosome[k] as parent;
         end;
          k = k + 1;
end;
end;


اگر  R [k] <ρc باشد کروموزوم K به عنوان یکی از والدین انتخاب می شود.فرض کنیم که نرخ برش را ۲۵٪ در نظر گرفته باشیم ، در این صورت کروموزم شماره k در صورتی

برای برش انتخاب می شود اگر مقدار عدد تصادفی تولید شده برای کروموزوم k کمتر از ۰.۲۵ باشد. فرآیند  را به صورت زیر ادامه می دهیم.ابتدا به تعداد جمعیتی که داریم عدد تصادفی R را تولید می نماییم:

R[1] = 0.191, R[2] = 0.259, R[3] = 0.760, R[4] = 0.006, R[5] = 0.159, R[6] = 0.340


با توجه به اعداد نمونه تصادفی که در بالا آورده شده است ، والدین  Chromosome [1], Chromosome [4] و Chromosome [5] برای عملگرد برش انتخاب می شوند.حالا با توجه این والدین ترکیب همه آنها را بدست می آوریم که بصورت زیر خواهد بود


Chromosome[1] >< Chromosome[4]

Chromosome[4] >< Chromosome[5]

Chromosome[5] >< Chromosome[1]

بعد از اتمام انتخاب کروموزوم ها برای برش ، فرآیند بعدی مشخص نمودن محل نقطه برش است.این کار با تولید یک عدد تصادفی بین عدد ۱ تا طول کروموزوم -۱ انجام می شود.در مثال ما عدد تصادفی باید بین ۱ تا ۳ باشد.بعد از اینکه نقطه برش را بدست آوردیم کروموزوم های والد در آن نقطه برش خورده و ژن های آنها تعویض می شود و یک فرزند جدید تولید می شود.برای مثال ما سه عدد تصادفی ذیل را تولید نمودیم

C[1] = 1,C[2] = 1,C[3] = 2

و کروموزم ها  به صورت زیر تحت تاثیر عملگر برش قرار می گیرند.همانگونه که ملاحظه می شود ژنهای والدین به ترتیب در ژن های شماره ۱، شماره ۱ و شماره ۲ برش داده می شوند.

Chromosome[1] = Chromosome[1] >< Chromosome[4]

= [02;21;18;03] >< [20;05;17;01]
= [02;05;17;01]
Chromosome[4] = Chromosome[4] >< Chromosome[5]
= [20;05;17;01] >< [10;04;13;14]
= [20;04;13;14]
Chromosome[5] = Chromosome[5] >< Chromosome[1]
= [10;04;13;14] >< [02;21;18;03]
= [10;04;18;03]


بعد از انجام اولین فرآیند برش در الگوریتم ژنتیک مورد نظرمان جمعین ما به صورت زیر خواهد بود:


Chromosome[1] = [02;05;17;01]
Chromosome[2] = [10;04;13;14]
Chromosome[3] = [12;05;23;08]
Chromosome[4] = [20;04;13;14]
Chromosome[5] = [10;04;18;03]
Chromosome[6] = [20;01;10;06]


مرحله ۵  جهش
تعداد کروموزوم هایی که جمعیت مورد جهش قرار می گیرند توسط پارامتر نرخ جهش مشخص می شوند.فرآیند جهش با تعویض تصادفی مقدار یک ژن که در یک موقعیت تصادفی قرار دارد با مقدار جدید انجام می شود.برای انجام این فرآیند مراحل که در ادامه گفته می شود را انجام می دهیم.ابتدا باید مجموع کل ژنهای موجود در جمعیت را محاسبه نماییم.که در مثال ما از فرمول زیر بدست می آید
تعداد کل ژنها=تعداد ژنهای هر کروموزوم*تعداد جمعیت =۴*۶=۲۴
فرآیند جهش با تولید یک عدد تصادفی بین ۱ و تعداد کل ژنها (۱ تا ۲۴ در مثال ما) انجام می شود.اگر مقدار عدد تصادفی تولید شده کمتر از نرخ جهش (mutaion_rate ρm) باشد در این صورت موقعیت این ژن در کروموزم نشان گذاری می شود.فرض کنیم که نرخ جهش را ۱۰٪  در نظر بگیریم ، که در این صورت انتظار داریم که ۱۰٪ ( ۰.۱) کل ژنها در جمعیت جهش داده شوند.
تعداد کل جهش ها = ۰.۱*۲۴=۲.۳≈۲
حالا اگر فرض کنیم که اعداد تصادفی که تولید شده است ۱۲ و ۱۸ باشند در این صورت کروموزم هایی که جهش دارند کروموزم شماره ۳ در ژن شماره ۴ آن و کروموزوم شماره ۵ در ژن شماره ۲ آن خواهند بود.مقدار ژنهای جهش یافته در نقطه جهش بوسیله اعداد تصادفی بین ۰ تا ۳۰ عوض می شوند.اگر اعداد تصادفی تولید شده ۲ و ۵ باشند سپس ترکیب کروموزوم ها بعد از جهش به صورت زیر است :


Chromosome[1] = [02;05;17;01]

Chromosome[2] = [10;04;13;14]
Chromosome[3] = [12;05;23;02]
Chromosome[4] = [20;04;13;14]
Chromosome[5] = [10;05;18;03]
Chromosome[6] = [20;01;10;06]

بعد از پایان فرآیند جهش یک تکرار یا یک نسل از الگوریتم ژنتیک داریم که باید این نسل جدید  را مجددا توسط تابع هدف مورد ارزیابی قرار دهیم که ارزیابی آن مانند آنچه قبلا گفته شد انجام می شود :


Chromosome[1] = [02;05;17;01]
F_obj[1] = Abs(( 02 + 2*05 + 3*17 + 4*01 ) - 30)
= Abs((2 + 10 + 51 + 4 ) - 30)
= Abs(67 - 30)
= 37
Chromosome[2] = [10;04;13;14]
F_obj[2] = Abs(( 10 + 2*04 + 3*13 + 4*14 ) - 30)
= Abs((10 + 8 + 33 + 56 ) - 30)
= Abs(107 - 30)
= 77
Chromosome[3] = [12;05;23;02]
F_obj[3] = Abs(( 12 + 2*05 + 3*23 + 4*02 ) - 30)
= Abs((12 + 10 + 69 + 8 ) - 30)
= Abs(87 - 30)
= 47
Chromosome[4] = [20;04;13;14]
F_obj[4] = Abs(( 20 + 2*04 + 3*13 + 4*14 ) - 30)
= Abs((20 + 8 + 39 + 56 ) - 30)
= Abs(123 - 30)
= 93
Chromosome[5] = [10;05;18;03]
F_obj[5] = Abs(( 10 + 2*05 + 3*18 + 4*03 ) - 30)
= Abs((10 + 10 + 54 + 12 ) - 30)
= Abs(86 - 30)
= 56
Chromosome[6] = [20;01;10;06]
F_obj[6] = Abs(( 20 + 2*01 + 3*10 + 4*06 ) - 30)
= Abs((20 + 2 + 30 + 24 ) - 30)
= Abs(76 - 30)
= 46

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

Chromosome[1] = [02;05;17;01]

Chromosome[2] = [10;04;13;14]
Chromosome[3] = [12;05;23;02]
Chromosome[4] = [20;04;13;14]
Chromosome[5] = [10;05;18;03]
Chromosome[6] = [20;01;10;06]

کروموزم های جدید تحت تاثیر فرآیند مشابهی با آنچه با نسل قبلی کرموزمها انجام شد قرار می گیرند.مثل ارزیابی ، انتخاب ، برش و جهش و در پایان هر تکرار نیز نسل جدیدی از کروموزمها برای تکرار بعدی تولید میشود.این فرآیند تا رسیدن به تعداد تکرار های از پیش تعریف شده یا بدست آمدن یک شرط ادامه می یابد.در این مثال حدودا بعد از ۵۰ نسل بهترین کروموزم بدست می آید

Chromosome = [07; 05; 03; 01]

که بدان معناست که a=7,b=5,c=3,d=1 که اگر این اعداد را در معادله این که در ابتدا داشتیم قرار دهیم خواهیم داشت

a +2 b +3 c +4 d = 30

7 + (2 * 5) + (3 * 3) + (4 * 1) = 30

در این مثال ساده به خوبی کارایی و قدرت الگوریتم ژنتیک در حل مسائل بهینه سازی مشاهده می شود.

منبع : Genetic Algorithm for Solving Simple Mathematical Equality Problem