《2022年遗传算法经典MATLAB代码.docx》由会员分享,可在线阅读,更多相关《2022年遗传算法经典MATLAB代码.docx(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 遗传算法 经典学习 Matlab 代码遗传算法实例 : 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的;对于初学者,特别是仍没有编程体会的特别有用的一个文件遗传算法实例% 下面举例说明遗传算法 % % 求以下函数的最大值 % % fx=10*sin5x+7*cos4x x0,10 % % 将 x 的值用一个 10 位的二值形式表示为二值问题, 一个 10 位的二值数提供的辨论率是每为 10-0/210-1 0.01;% % 将变量域 0,10 离散化为二值域 0,1023, x=0+10*b/1023, 其中 b 是 0,
2、1023 中的一个二值数;% % % %-% %-% % 编程%- % 2.1 初始化 编码 % initpop.m函数的功能是实现群体的初始化,popsize 表示群体的大小,chromlength 表示染色体的长度 二值数的长度 ,名师归纳总结 - - - - - - -第 1 页,共 14 页精选学习资料 - - - - - - - - - % 长度大小取决于变量的二进制编码的长度 %遗传算法子程序%初始化 在本例中取 10 位 ;function pop=initpoppopsize,chromlength pop=roundrandpopsize,chromlength; % ran
3、d 随机产生每个单元为0,1 行数为 popsize ,列数为 chromlength 的矩阵,% roud 对矩阵的每个单元进行圆整;这样产生的初始种群;% 2.2 运算目标函数值% 2.2.1 将二进制数转化为十进制数1 %遗传算法子程序%产生2n 2n-1 . 1 的行向量,然后求和,将二进制转化为十进制function pop2=decodebinarypop px,py=sizepop; %求 pop 行和列数for i=1:py pop1:,i=2.py-i.*pop:,i; end pop2=sumpop1,2; %求 pop1 的每行之和% 2.2.2 将二进制编码转化为十进制
4、数 2 % decodechrom.m函数的功能是将染色体 或二进制编码 转换为十进制,参数名师归纳总结 spoint表示待解码的二进制串的起始位置第 2 页,共 14 页- - - - - - -精选学习资料 - - - - - - - - - % 对于多个变量而言,如有两个变量,采纳20 为表示,每个变量 10 为,就第一个变量从 1 开头,另一个变量从 11 开头;本例为 1 ,% 参数 1ength 表示所截取的长度本例为 10;%遗传算法子程序%将二进制编码转换成十进制 function pop2=decodechrompop,spoint,length pop1=pop:,spoi
5、nt:spoint+length-1; pop2=decodebinarypop1; % 2.2.3 运算目标函数值% calobjvalue.m 函数的功能是实现目标函数的运算,其公式采纳本文例如仿 真,可依据不同优化问题予以修改;%遗传算法子程序%实现目标函数的运算 function objvalue=calobjvaluepop temp1=decodechrompop,1,10; %将 pop 每行转化成十进制数x=temp1*10/1023; %将二值域中的数转化为变量域的数objvalue=10*sin5*x+7*cos4*x; %运算目标函数值% 2.3 运算个体的适应值%遗传算
6、法子程序名师归纳总结 - - - - - - -第 3 页,共 14 页精选学习资料 - - - - - - - - - %运算个体的适应值 function fitvalue=calfitvalueobjvalue global Cmin; Cmin=0; px,py=sizeobjvalue; for i=1:px if objvaluei+Cmin0 temp=Cmin+objvaluei; else temp=0.0; end fitvaluei=temp; end fitvalue=fitvalue; % 2.4 挑选复制 % 挑选或复制操作是打算哪些个体可以进入下一代;程序中采纳赌
7、轮盘挑选法 挑选,这种方法较易实现;% 依据方程pi=fi/fi=fi/fsum,挑选步骤:代种% 1在第t 代,由 1式运算fsum 和pi % 2产生0,1 的随机数rand . ,求s=rand .*fsum % 3求fi s中最小的k ,就第k 个个体被选中% 4进行N 次 2、3操作,得到N 个个体,成为第t=t+1 群名师归纳总结 - - - - - - -第 4 页,共 14 页精选学习资料 - - - - - - - - - %遗传算法子程序%挑选复制function newpop=selectionpop,fitvalue totalfit=sumfitvalue; %求适应
8、值之和fitvalue=fitvalue/totalfit; %单个个体被挑选的概率fitvalue=cumsumfitvalue; %如fitvalue=1 2 3 4 ,就cumsumfitvalue=1 3 6 10 px,py=sizepop; ms=sortrandpx,1; %从小到大排列 fitin=1; newin=1; while newin=px ifmsnewinfitvaluefitin newpopnewin=popfitin; newin=newin+1; else fitin=fitin+1; end end % 2.5 交叉% 交叉 crossover,群体中的
9、每个个体之间都以肯定的概率pc 交叉,即两个个体从各自字符串的某一位置名师归纳总结 - - - - - - -第 5 页,共 14 页精选学习资料 - - - - - - - - - % 一般是随机确定开头相互交换,这类似生物进化过程中的基因分裂与重 组;例如,假设 2 个父代个体 x1,x2 为:% x1=0100110 % x2=1010001 % 从每个个体的第 3 位开头交叉,交又后得到 2个新的子代个体 y1,y2 分别为:% y10100001 % y21010110 % 这样 2 个子代个体就分别具有了 2 个父代个体的某些特点;利用交又我们有 可能由父代个体在子代组合成具有更高
10、适合度的个体;% 事实上交又是遗传算法区分于其它传统优化方法的主要特点之一;%遗传算法子程序%交叉 function newpop=crossoverpop,pc px,py=sizepop; newpop=onessizepop; for i=1:2:px-1 ifrandpc cpoint=roundrand*py; newpopi,:=popi,1:cpoint,popi+1,cpoint+1:py; newpopi+1,:=popi+1,1:cpoint,popi,cpoint+1:py; else newpopi,:=popi; newpopi+1,:=popi+1; 名师归纳总结
11、- - - - - - -第 6 页,共 14 页精选学习资料 - - - - - - - - - end end % 2.6 变异% 变异 mutation,基因的突变普遍存在于生物的进化过程中;变异是指父代 中的每个个体的每一位都以概率 pm 翻转,即由“1” 变为“0” ,1” ;遗传算法的变异特性可以使求解过程随机地搜寻到解 % 或由“0” 变为“可能存在的整个空间,因此可以在肯定程度上求得全局最优解;%遗传算法子程序%变异 function newpop=mutationpop,pm px,py=sizepop; newpop=onessizepop; for i=1:px ifra
12、ndpm mpoint=roundrand*py; if mpointbestfit bestindividual=popi,:; bestfit=fitvaluei; end end % 2.8 主程序%遗传算法主程序名师归纳总结 - - - - - - -第 8 页,共 14 页精选学习资料 - - - - - - - - - clear clf popsize=20; %群体大小chromlength=10; %字符串长度个体长度pc=0.6; %交叉概率pm=0.001; %变异概率pop=initpoppopsize,chromlength; %随机产生初始群体for i=1:20
13、%20为迭代次数objvalue=calobjvaluepop; %运算目标函数fitvalue=calfitvalueobjvalue; %运算群体中每个个体的适应度newpop=selectionpop,fitvalue; %交叉%复制newpop=crossoverpop,pc; newpop=mutationpop,pc; %变异bestindividual,bestfit=bestpop,fitvalue; 个体及其适应值yi=maxbestfit; ni=i; pop5=bestindividual; %求出群体中适应值最大的xi=decodechrompop5,1,chromle
14、ngth*10/1023; pop=newpop; end 名师归纳总结 - - - - - - -第 9 页,共 14 页精选学习资料 - - - - - - - - - fplot10*sin5*x+7*cos4*x,0 10 hold on plotx,y,r* hold off z index=maxy; %运算最大值及其位置x5=xindex% 运算最大值对应的 x 值y=z 【问题】求 fx=x 10*sin5x 7*cos4x 的最大值,其中0=x=9 【分析】挑选二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为 0.95, 变异概率为 0.08 【程序清单】
15、%编写目标函数functionsol,eval=fitnesssol,options x=sol1; eval=x 10*sin5*x 7*cos4*x; %把上述函数储备为 fitness.m 文件并放在工作目录下initPop=initializega10,0 9,fitness;% 生成初始种群,大小为10 x endPop,bPop,trace=ga0 9,fitness,initPop,1e-6 11,maxGenTerm,25,normGeomSelect,. 0.08,arithXover,2,nonUnifMutation,2 25 3 %25 次遗传迭代名师归纳总结 运算借过
16、为: x = 第 10 页,共 14 页- - - - - - -精选学习资料 - - - - - - - - - 7.8562 24.8553 当 x 为 7.8562 时, f x取最大值 24.8553 注:遗传算法一般用来取得近似最优解,而不是最优解;遗传算法实例 2 【问题】在 5=Xi=5,i=1,2 区间内,求解fx1,x2=-20*exp-0.2*sqrt0.5*x1.2 x2.2-exp0.5*cos2*pi*x1 cos2*pi*x2 22.71282 的最小值;【分析】种群大小 10,最大代数 1000,变异率 0.1, 交叉率 0.3 【程序清单】源函数的 matlab
17、 代码 function eval=fsol numv=sizesol,2; x=sol1:numv; 2*pi*x/numv eval=-20*exp-0.2*sqrtsumx.2/numv-expsumcos 22.71282; %适应度函数的 matlab 代码 function sol,eval=fitnesssol,options numv=sizesol,2-1; x=sol1:numv; eval=fx; eval=-eval; %遗传算法的 matlab 代码 bounds=ones2,1*-5 5; p,endPop,bestSols,trace=gabounds,fitne
18、ss 注:前两个文件储备为m文件并放在工作目录下,运行结果为名师归纳总结 - - - - - - -第 11 页,共 14 页精选学习资料 - - - - - - - - - p = 0.0000 -0.0000 0.0055 大家可以直接绘出 fx 的图形来大致看看 f x的最值是多少,也可是使用优化函数来验证; matlab 命令行执行命令:fplotx 10*sin5*x 7*cos4*x,0,9 evalops 是传递给适应度函数的参数,opts 是二进制编码的精度, termops 是选择 maxGenTerm终止函数时传递个 maxGenTerm的参数,即遗传代数; xoverop
19、s是传递给交叉函数的参数;mutops 是传递给变异函数的参数;【问题】求 fx=x+10*sin5x+7*cos4x 的最大值,其中 0=x=9 【分析】挑选二进制编码,种群中的个体数目为 10,二进制编码长度为 20,交叉概率为 0.95, 变异概率为 0.08 【程序清单】%编写目标函数functionsol,eval=fitnesssol,options x=sol1; eval=x+10*sin5*x+7*cos4*x; %把上述函数储备为 fitness.m 文件并放在工作目录下initPop=initializega10,0 9,fitness;% 生成初始种群,大小为10 x
20、endPop,bPop,trace=ga0 9,fitness,initPop,1e-6 11,maxGenTerm,25,normGeomSelect,. 0.08,arithXover,2,nonUnifMutation,2 25 3 %25 次遗传迭代运算借过为: x = 7.8562 24.8553 当 x 为 7.8562 时, f x取最大值 24.8553 注:遗传算法一般用来取得近似最优解,而不是最优解;名师归纳总结 - - - - - - -第 12 页,共 14 页精选学习资料 - - - - - - - - - 遗传算法实例 2 【问题】在 5=Xi=5,i=1,2 区间
21、内,求解 fx1,x2=-20*exp-0.2*sqrt0.5*x1.2+x2.2-exp0.5* cos2*pi*x1+cos2*pi*x2+22.71282 的最小值;【分析】种群大小 10,最大代数 1000,变异率 0.1, 交叉率 0.3 【程序清单】源函数的 matlab 代码 function eval=fsol numv=sizesol,2; x=sol1:numv; eval=-20*exp-0.2*sqrtsumx.2/numv-expsumcos 2*pi*x/numv+22.71282; %适应度函数的 matlab 代码 function sol,eval=fitne
22、sssol,options numv=sizesol,2-1; x=sol1:numv; eval=fx; eval=-eval; %遗传算法的 matlab 代码 bounds=ones2,1*-5 5; p,endPop,bestSols,trace=gabounds,fitness 注:前两个文件储备为 p = m文件并放在工作目录下,运行结果为名师归纳总结 0.0000 -0.0000 0.0055 第 13 页,共 14 页- - - - - - -精选学习资料 - - - - - - - - - 大家可以直接绘出fx 的图形来大致看看f x的最值是多少,也可是使用优化函数来验证; matlab 命令行执行命令:fplotx+10*sin5*x+7*cos4*x,0,9 evalops 是传递给适应度函数的参数,opts 是二进制编码的精度, termops 是选择 maxGenTerm终止函数时传递个 maxGenTerm的参数,即遗传代数; xoverops是传递给交叉函数的参数;mutops 是传递给变异函数的参数;名师归纳总结 - - - - - - -第 14 页,共 14 页