完整基本遗传算法.docx
- 文档编号:20163579
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:17
- 大小:109.87KB
完整基本遗传算法.docx
《完整基本遗传算法.docx》由会员分享,可在线阅读,更多相关《完整基本遗传算法.docx(17页珍藏版)》请在冰豆网上搜索。
完整基本遗传算法
基本遗传算法
Holland创建的遗传算法是一种概率搜索算法,它利用某种编码技术作用于称为染色体的数串,其基本思想是模拟由这些串组成的个体进化过程.该算法通过有组织的、然而是随机的信息交换,重新组合那些适应性好的串.在每一代中,利用上一代串结构中适应性好的位和段来生成一个新的串的群体;作为额外增添,偶尔也要在串结构中尝试用新的位和段来替代原来的部分。
遗传算法是一类随机优化算法,它可以有效地利用已有的信息处理来搜索那些有希望改善解质量的串.类似于自然进化,遗传算法通过作用于染色体上的基因,寻找好的染色体来求解问题.与自然界相似,遗传算法对待求解问题本身一无所知,它所需要的仅是对算法所产生的每个染色体进行评价,并基于适应度值来改变染色体,使适应性好的染色体比适应性差的染色体有更多的繁殖机会.
第一章遗传算法的运行过程
遗传算法模拟了自然选择和遗传中发生的复制、交叉和变异等现象,从任一初始种群(Population)出发,通过随机选择、交叉和变异操作,产生一群更适应环境的个体,使群体进化到搜索空间中越来越好的区域,这样一代一代地不断繁衍进化,最后收敛到一群最适应环境的个体(Individual),求得问题的最优解。
一.完整的遗传算法运算流程
完整的遗传算法运算流程可以用图1来描述。
由图1可以看出,使用上述三种遗传算子(选择算子、交叉算子和变异算子)的遗传算法的主要运算过程如下:
(1)编码:
解空间中的解数据x,作为遗传算法的表现形式。
从表现型到基因型的映射称为编码.遗传算法在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合就构成了不同的点。
(2)初始群体的生成:
随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。
遗传算法以这N个串结构作为初始点开始迭代。
设置进化代数计数器t←0;设置最大进化代数T;随机生成M个个体作为初始群体P(0)。
(3)适应度值评价检测:
适应度函数表明个体或解的优劣性。
对于不同的问题,适应度函数的定义方式不同.根据具体问题,计算群体P(t)中各个个体的适应度。
(4)选择:
将选择算子作用于群体。
(5)交叉:
将交叉算子作用于群体。
(6)变异:
将变异算子作用于群体。
群体P(t)经过选择、交叉、变异运算后得到下一代群体P(t+1).
(7)终止条件判断:
若t≤T,则t←t+1,转到步骤
(2);若t>T,则以进化过程中所得到的具有最大适应度的个体作为最优解输出,终止运算。
从遗传算法运算流程可以看出,进化操作过程简单,容易理解,它给其他各种遗传算法提供了一个基本框架。
一个简单的遗传算法被Goldberg用来进行轮廓描述并用来举例说明遗传算法的基本组成.t代种群用变量P(t)表示,初始种群P(0)是随机设计的,简单遗传算法的伪代码描述如下:
produreGA
begin
t=0;
initializeP(t);
evaluateP(t);
whilenotfinisheddo
begin
t=t+1;
selectP(t)fromP(t-1);
reproducepairsinP(t);
evaluateP(t);
end
end
二.遗传算法的基本操作
遗传算法有三个基本操作:
选择(Selection)、交叉(Crossover)和变异(Mutation)。
(1)选择。
选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。
根据各个个体的适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代群体中。
遗传算法通过选择运算体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大.这样就体现了达尔文的适者生存原则。
(2)交叉。
交叉操作是遗传算法中最主要的遗传操作。
通过交叉操作可以得到新一代个体,新个体组合了父辈个体的特性。
将群体内的各个个体随机搭配成对,对每一个个体,以某个概率(称为交叉概率,CrossoverRate)交换它们之间的部分染色体.交叉体现了信息交换的思想.
(3)变异.变异操作首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机改变串结构数据中某个串的值,即对群体中的每一个个体,以某一概率(称为变异概率,MutationRate)改变某一个或某一些基因座上的基因值为其他的等位基因。
同生物界一样遗传算法中变异发生的概率很低。
变异为新个体的产生提供了机会.
三.基本遗传算法的数学模型
基本遗传算法可表示为
SGA=(C,E,P0,M,
,
,
T)
式中:
C——个体的编码方法;
E-—个体适应度评价函数;
P0—-初始种群;
M--种群大小;
——选择算子;
-—交叉算子;
--变异算子;
T—-遗传算法终止条件。
四.基本遗传算法的步骤
1.染色体编码(ChromosomeCoding)与解码(Decode)
基本遗传算法使用固定长度的二进制符号串来表示群体中的个体,其等位基因由二值{0,1}所组成。
初始群体中各个个体的基因可用均匀分布的随机数来生成。
例如:
x=100111001000101101就可表示一个个体,该个体的染色体长度是n=18。
(1)编码:
变量x作为实数,可以视为遗传算法的表现型形式。
从表现型到基因型的映射称为编码.设某一参数的取值范围为[U1,U2],我们用长度为k的二进制编码符号来表示该参数,则它总共产生2k种不同的编码,可使参数编码时的对应关系为:
000000…0000=0→U1
000000…0001=1→U1+
000000…0010=2→U1+2
…
111111…1111=2k—1→U2
其中,
=
.
(2)解码:
假设某一个体的编码为bkbk—1bk—2…b2b1,则对应的解码公式为
①
例如:
设有参数X∈[2,4],现用5位二进制编码对X进行编码,得25=32个二进制串(染色体):
00000,00001,00010,00011,00100,00101,00110,00111
01000,01001,01010,01011,01100,01101,01110,01111
10000,10001,10010,10011,10100,10101,10110,10111
11000,11001,11010,11011,11100,11101,11110,11111
对于任一个二进制串,只要代入公式①,就可得到相应的解码,如X22=10101,它对应的十进制为
=1+0*2+1*22+0*23+1*24=21,则对应参数X的值为2+21*(4—2)/(25—1)=3。
3548。
2.个体适应度的检测评估
基本遗传算法按与个体适应度成正比的概率来决定当前群体中各个个体遗传到下一代群体中的机会多少。
为了正确估计这个概率,要求所有个体的适应度必须为非负数.所以,根据不同种类的问题,需要预先确定好由目标函数值到个体适应度之间的转换规律,特别是要预先确定好当目标函数值为负数时的处理方法。
例如,可选取一个适当大的正数C,使个体的适应度为目标函数值加上正数C.
3.遗传算子
基本遗传算法使用下列三种遗传算子:
(1)选择运算使用比例选择算子.比例选择因子是利用比例于各个个体适应度的概率决定其子孙的遗传可能性。
若设种群数为M,个体i的适应度为fi,则个体i被选取的概率为
当个体选择的概率给定后,产生[0,1]之间的均匀随机数来决定哪个个体参加交配.若个体的选择概率大,则能被多次选中,它的遗传基因就会在种群中扩大;若个体的选择概率小,则被淘汰。
我们经常采用的是轮盘赌的原理,个体的选择概率是基于它们的性能进行的一些计算.实值范围——总和是所有个体期望的选择概率的总和或当前种群中所有个体原始适应度值的总和。
个体采用一对一方式映像到范围[0,sum]的一连续区间,每一个体区间的大小与对应个体的适应度值相匹配.如图1所示,轮盘赌轮的周长是6个个体适应度值的总和,个体5是最大适应度个体,它占有最大的区间.选择一个个体,用在[0,sum]间产生随机数,看此随机数在哪个个体的区间上,则此个体被选中。
重复此过程,直到所需数量个体被选中为止。
(2)交叉运算使用单点交叉算子。
只有一个交叉点位置,任意挑选经过选择操作后种群中两个个体作为交叉对象,随机产生一个交叉点位置,两个个体在交叉点位置互换部分基因码,形成两个子个体,如图2所示。
(3)变异运算使用基本位变异算子或均匀变异算子。
为了避免问题过早收敛,对于二进制的基因码组成的个体种群,实现基因码的小概率翻转,即0变为1,而1变为0,如图3所示。
4.基本遗传算法的运行参数
基本遗传算法有下列4个运行参数需要预先设定,即M,T,Pc,Pm。
M为群体大小,即群体中所含个体的数量,一般取为20~100;
T为遗传算法的终止进化代数,一般取为100~500;
Pc为交叉概率,一般取为0.4~0.99;
Pm为变异概率,一般取为0。
0001~0.1。
五.遗传算法的具体例证
下面通过具体的例子介绍遗传算法的实际工作过程。
假设目标函数为
②
该函数有多个局部极值点。
下面介绍求解该优化问题的遗传算法的构造过程。
第一步,确定决策变量和约束条件。
式②给出,决策变量为x1,x2,约束条件为—3。
0≤x1≤12。
1,4.1≤x2≤5.8。
第二步,建立优化模型.
式②已给出了问题的数学模型。
第三步,确定编码方法。
要进行编码工作,即将变量转换成二进制串。
串的长度取决于所要求的精度。
例如,变量xj的区间是[aj,bj],要求的精度是小数点后4位,也就意味着每个变量应该被分成至少(bj—aj)*104个部分。
对一个变量的二进制串位数(用mj表示),用以下公式计算:
第四步,确定解码方法。
从二进制串返回一个实际的值可用下面的公式来实现:
其中,
代表变量
的十进制值。
不妨设要求的精度为小数点后4位,则目标函数的两个变量x1和x2可以转换为下面的串:
(12。
1—(-3。
0))*10000=151000
217<151000≤218,m1=18
(5。
8-4.1)*10000=17000
214<17000≤215,m2=15
m=m1+m2=18+15=33
这样,一个染色体串是33位,如图4所示。
对应的变量x1和x2的实值如表1所示。
表1染色体二进制与十进制比较
变量
二进制数
十进制数
x1
000001010100101001
5417
x2
101111011111110
24318
x1=-3。
0+5417*(12。
1-(-3.0))/(218-1)=—2。
687969
x2=4。
1+24318*(5.8—4。
1)/(215-1)=5.361653
初始种群可随机生成如下:
U1=[000001010100101001101111011111110]
U2=[001110101110011000000010101001000]
U3=[111000111000001000010101001000110]
U4=[100110110100101101000000010111001]
U5=[000010111101100010001110001101000]
U6=[111110101011011000000010110011001]
U7=[110100010011111000100110011101101]
U8=[001011010100001100010110011001100]
U9=[111110001011101100011101000111101]
U10=[111101001110101010000010101101010]
相对应的十进制的实际值为
U1=[x1,x2]=[—2。
687969,5。
361653]
U2=[x1,x2]=[0。
474101,4。
170144]
U3=[x1,x2]=[10。
419457,4.661461]
U4=[x1,x2]=[6。
159951,4.109598]
U5=[x1,x2]=[-2。
301286,4.477282]
U6=[x1,x2]=[11.788084,4。
174346]
U7=[x1,x2]=[9。
342067,5。
121702]
U8=[x1,x2]=[-0.330256,4.694977]
U9=[x1,x2]=[11.671267,4.873501]
U10=[x1,x2]=[11.446273,4。
171908]
第五步,确定个体评价方法。
对一个染色体串的适应度评价由下列三个步骤组成:
(1)将染色体串进行反编码,转换成真实值。
在本例中,意味着将二进制串转换成实际值:
xk=(x1k,x2k),k=1,2,…
(2)评价目标函数f(xk)。
(3)将目标函数值转为适应度。
对于极大值问题,适应度就等于目标函数值,即
eval(Uk)=f(xk),k=1,2,…
在遗传算法中,评价函数起着自然进化中环境的角色,它通过染色体的适应度对其进行评价。
上述染色体的适应度值如下:
eval(U1)=f(—2。
687969,5。
361653)=19。
805119
eval(U2)=f(0.474101,4.170144)=17。
370896
eval(U3)=f(10.419457,4。
661461)=9。
590546
eval(U4)=f(6。
159951,4。
109598)=29.406122
eval(U5)=f(—2.301286,4.477282)=15。
686091
eval(U6)=f(11。
788084,4。
174346)=11.900541
eval(U7)=f(9。
342067,5.121702)=17.958717
eval(U8)=f(—0。
330256,4.694977)=19.763190
eval(U9)=f(11.671267,4.873501)=26.401669
eval(U10)=f(11.446273,4.171908)=10。
252480
由以上数据可以看出,上述染色体中最健壮的是U4,最虚弱的是U3。
第六步,设计遗传算子和确定遗传算法的运行参数。
(1)选择运算使用轮盘选择算子。
为基础的概率分配来选择新的种群。
其步骤如下:
1计算各染色体Uk的适应度值eval(Uk):
eval(Uk)=f(xk),k=1,2,…
2计算群体的适应度值总和:
3计算对应于每个染色体Uk的选择概率Pk:
4计算每个染色体Uk的累计概率Qk:
在实际工作中,选择新种群的一个染色体按以下步骤完成:
1生成一个[0,1]间的随机数r
2如果r≤Q1,就选择染色体U1;否则,选择第k个染色体Uk(2≤k≤pop-size),使得
Qk—1≤k≤Qk
那么,本例中种群的适应度总和为
对应于每个染色体Uk(k=1,2,…,10)的选择概率Pk如下:
P1=0.111180P2=0。
097515P3=0。
053839P4=0.165077P5=0。
088057
P6=0。
066806P7=0.100815P8=0.110945P9=0.148211P10=0。
057554
对应于每个染色体Uk(k=1,2,…,10)的累计概率Qk如下:
Q1=0。
111180Q2=0。
208695Q3=0.262534Q4=0。
427611Q5=0.515668
Q6=0。
582475Q7=0.683290Q8=0.794234Q9=0。
942446Q10=1。
000000
现在,我们转动轮盘10次,每次选择一个新种群中的染色体.假设这10次中生成的[0,1]间的随机数如下:
0.3014310.3220620.7665030。
8818930.350871
0。
5833920.1776180.3432420.0326850。
197577
第一个随机数r1=0。
301431大于Q3小于Q4,这样染色体U4被选中;第二个随机数r2=0。
322062也大于Q3小于Q4,于是染色体U4被再次选中.最终,新的种群由下列染色体组成:
U1=[100110110100101101000000010111001](U4)
U2=[100110110100101101000000010111001](U4)
U3=[001011010100001100010110011001100](U8)
U4=[111110001011101100011101000111101](U9)
U5=[100110110100101101000000010111001](U4)
U6=[110100010011111000100110011101101](U7)
U7=[001110101110011000000010101001000](U2)
U8=[100110110100101101000000010111001](U4)
U9=[000001010100101001101111011111110](U1)
U10=[001110101110011000000010101001000](U2)
(2)交叉运算使用单点交叉算子。
随机选择一个染色体串的节点,然后交换两个父辈节点右端部分来产生子辈.假设两个父辈染色体如下所示(节点随机选择在染色体串的第17位基因):
假设交叉概率为P0=25%,即在平均水平上有25%的染色体进行交叉。
交叉操作的过程如下:
开始
k←0;
当k≤10时继续
rk←[0,1]之间的随机数;
如果rk<0.25,则
选择Uk为交叉的一个父辈;
结束
k←k+1;
结束
结束
假设随机数如下:
0.6257210。
2668230。
2886440.2951140。
163274
0。
5674610.0859400.3928650。
7707140.548656
那么,就意味着染色体U5和U7被选中作为交叉的父辈.在这里,我们随机选择一个[1,32]间的整数(因为33是整个染色体串的长度)作为交叉点。
假设生成的整数pos为1,那么两个染色体从第一位分割,新的子辈在第一位右端的部分互换而生成,即
U5=[100110110100101101000000010111001]
U7=[001110101110011000000010101001000]
U5*=[101110101110011000000010101001000]
U7*=[000110110100101101000000010111001]
(3)变异运算使用基本位变异算子
假设染色体U1的第18位基因被选作变异,即如果该位基因是1,则变异后就为0。
于是,染色体在变异后将是:
U1=[100110110100101101000000010111001]
U1*=[100110110100101100000000010111001]
将变异概率设为Pm=0.01,就是说,希望在平均水平上,种群内所有基因的1%要进行变异。
在本例中,共有33*10=330个基因,希望在每一代中有3。
3个变异的基因,每个基因变异的概率是相等的。
因此,我们要生成一个位于[0,1]之间的随机数系列rk(k=1,2,…,330).假设表2列出的基因将进行变异。
表2基因变异示例
基因位置
染色体位置
基因位数
随机数
105
4
6
0.009857
164
5
32
0.00113
199
7
1
0。
000946
329
10
32
0.001282
在变异完成后,得到了最终的下一代种群:
U1*=[100110110100101101000000010111001]
U2*=[100110110100101101000000010111001]U3*=[001011010100001100010110011001100]
U4*=[111111001011101100011101000111101]U5*=[101110101110011000000010101001010]
U6*=[110100010011111000100110011101101]
U7*=[100110110100101101000000010111001]U8*=[100110110100101101000000010111001]
U9*=[000001010100101001101111011111110]U10*=[001110101110011000000010101001010]
相对应的变量[x1,x2]的十进制值和适应度值为
f1(6.159951,4.109598)=29.406122
f2(6.159951,4.109598)=29。
406122
f3(-0。
330256,4。
694977)=19.763190
f4(11。
907206,4.873501)=5。
702781
f5(8.024130,4。
170248)=19。
91025
f6(9.342067,5.121702)=17。
958717
f7(6.159951,4。
109598)=29。
406122
f8(6。
159951,4。
109598)=29.406122
f9(-2。
687969,5.361653)=19.805119
f10(0。
474101,4.170248)=17.370896
至此,完成了遗传算法第一代的流程。
设计终止代数为1000,在第491代,得到了最佳的染色体:
U*=[111110000000111000111101001010110]
个体随着进化过程的进行,群体中适应度较低的一些个体被逐渐淘汰,而适应度较高的一些个体会越来越多,并且更加集中在U*附近,最终就可搜索到问题的最优点U*,U*对应的十进制为x1*=11。
631407,x2*=5。
724824,得适应度值为
eval(U*)=f(11。
631407,5。
724824)=38.818208
即目标函数的最大值为f(x1*,x2*)=38。
818208。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 基本 遗传 算法