Professional Documents
Culture Documents
شرح مفصل للخوارزمية الجينية
شرح مفصل للخوارزمية الجينية
com/article/8747352747 ]1
o المبدأ األساسي للخوارزمية الجينية 1.
السكان هو الوحدة األساسية للتطور البيولوجي ،وجوهر التطور البيولوجي هو تغيير التكرار األساسي للسكان .إن
الطفرات الجينية وإعادة التركيب الجيني ،واالختيار الطبيعي والعزلة هي الروابط األساسية الثالثة في عملية تكوين
.األنواع.من خالل تأثيرها المشترك ،تميز المجموعات وتؤدي في النهاية إلى تكوين أنواع جديدة
الترميز 1.
هناك نوعان من ترميز الخوارزمية الجينية :ترميز النقطة العائمة والترميز الثنائي .قدم هنا لمنع الترميز .قم بتعيين نطاق
للتعبير عن المعلمات المتغيرة k ،استخدم الرمز الثنائي للطول (L,U) ( L , U ) ،قيمة المعلمة إلى
سهل المعرفة Δ Δ في الرموز المختلفة ،الفاصل الزمني بين رمزين لكل رمز مجاور هوk 2 k ثم2
)Δ=(U−L)(2k−1) Δ = ( U − L ) ( 2 k − 1
.الغرض من فك التشفير هو استعادة سالسل البيانات الثنائية غير العشرية إلى عشري
يمكن أن يتوافق تشفير وفك تشفير الخوارزميات الجينية مع النمط الجيني والنمط الظاهري للكائنات الحية على المستوى
.الكلي ،ويمكن أن يتوافق مع عمليتي نسخ الحمض النووي والترجمة على المنظار
التزاوج 3.
عملية التزاوج" هي عامل ينفذ التقاطع باستخدام نقطة واحدة أو نقاط متعددة .أوالً ،يتم إنشاء موضع واحد أو أكثر"
يسمى توزيع الطاقة بأرقام عشوائية ،ثم يتبادل سؤاالن جزءًا من رموز الجينات في المواضع التي تسمى توزيع الطاقة
:لتشكيل فردين فرعيين .كما هو موضح أدناه
الطفرة 4.
[/https://arabicprogrammer.com/article/8747352747 ]1
عملية الطفرة" هي استخدام بتات أساسية لتحور الجينات .على سبيل المثال ،تغيير 0في الموضع الثالث للكروموسوم"
S.يمكن اعتباره كروموسوم ساللة األصل " S = 11101101 = S ". Sإلى ، 1أي S = 11101101
االنقالب 5.
=' Sبعد االنعكاس : S = 100/1100/11 ،الجزء العكسي من جينات الكروموسوم .على سبيل المثال
100/0011/11.
تحدد الخوارزمية الجينية فرصة أن يرث كل فرد في المجموعة الحالية مجموعة الجيل التالي وف ًقا لالحتمالية التي تتناسب
مع لياقة الفرد .تسعى عادة يمكن لمشكلة القيمة القصوى للدالة الهدفية أن تستخدم مباشرة الوظيفة الموضوعية كدالة
。للكشف عن حجم اللياقة الفردية
نسخ 7.
في عملية النسخ المتماثل ،يتم تحديد? إمكانية وراثة الجيل القادم وف ًقا لمدى مالءمة الفرد .إذا كان العدد اإلجمالي لألفراد
:فإن احتمال اختيار الشخص هو i fi fi ،وكانت لياقة الفرد N ،في السكان الضعفاء هو
المجموع مناسب يجب الدرجة P i = f i المجموعمناسبيجبالدرجةPi=fi
BEGIN
begin
;t = t+1
[/https://arabicprogrammer.com/article/8747352747 ]1
؛ ) P (tإعادة تنظيم
end
end
END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
في الخوارزمية الجينية ومربع أدوات البحث المباشر هي القيمة الدنيا لحل الوظيفة الموضوعية ،لذلك إذا gaإن دالة 1.
كانت الوظيفة الهدف هي القيمة الدنيا للحل ،يمكن أن تكون الوظيفة الموضوعية مباشرة وظيفة اللياقة البدنية .تتم كتابة
:دالة اللياقة في بناء الجملة التالي
)function f = fitnesscn(x
;)f = f(x
end
1
2
3
:إذا كانت هناك قيود (بما في ذلك نطاق قيم المتغيرات المستقلة) ،فإن بنية حل الحد األدنى لقيمة الوظيفة هي كما يلي 2.
)function f = fitnessfcx(x
if x<=-1||x>3
;f = inf
else
;)f = f(x
end
end
1
2
3
4
5
[/https://arabicprogrammer.com/article/8747352747 ]1
6
7
:إذا كانت هناك قيود (بما في ذلك نطاق قيم المتغيرات المستقلة) ،فإن بنية حل القيمة القصوى للوظيفة هي كما يلي 3.
)function f = fitnessfcx(x
if x<=-1||x>3
;f = inf
else
;)f = -f(x
end
end
1
2
3
4
5
6
7
fvalبدالً من -fvalملحوظة :دالة الهدف النهائية التي تم حلها هي
y = 200 * exp (-0.05 * x). * Sinالبرنامج الرئيسي :حل القيمة القصوى لـ ٪
في الفاصل الزمني [(x) ]2 2-
;clc
; clear
/https://arabicprogrammer.com/article/8747352747 ]1[
close all;
global BitLength
global boundsbegin
global boundsend
boundsbegin=bounds(:,1);
boundsend=bounds(:,2);
BitLength=ceil(log2((boundsend-boundsbegin)' ./ precision));
population=round(rand(popsize,BitLength));
[Fitvalue,cumsump]=fitnessfun(population);
Generation=1;
while Generation<Generationnmax+1
/https://arabicprogrammer.com/article/8747352747 ]1[
for j=1:2:popsize
٪ حدد العملية
seln=selection(population,cumsump);
٪ عبر العملية
scro=crossover(population,seln,pcrossover);
scnew(j,:)=scro(1,:);
scnew(j+1,:)=scro(2,:);
smnew(j,:)=mutation(scnew(j,:),pmutation);
smnew(j+1,:)=mutation(scnew(j+1,:),pmutation);
end
[Fitvalue,cumsump]=fitnessfun(population);
[fmax,nmax]=max(Fitvalue);
fmean=mean(Fitvalue);
ymax(Generation)=fmax;
ymean(Generation)=fmean;
x=transform2to10(population(nmax,:));
xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1);
xmax(Generation)=xx;
Generation=Generation+1
end
Generation=Generation-1;
Bestpopulation=xx
Besttargetfunvalue=targetfun(xx)
إذا كان متوسط، بشكل عام.رسم منحنى اللياقة البدنية بعد الحساب الجيني
اللياقة البدنية واللياقة القصوى للسكان أثناء التطور
٪ ، يذكر أن الفرد الذي يتمتع بأعلى لياقة لم يتطور لعدة أجيال متتالية
مما يشير إلى أن السكان قد نضجوا.
figure(1);
hand1=plot(1:Generation,ymax);
set(hand1,'linestyle','-','linewidth',1.8,'marker','*','markersize',6)
hold on;
hand2=plot(1:Generation,ymean);
set(hand2,'color','r','linestyle','-','linewidth',1.8,...
/https://arabicprogrammer.com/article/8747352747 ]1[
'marker','h','markersize',6)
٪ Subroutine: يتم تخزين اسم الوظيفة على أنها، عملية تقاطع جديدة للسكان
crossover.m
function scro=crossover(population,seln,pc)
BitLength=size(population,2);
if pcc==1
scro(1,:)=[population(seln(1),1:chb) population(seln(2),chb+1:BitLength)];
scro(2,:)=[population(seln(2),1:chb) population(seln(1),chb+1:BitLength)];
else
scro(1,:)=population(seln(1),:);
scro(2,:)=population(seln(2),:);
end
/https://arabicprogrammer.com/article/8747352747 ]1[
٪ Subroutine: يتم تخزين اسم الوظيفة كـ، حساب وظيفة اللياقة البدنية
fitnessfun
function [Fitvalue,cumsump]=fitnessfun(population);
global BitLength
global boundsbegin
global boundsend
for i=1:popsize
xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1);
end
Fitvalue=Fitvalue'+230;
fsum=sum(Fitvalue);
Pperpopulation=Fitvalue/fsum;
cumsump = cumsum(Pperpopulation);
[/https://arabicprogrammer.com/article/8747352747 ]1
;'cumsump=cumsump
عملية طفرة سكانية جديدة ،يتم تخزين اسم الوظيفة على أنها ٪ Subroutine:
mutation.m
)function snnew=mutation(snew,pmutation
;)BitLength=size(snew,2
;snnew=snew
if pmm==1
end
)function pcc=IfCroIfMut(mutORcro
قم بتوليد تسلسل بطول ، 100حدد نقطة بشكل عشوائي ،كل األرقام الموجودة ٪
،أمام النقطة هي ، 1والظهر هو 1
.ثم قم بإنشاء رقم بشكل عشوائي للحكم على ما إذا كان 1أو ٪ 0
;test(1:100)=0
/https://arabicprogrammer.com/article/8747352747 ]1[
l=round(100*mutORcro);
test(1:l)=1;
n=round(rand*99)+1;
pcc=test(n);
end
٪ Subroutine: يتم تخزين اسم الوظيفة على أنها، عملية اختيار جديدة للسكان
select.m
function seln=selection(population,cumsump);
for i=1:2
prand=cumsump-r;
j=1;
while prand(j)<0
j=j+1;
end
end
٪ Subroutine: اسم وظيفة المخزن، تحويل الرقم الثنائي إلى الرقم العشري
على أنهtransform2to10.m
/https://arabicprogrammer.com/article/8747352747 ]1[
function x=transform2to10(Population)
BitLength=size(Population,2);
x=Population(BitLength);
for i=1:BitLength-1
x=x+Population(BitLength-i)*power(2,i);
end
y=200*exp(-0.05*x).*sin(x);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/https://arabicprogrammer.com/article/8747352747 ]1[
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/https://arabicprogrammer.com/article/8747352747 ]1[
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/https://arabicprogrammer.com/article/8747352747 ]1[
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/https://arabicprogrammer.com/article/8747352747 ]1[
145
146
نتائج البرنامج:
Bestpopulation =
1.575677119096666
Besttargetfunvalue =
1.848457326200009e+02
1
2
3
4
5
6
7
8
9
[/https://arabicprogrammer.com/article/8747352747 ]1
،البرنامج الرئيسي :يستخدم هذا البرنامج تطور تتابع الخوارزمية الجينية ٪
استخدم العدد النهائي الذي تم الحصول عليه بعد التطور األخير حيث تم ٪
إدخال المحتوى األولي في المرة القادمة
;clc
;close all
;clear all
الجبر التطوري
/https://arabicprogrammer.com/article/8747352747 ]1[
T=100;
optionsOrigin=gaoptimset('Generations',T/2);
[x,fval,reason,output,finnal_pop]=ga(@ch14_2f,2,optionsOrigin);
options1=gaoptimset('Generations',T/2,'InitialPopulation',finnal_pop,...
'PlotFcns',@gaplotbestf);
[x,fval,reason,output,finnal_pop]=ga(@ch14_2f,2,options1);
Bestx=x
BestFval=fval
function f=ch14_2f(x)
g1=1.5+x(1)*x(2)-x(1)-x(2);
g2=-x(1)*x(2);
if(g1>0|g2>10)
f=100;
else
f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
end
/https://arabicprogrammer.com/article/8747352747 ]1[
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
نتائج البرنامج:
Bestx =
-9.026449478668987 1.105769708316651
[/https://arabicprogrammer.com/article/8747352747 ]1
= BestFval
0.035051699473142
>>
1
2
3
4
5
6
7
8
9
10
11
12
13
الكالسيكية TSPالحالة :3مشكلة
لنفترض أن هناك رجل أعمال مسافرً ا يرغب في زيارة المدن ،فيجب عليه اختيار المسار الذي يريد أن يسلكه .ويقتصر
المسار على أن كل مدينة? يمكنها زيارتها مرة واحدة فقط ،وأخيرً ا العودة إلى مدينة المغادرة األصلية .هدف اختيار
.المسار هو أن مسافة المسار المطلوبة هي القيمة الدنيا بين جميع المسارات
tic
clc,clear
;)x=sj(:,1:2:8);x=x(:
/https://arabicprogrammer.com/article/8747352747 ]1[
y=sj(:,2:2:8);y=y(:);
sj=[x y];
figure(1);
plot(x,y);
d1=[70,40];
sj0=[d1;sj;d1];
مصفوفة المسافة د
sj=sj0*pi/180;
d=zeros(102);
for i=1:101
for j=i+1:102
temp=cos(sj(i,1)-sj(j,1))*cos(sj(i,2))*cos(sj(j,2))
+sin(sj(i,2))*sin(sj(j,2));
d(i,j)=6370*acos(temp);
end
end
d=d+d';L=102;w=50;dai=100;
for k=1:w
c=randperm(100);
c1=[1,c+1,102];
/https://arabicprogrammer.com/article/8747352747 ]1[
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))
+d(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
end
end
end
end
J(k,c1)=1:102;
end
J=J/102;
J(:,1)=0;J(:,102)=1;
rand('state',sum(clock));
A=J;
B=A;
c=randperm(w);
for i=1:2:w
F=2+floor(100*rand(1));
temp=B(c(i),F:102);
B(c(i),F:102)=B(c(i+1),F:102);
B(c(i+1),F:102)=temp;
end
by=find(rand(1,w)<0.1);
if length(by)==0
by=floor(w*rand(1))+1;
end
C=A(by,:);
L3=length(by);
for j=1:L3
bw=2+floor(100*rand(1,3));
bw=sort(bw);
C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102]);
/https://arabicprogrammer.com/article/8747352747 ]1[
end
G=[A;B;C];
TL=size(G,1);
[dd,IX]=sort(G,2);temp(1:TL)=0;
for j=1:TL
for i=1:101
temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
end
end
[DZ,IZ]=sort(temp);
A=G(IZ(1:w),:);
end
path=IX(IZ(1),:)
long=DZ(1)
toc
xx=sj0(path,1);yy=sj0(path,2);
%plot(xx,yy,'-o',)
figure(2);
plot(xx,yy,'-o')
/https://arabicprogrammer.com/article/8747352747 ]1[
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/https://arabicprogrammer.com/article/8747352747 ]1[
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[/https://arabicprogrammer.com/article/8747352747 ]1
85
هي إحداثيات خطوط الطول والعرض بين النقاط ،والبيانات هي على " ، "yichuansuanfadata.txtمن بينها
:النحو التالي
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
األعمدة الفردية هي خطوط الطول واألعمدة الزوجية هي خطوط العرض
[/https://arabicprogrammer.com/article/8747352747 ]1
= path
1 17 3 36 43 93 46 59 100 98 51 80 50
15 42 20 30 74 83
دا 20
إلى 38عموً
87 92 2 45 67 82 48 72 14 27 10 84 18
40 79 77 31 97 85
دا 39
إلى 57عموً
65 64 11 76 69 94 70 19 63 62 26 29 34
66 90 86 8 39 78
دا 58
إلى 76عموً
/https://arabicprogrammer.com/article/8747352747 ]1[
47 23 58 81 22 71 37 7 68 25 49 28 57
88 61 16 91 41 4
77 دا
ً عمو95 إلى
73 13 24 32 12 53 33 75 5 60 9 38 44
54 55 96 89 6 56
96 عمود102 إلى
21 99 101 52 95 35 102
long =
4.087894090467779e+04
>>
1
2
3
4
/https://arabicprogrammer.com/article/8747352747 ]1[
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/https://arabicprogrammer.com/article/8747352747 ]1[
/https://arabicprogrammer.com/article/8747352747 ]1[