第三章遗传算法.docx
- 文档编号:9304504
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:37.92KB
第三章遗传算法.docx
《第三章遗传算法.docx》由会员分享,可在线阅读,更多相关《第三章遗传算法.docx(16页珍藏版)》请在冰豆网上搜索。
第三章遗传算法
第三章遗传算法
遗传算法(GeneticAlgorithm)是一种通过自然进化过程搜索最优解的方法。
过去30年中,在解决复杂的全局优化问题方面,遗传算法取得了成功的应用,并受到了人们广泛的关注。
在优化问题中,如果目标函数是多峰的,或者搜索空间不规则,就要求所使用的算法必须具有高度的鲁棒性,以避免在局部优化解附近徘徊。
遗传算法的优点恰好是擅长全局搜索。
另外,遗传算法本身并不要对优化问题的性质作一些深入的数学分析,从而对那些不太熟悉数学理论和算法的使用者来说,无疑是方便的。
大家知道,生物遗传物质的主要载体是染色体,在遗传算法中,染色体是一串数据(或数组),用来作为优化问题的解的代码,其本身不一定是解。
遗传算法一般经过这样几个过程:
首先,随机产生一定数目的初始染色体,这些随机产生的染色体组成一个种群。
种群中染色体的数目称为种群的大小或种群的规模。
然后,用评价函数来评价每个染色体的优劣,即染色体对环境的适应程度(称为适应度),用来作为以后遗传操作的依据。
接着,进行选择过程,选择过程的目的是为了从当前种群中选出优良的染色体。
判断染色体的优良与否的准则就是各自的适应度,即染色体的适应度越高,其被选择的机会就越多。
通过选择过程,产生一个新的种群。
对这种新的种群进行交叉操作,交叉操作是遗传算法中主要的遗传操作之一。
接着进行变异操作,变异操作的目的是挖掘种群中的个体的多样性,克服有可能陷入局部解的弊病。
这样,经过上述运算产生的染色体称为后代。
然后,对新的种群(即后代)重复进行选择、交叉和变异操作,经过给定次数的迭代处理以后,把最好的染色体作为优化问题的最优解。
遗传算法已被广泛应用业于最优控制、运输问题、调度、生产计划、资源分配、统计及模式识别等,下面我们介绍一下遗传算法的一些基本知识。
第一节优化问题的遗传算法
回顾一下单目标规划、多目标规划及目标规划模型的基本形式。
在数学规划中,目标函数不一定是单峰的,可行域也不一定是凸集。
最优化问题的解有两种表示方式:
二进制向量或浮点向量。
使用二进制向量作为一个染色体来表示决策变量的真实值,向量的长度依赖于要求的精度,但使用二进制代码的必要性已经受到了批评。
求解复杂优化问题时,二进制向量表示结构有时不太方便。
另一种表示方法是浮点向量,每一个染色体由一个浮点向量表示,其长度与解向量相同。
这里用向量X=(XiX2,…,Xn)表示最优化问题的解,其中n是维数,则相应的染色体也是V=&以2,...风)。
一、关于约束条件的处理
对于约束条件的处理关键是
(1)消除约束条件中的等式约束。
例如假设hk(X)=O,k=1,2,...,q,通过解这个方程组,将q变量Xi,X2,....,Xq用另外的变量表示,代入到模型中,就形成了一个没有等式约束的n—q维优化问题。
(2)设计恰当的遗传操作以保证所有新产生的染色体在可行域中。
为了保证染色体的可行,必须对遗传操作过程中得到的每一个染色体进行检查,对每一个优化问题,最好设计一个C语言子函数,其输出值为
1表示染色体是可行的,0表示不可行。
例如,对于约束条件
gj(X)_O,j=1,2,...,P
可以作如下的一个子函数:
从j=1开始循环
若(gj(X)0),返回0;
直到j=P结束
返回1。
最后值得注意的是,在设计程序时,应该注意到一些隐含的约束,即有些虽然是可行解,但不可能是最优解。
例如数学规划模型
-X2
maxe
XR
其中R=(—是可行域,但是我们知道最优解一定在区间[-5,勺,所以为了减少程序的搜索空间,应当增加约束条件
-5_x_5
这类隐含约束一般不难发现,尤其对实际的管理问题。
因此尽可能的增加隐含条件。
二、初始化过程
定义整数pop-size作为染色体的个数,并且随机的产生pop-size个初始染色体。
一般情况下,由于优化问题的复杂性,解析底产生可行的染色体是困难的。
此时,可以采用下述两种方法之一作为初始过程。
第一种方法:
设决策者能够给出可行域中的一个内点,记为V。
=(x0x0,…乂)。
定义一个足够大的数M,以保证遗传操作遍及整个可行域。
M不仅在初始化过程中使用,而且在变异操作中也使用。
按照下面的方法产生pop-size个染色体。
在只“中随机的选择一个方向d,如果V。
Md满足不等式约束,则将V二V°・Md作为一个染色体,否则,置M为0和M之间的一个随机数,直到V二V。
Md可行为止。
由于V。
=(x0x0,...,x0)是内点,所以在有限步内,可以找到满足不等式约束的可行解。
重复以上过程pop-size次,从
而产生pop-size个初始染色体Vi,V2,...,Vp°p』ze。
三、评价函数
评价函数(记为Eval(V))用来对种群中的每个染色体V设定的一个概率,以使该染色体被选择的可能性与种群中其它染色体的适应性成比例,即通过轮盘赌,适应性强的染色体被选择产生后代的机会要大。
第一种方法,设目前该代中的染色体为Vi,V2,...,Vp°p」ize,可以根据染色体的序进行再生分配,而不是根据其实际的目标值。
无论是何种数学规划都可以作一个合理的假设,即在染色体M,V2,...,Vpopde中,决策者可以给出一个序的关系,使染色体由好到坏进行重排,就是说,一个染色体越好,其序号越小。
设参数a・(0,1)给定,定义基于序的评价函数为
Eval(VJ=a(1_a)"°,i=1,2,...,pop-size
i=1意味着染色体是最好的,i=pop-size说明是最差的。
第二种方法是通过对适应度的适当缩放调整(称为适应度定标)来设计评价函数。
用fl,f2,...fpop$ze(即染色体Vi,V2,...,Vpop$ze各自的目标值)来表示
原来的适应度。
Goldberg提出一种线性适应度定标方案,
fr=afi+b,i=1,2,...,pop-size
其中fi,i=1,2,...,pop-size为新的适应度,a和b为参数。
这种方法实际上假定使用者了解目标函数的性质,从而才能设计出合理的参数a和b,这种
情况下,评价函数定义为
pop-size
Eval(V)二'f/,i=1,2,...,pop「size
j二
四、选择过程
选择过程是以旋转赌轮pop-size次为基础的。
每次旋转都为新的种群选择一个染色体。
赌轮是按每个染色体的适应度进行选择染色体的。
无论使用哪一种评价函数,选择过程总可以写成如下形式:
步骤1对每个染色体Vi,计算累计概率q
qo=°彳i
qi二'eval(V」,i=1,2,...,pop「size
j—
步骤2从区间(0,qpop^ize]中产生一个随机数r;
步骤3若q」<rEq,则选择的第i个染色体Vi,其中1兰i兰pop—size;
步骤4重复步骤2和步骤3共pop-size次,这样可以得到pop-size个复制的染色体。
在上述过程中,并没有要求满足条件qpop」ize=1。
实际上,可以用qpop*除以所有的qi,i=1,2,...,pop-size,使qpop』=1,新得到概率同样与适应度成比例。
只要我们不介意概率方面解释上的困难,这一点并没有在遗传过程中产生任何影响。
五、交叉操作
首先定义参数PC作为交叉操作的概率,这个概率说明种群中有期望值为pc,pop-size个染色体来进行交叉操作。
为确定交叉操作的父代,从i=1到pop-size重复一下过程:
从[0,1]中产生随机数r,如果r:
:
:
Pc,则选择Vi作为一个父代。
用
VlV2,V3,...,表示上面选择的父代,并把它们随机的分成下面的对
(V1V2),mm),VM),•…
我们以(Vi;V2)为例解释怎样对上面所有的对进行交叉操作。
首先,从开区间(0,1)中产生一个随机数c,然后按下列形式在Vi•和,V2之间进行交叉操作,并产生两个后代X和丫
X二CM(1-c)V2,丫=(1-c)ycV2
如果可行域是凸的,这种凸组合交叉运算在两个父代可行的情况下,能够保证两个后代也是可行的。
但是,在许多情况下,可行域不一定是凸的,活很难验证其凸性,此时必须验证每一后代的可行性。
如果两个后代均可行,贝y用它代替其父代。
否则,保留其中可行的(如果存在的话),然后产
生新的随机数c,重新进行交叉操作(交叉操作时,随机数c是新选的,而
父代还用V1和,V2),直到得到两个可行的后代或循环给定次数为止。
无论如
何,仅用可行的后代取代其父代。
六、变异操作
定义参数Pm作为遗传系统中的变异概率,这个概率表明总体中有期望值为Pm,pop-size个染色体用来进行变异操作。
类似于交叉操作中选择父代的过程,由i=1到pop-size,重复下列过程:
从区间[0,1]中产生随机数r,如果r:
:
Pm,则选择染色体Vi作为变异的父代。
对每一个选择的父代,用V=(X「X2,…,Xn)表示,按下列方法进行变异。
在只"中随机选择变异方向d,如果V•Md是不可行的,那么,置M为0和M之间的随机数,直到其可行为止。
其中M是初始化过程定义的一个足够大的数。
如果在预先给定的迭代次数之内没有找到可行解,则置M=0。
无论M为何
值,总用X=VMd代替V。
七、遗传算法程序
经过选择、交叉和变异操作,我们得到一个新的种群,准备进行下一代进化。
对上述步骤经过给定的循环次数之后,遗传算法终止。
对一般优化问题,遗传算法可以归纳如下:
遗传算法程序
输入参数pop-size,交叉操作概率pc,变异概率Pm;通过初始过程产生
pop-size个染色体;
重复
对染色体进行交叉和变异操作;
计算所有染色体的评价函数;
根据某种抽样机制选择染色体;
直到满足终止条件
我们知道,最好的染色体不一定出现在最后一代中,所以在进化开始,必须把最好的染色体保留下来,记为V。
,如果在新的种群中又发现更好的染色体,则用它代替原有的染色体Vo。
在进化完成之后,这个染色体就可以看作是优化问题的解。
八、遗传算法与上升法
上升法是直接法、剃度法和Hessian法的通称。
上升法首先在最优解可能存在的地方选择一个初始点,然后通过分析目标函数的特性,由初始点移到一个新的点,然后再继续这个过程。
为了更好的理解遗传算法,现在把上升法和遗传算法比较。
上升法搜索过程是确定的,通过产生一系列的点收敛到最优解(有时是局部最优解),而遗传算法的搜索过程是随机的,它产生一系列随机种群序列。
二者的主要差异可以归纳如下两点:
(1)上升法的初始点仅有一个,由决策者给出;遗传算法的初始点有多个,随机产生。
(2)通过分析目标函数的特性,上升法由一点产生一个新点;遗传算法通过遗传操作,在当前的种群中经过交叉、变异和选择产生下一代种群。
对同一个优化问题,遗传算法所使用的机时比上升法花费的机时要多。
但是遗传算法可以处理一些上升法不能解决的复杂的优化问题。
第三节遗传算法数字例子
遗传算法已被编制成C语言程序。
在下面的例子中,使用的参数为:
种群规模为30,交叉概率为0.2,变异概率为0.5,而评价函数中的参
数a=0.05。
遗传算法对于这些参数的设置是非常鲁棒的,改变这些参数对
所得的结果不会有太大的影响。
例1单目标规划,考虑非凸集合上的优化问题
22
XiX2X3
maxf(X)=
小32^22小23322
2x1x33x1x22x2x3x1x2x3
s.t
222
X-IX2X3_1
222
XiX2X3-4
Xi,X2,X3-0
已经知道目标函数的最大值为f(X)=0.1537,图中的阴影部分表示可行域在X3-0处的横截面。
从图总可以看到,可行域是非凸的。
下面用遗传算法求解此问题。
用染色体V=(Xi,X2,X3)来作为解的代码。
染色体V=(Xi,X2,X3)的可行性由下面的检验函数经验:
如果(冶wo|x2兰o|x3兰0),返回0;
如果(Xi2x|xf:
:
1),返回0;
如果(X:
x;x;4),返回0;
返回1
其中检验函数值0表示不可行,1表示可行。
容易知道可行域包含于下列超几何体中
门-{(x1,x2,x3)0_%_2,0_x2_2,0_x3_2}。
我们可以很容易从这样的超几何体中抽样,例如取
%二u(0,2),他二u(0,2),X3二u(0,2)
其中函数u(a,b)用来产生区间[a,b]上的均匀分布的随机函数。
如果这个染色体不可行,则拒绝接受,由上面的<=u(0,2),i=1,2,3重新产生一个新的染色体,如果产生的染色体可行,贝能受它作为种群的一名成员。
经过有限次抽样以后,得到30个可行的染色体
%=(0.3903,0.6723,1.2507),V2=(0.9167,0.2930,0.3297)
V3=(0.2373,0.1267,1.7370),V4=(0.8523^0.9683,1.4477)
V5=(0.1280,0.8337,1.1807),Ve=(0.32830.6830,1.8263)
V7=(1.1223,0.6363,1.2303,V8=(0.5020,0.8447,1.0840)
V9=(0.0490,1.7077,0.2813),Vw-(0.5643,0.5450,1.6913)
%=(1.1430,0.6000,0.3623),匕=(1.6243,1.01530.5573)
%=(0.79531.3563,1.1223),V^=(0.1240,1.79030.5593)
V15=(1.2320,0.0733,0.9930),V16=(1.4473,1.3397,0.2947)
V17=(0.3960,0.61731.2623),V18=(0.5420,0.4000,1.6593
V19=(0.1517,1.0047,0.5590),V2°=(1.2550,1.2957,0.6413)
V21=(0.13130.8217,1.4523),V22=(0.2383,1.2930,0.3637)
V23=(1.3047,0.4163,0.4673),V24=(1.7893,0.5220,0.4343)
V25=(1.191Q0.1460,0.5890),V26=(0.6023,1.3187,0.3897)
V27=(0.9907,0.8447,0.9030),V28=(0.7467,1.2017,1.0873
V29=(0.92631.5153,0.0503),Va^(0.0823,0.1867,1.1217)
直接计算,得到如下的初始适应度的值,即目标函数值
f(V1)=0.0727,f(V2)=0.0674,f(V,^0.0854
f(V』=0.1277,
f(V5)=0.0082,
f(V6)=0.0401
fM)=0.1482,
f(VO=0.0906,
f(V9)=0.0022
g)=0.1144,
f"J=0.0539,
f(V12)=0.0663
fS)=0.0971,
fS)=0.0068,
f(V15)=0.0294
fM)=0.0197,
fW)=0.0792,
f“8)=0.1269
f(Vw)=0.0170,
fMo)".0711,
f%)=0.0071
f(V22)=0.0215,
f(V23)=0.0784,
fMJ=0.0616
f(V25)=0.0560,
f(V26)=0.0327,
f(V27)=0.1275
f(V28)=0.1013,
f(V29)=0.0006,
fMo)=0.0158
从中可以发现,染色体V是其中最好的染色体(f(V7)=0.1482最大),而染色体V29是其中最差的(f(V29)=0.0006最小)。
在此次进化中,保留了染色体V7,记为V。
。
如果在以后的进化过程中,发现比V。
更好的染色体,则用它取代V0。
根据染色体的目标值,由好到坏重新排列染色体如下
£=(1.1223,0.6363,1.2303)M)
V2=(0.8523,0.9683,1.4477)g
V3=(0.9907,0.8447,0.9030)(V27)
V4=(0.5420,0.4000,1.6593(V18)
V5=(0.5643,0.5450,1.6913)(V10)
V6=(0.7467,1.2017,1.0873)(V28)
V7=(0.7953,1.3563,1.1223)(V13)
V8=(0.5020,0.8447,1.0840)(V8)
V9=(0.2373,0.1267,1.7370)(V3)
V;=(0.396Q0.61731.2623)(V17)
£=(1.3047,0.4163,0.4673)(V23)
V12=(0.3903
0.6723,
1.2507)
S
V13=(1.2550,
1.2957,
0.6413)
(V20)
V14=(0.9167,
0.293Q
0.3297)
(V2)
V15=(1.6243
1.0153,
0.5573)
(V12)
V16=(1.7893
0.5220,
0.4343)
(V24)
V17=(1.1910i
0.1460,
0.5890)
(V25)
V18=(1.1430,
0.6000,
0.3623)
(V11)
V19=(0.3283
0.683Q
1.8263)
(V6)
V20=(0.6023
1.3187,
0.3897)
(V26)
V21=(1.232Q
0.0733,
0.9930)
(V15)
V22=(0.2383
1.2930,
0.3637)
(V22)
V23=(1.4473
1.3397,
0.2947)
(V16)
V24=(0.1517,
1.0047,
0.5590)
(V19)
V25=(0.0823
0.1867,
1.1217)
(V30)
V26=(0.128Q
0.8337,
1.1807)
(V5)
V27=(0.1313
0.8217,
1.4523)
(V21)
V28=(0.124Q
1.7903,
0.5593)
(V14)
V29=(0.0490!
1.7077,
0.2813)
(V9),
V30=(0.9263
1.5153,
0.0503)
(V29)
根据评价函数:
Eval(V)=a(1-
a)i4,i
二1,2,.
其中参数a,(0,1)。
取
a=0.05
,有
..,pop-size
size
Eval(V)二0.05(1-0.05)"',i=1,2,...,pop
再由
qo=0
qi=送eval(Vj),i=1,2,...,pop-sizej」
对每个染色体Vi,计算累计概率q:
q=0.0500,
q2=0.0975,
q3=0.1426,q4=0.1855
Cb=0.2262,
q6=0.2649,
q7=0.3017,
q8=0.3366
q=0.3698,
q10=0.4013,
q1=0.4312,
q12=0.4596
qn=0.4867,
q-14=0.5123,
q15=0.5367,
qw=0.5599
q7=0.5819,
q18=0.6028,
血二0.6226,
q20=0.6415
q21=0.6594,
q22=0.6765,
q23=0.6926,
q24=0.7080
q25二0.7226,
q26=0.7365,
q27二0.7497,
q28=0.7622
q29二0.7741,
qa^0.7854
现在准备旋转赌轮30次。
首先由计算机在区间(0,
430]=(0,0.7854]上产生随
机数,得到0.0328,其大于q。
=0,而小于q^0.0500,所以选择染色体V;(V?
)作为新种群的一名成员。
第二次产生的随机数为0.1284,大于q2=0.0975,
而小于q^0.1426,所以V;(V27)也被选中,经过30次选择之后,得到一个新的种群
V/(1.12230.6363,1.2303,V?
:
(0.9907,0.8447,0.9030)
V3J(0.7467,1.2017,1.0873),V4=(1.1223,0.63631.2303)
V5=(0.9167,0.2930,0.3297),V^(0.5420,0.4000,1.6593)
V7=(0.9167,0.293Q0.3297),V*=(0.85230.9683,1.4477)
V9=(1.3047,0.41630.4673),V10=(0.9263,1.5153,0.0503
%=(0.0823,0.1867,1.1217),%=(0.5020,0.8447,1.0840)
V13=(0.9263,1.5153,0.0503),V14=(0.92631.5153,0.0503)
V15=(0.3960,0.6173,1.2623,V16=(1.78930.5220,0.4343)
V17=(0.8523,0.96831.4477),=(0.92631.5153,0.0503)
Ve=(0.6023,1.3187,0.3897),V?
。
=(0.13130.8217,1.4523)
V2;=(0.9263,1.51530.0503),V22=(1.3047,0.4163,0.4673)
V23=(1.1223,0.63631.2303),V24=(1.62431.0153,0.5573
V25=(1.1910,0.146Q0.5890),V26=(0.9907,0.8447,0.9030)
V27=(0.1517,1.0047,0.5590),V?
/(1.12230.63631.2303)
V29=(0.0490,1.7077,0.2813,Vs。
=(1.62431.0153,0.5573)
接着,对新的种群进行遗传操作,即交叉操作。
交叉概率巳=20%,说明平
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 遗传 算法