MATLAB.遗传算法和粒子群算法程序设计及实例应用

所需积分/C币:50 2014-05-29 14:10:28 1.13MB PDF
175
收藏 收藏
举报

遗传算法和粒子群算法程序设计及实例应用
调试简化。 2.编码 若是用遗传算法求解函数优化问题, Matlab中有白带的二进制字符串和|进制之间的转 换函数。编码多用向量或矩阵计算,因此特别注意尽量多的采用向量或者矩阵的方式计算,而 不是采用循环, Matlab中循环结构效率并不高。即便是采用循环也尽量做到列优先。 12粒子群算法 粒子群算法相对于上节的遗传算法在编程实现上简单。在某些注意事项上和遗传算法相同 之处。 121算法 1.初始化粒子群 2.开始循环(迭代N次停止) 2.1.粒了之间互换信息(即获取相互的适应度值信息) 22.各粒子根据获取的信息调整位置和速度 3.输出结果 122注意事项 1.领域拓扑结构选取 即粒了之间互换信息的单位或结构,思路最简单的即以整个群为一个互换信息单位,互换 信息主要涉及到适应度函数值的计算,另外,结构的选取,直接关系到每一步粒子位置和速度 的更新情况。因此,它一方面影响收敛速度,一方面对计算复杂度和计算量有很大影响。 2.在参数设置和适应度函数选择上和遗传算法类似。 1.23 Matlab编程注意事项 1.适应度函数的计算 在粒了群间信息互换时,主要涉及到的计算量就是适应度函数值的计算,可采取向量化计 算。即每个粒子信息交换的最小单倞的适应度数值可实现一次性计算,这就极大的提高了程 序的效率。 此处涉及的向量化计算优势将在后面的实例中得到淋漓精致的体现 2.另外,适应度函数可单独编写 function或者采用匿名函数。其余事项和遗传算法类似 二、遗传算法和粒子群算法编程实例 21遗传算法实例 本例选自《计算智能》2.2的案例作为编程实现对象。 4 211解决的问题 max/(x1,x2)=215+x1Sin(4x1)+x2sin(20x2), 3.0≤x1≤12.1 41≤x2≤58 程序设计中选择的二进制编码,种群规模二20,染色体杂交时的概率为0.25,变异时概 率为0.01,适应度函数为函数本身,终止条件为达到预定最大迭代次数。 212 Matlab程序主体构成 Objective function.............................. .:::: Initial group 4 Loop for better result Output.…,…,…,…,… function hereon) ‰HERE- hered ty-《计算智能》黄竞伟2.2例 %n-繁衍r代种群,不加上父代(初始第一代) Chenlei %2012/9/1521:44:7 Objective function f=((x1,X2)21.5+x1sin(4p1*x1)+x2*sin(20“pi“2); Initial group cel1(1,20) for i=1: 20 templ= round(rand (1, 33)); edie- vec2str(temp1); Vii temp2 end clear templ temp 2 adapt value o of initial grou record = adapt(v, f o adaptive value maxrec maxrecord(record, v);% keep info Loop for better result for i=l: n choose father v= chfather(v, record); genetIc operator V=opcrossover(v);% cross operator variation (v; variant operator record adapt(v, f)i temp= maxrecordcrecord, v: if (temp(1, 1)>maxrec(1, 1))%keep the best value from now on maxrec temp; mark =1 end d time toc Output format long fprintf( xl: %F\n, maxrec(2)) fprintf o x2: %f\n, maxrec(3) fprintf( fox from:%1. ofdth) generation \n', mark) printf( time:%fs、n',time); 上述程序中所调用的函数以附件形式列出。 213程序运行示例 ■迭代1000次 >>here(1000) x1:11.628123 x2:5.623759 f(x1,x2):38.725830 from: 979(th) generation time:4.559407s 上面的运行结果显示了最优函数值及其对应的变量值,最优值出现在979代,计算时间为 4.559407s。 迭代5000次 >>here(5000) 丛1:11.625128 x2:5.725498 f(x1,x2):38.847806 from: 331(th) generation time:22.815248s 迭代5000次时,实际结果比迭代1000次要妤,但实际上,最优值在第331代就已经出现, 后面儿乎是浪费时间。由此看来,并不是迭代次数越多越好,同时也体现了遗传算法的随札性。 因此,选择好的终止条件还是需要的,以避免无谓的计算量。 22粒子群算法实例 本例选白《计算智能》7.3实例。 221解决的问题 n2x+x2-0.5 minf(x1,x2)=05+ +0.001(x2+x2) 100≤x1,x2≤100 03 此问题的最优解是口知的,其解为∫(x,x2)=0,最优解为(0,0) 种群规模为20,适应度函数取目标函数,领域结构采取全局领域结构,惯性权重为0.9 C1=c2=2,最大速度为3 222 Matlab程序主体构成 下面的程序可设置迭代次数和种群规模,默认迭代为1000次,种群为20。 Initial setti Initial Group...... ..:::.·: Loop for result Output function pso(N, M) Pso Pso algorithm %《计算智能》黄竞伟page1167.3例 h N= 1000: max iterative times %M=20 o Chenlei %2012/9/1820:34:16 Initial Setting if(nargin ifCnargin 1000;end set constant value 0.9;c1=2;c2 Initial Group (:,1:2)=200rand(M,2)-100;%1-2X1x2 [g, pbest]=pb() %6 initi al pbest and Loop for Result 0 while j<N ge message en each othe if(f(P(i,l), PCi f(pbest(i, 2), pbest(i, 3))) pbest(1,2:3)=P(i,1:2) pbest(i, 1)=f(P(i, 1), P(i, 2)) eno best(i, update g by Piself g betterNei (pbest, 1, g); update g vs neighbour update position and speed of p 9 update Px PCi,3:4)=W*P〔i,3:4)+C1rand〔 pbest〔i,1:2)P〔i,1:2)) +c2rand〔g(2:3)-P(i,1:2)); P(i, 3: 4)= P2Vmax(P(i, 3: 4), Vmax) P〔i,1:2)=P〔i,1:2)+P(i,3:4); end end Output result(g, time); %output 此程序所调用函数将在附录中列出。 223程序运行示例 迭代1000次,种群规模20 >pSo(1000,20) 1:0.000753207234 x2:-C.000095197173 f(x1,x2):0.000000576950 time:2.3357823584_6s 上面的运行结果已经很接近真实解了,计算时间才25。而实际上在先前的程序版本是分 开计算适应度值的,其计算时间达到了10s以上,差距是很大的。所以,注意结合 Matlab的 语言特色提高程序效率是很必要的。 迭代1000次,种群规模50 >>PsO(1000,50) x1:-C.000066685360 2:0.000121684685 f(x1,x2):0.000000019273 8 time:6.032649268323s 迭代5000次,种群规模20 >>pso(5000,20) x1:-0.000074625736 x2:0.000013028288 f(x1,x2):0.000000005744 time:11.3≤4202781232s 迭代5000次,种群规模50 >>pso(5000,50) 1:-0.000017378976 x2:-C.000004150803 f(x1,x2):0.000000000320 time:30.087009315094s 从上面的几个结果来看,増加迭代次数和种群规模对解的精度提高并不是十分明显 、参考文献 黄竞伟等.计算智能.北京.科学出版社.2010 附录 1遗传算法 Matlab程序调用子函数 function record adapt(v, f) 3计算2进制的适应值 record zeros(20,1, double for 1:20 . emp1 =vii temp2= templ(1:18)i temp3 templ(19: end)i record(ir 1)- f(bin x(temp2, 1), bin x(temp3, 2)) end end function num bin x(bin, opt) 3直接将2进制字符串转化为题中×1 switch opt case 1 3.0+bin2dec(bin)*((12.1-(-3.0))/(2^18-1)); case 2 4.1+bin2dec(bin)*((5.8-4.1)/(2^15-1)); end end function v= chfather (v, record) 8 choose father F-sum( record);是计算所有染色体适应值之和 pk= recor/F;计算每个染色体选择概率 3计算每个染色体累积桃率 ak zeros(20, 1,double)i for⊥=1:20 水k()=sum(2k(1:i)); end 3模拟转动轮盘20次 r=rand(20,1);号r存储随机数,同时后续保存选择的染色体号 for i=1: 20 whi⊥e(r(i)>qk(k)) K =K end r(i) end 各保存选择的新序列 temp for -=l: 20 V[]= temp[r(i)] end end function maxrec maxrecord(record, v) 8 keep the max value [m, i]= max(record) maxrec(l, 1 empl= v[i1 temp temp1(1:18) temp3= templ(19: end)i naxrec(2, 1)= bin x(temp2, 1)i maxrec(3,1)=bin x(temp3, 2) end function [gl, g2] onecross(gene1, gene, pos) len numel(genel yl genel (1: pos) 2 = gene(1: pos)i gl(pOs+1: len)=gene2 (pos+1: end)i g2(pOs+1: len)=genel(pos+1: end) end function v opcrossover(v) o one point crossover 25 while ( rand(20,1) k nd(r pc) 1= numer(mk)i end if (mod (numer(mk),2)== 1) mk nmk(1:end-1)i end 1 Canal ([1,32],1, nume l(mk)/2) for i=1: numel(mk)/2 [V{mk(2*(i-1)+1)},V{mk(2*(i-1)+2)}]= necroses({mk(2*(-1)+1)}, {mk(2×(1-1)+2)},r1(三)) end end 10 function gnew vari (gold, pos) gnew- goldi if (gnew(pos)== 1) gnew(pos else 可new(pOs ≥n end function v= variation(v) o variate operater pI=0.01; for⊥=1:20 r= rand(33, 1) k find(r pm) for j=1: nume l(k) vari(vii),k(j) end end end function str vec2str(vec) 8 CHAR2STR convert num vector to string len length (vec)i str for i-l:len temp num2str(vec(1))i tr strcat (str, temp)i d end 2粒子群算法 Matlab程序调用子函数 function g= betterNei(pbest, i, g) 各 BETTERNE T在邻居中找最好的替代g size(pbest, 1) pbe(-:i-1,:)= pbest(1:i-1,2:3) pbe(:M-1,;)= pbest(i+1:M,2:3) tempo f(pbe(:,1), phe(:,2))i except i [- temp min (tempo)i s minimum index temp min(temp) o min (minimum index) empo(temp) g(2:3)=pbe(temp,:: end function f= f(x1 x2) f=0.5+((sin((x1.^2+x2.2).^0.5).2)-0.5)./(1+0.001*(x1.^2+x2.^2)).^2; function P P2Vmax(P, vmax) Vmax P(P >Vmax)=Vmax 各<-Vmax P(P < -Vmax) Vmax nd function [g, pbes] pb(P) pbes(: 1)=f(P(: 1)P(:2))i first col save f(x1, x2)

...展开详情
试读 11P MATLAB.遗传算法和粒子群算法程序设计及实例应用
立即下载 身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚钱or赚积分
最新推荐
MATLAB.遗传算法和粒子群算法程序设计及实例应用 50积分/C币 立即下载
1/11
MATLAB.遗传算法和粒子群算法程序设计及实例应用第1页
MATLAB.遗传算法和粒子群算法程序设计及实例应用第2页
MATLAB.遗传算法和粒子群算法程序设计及实例应用第3页

试读结束, 可继续读1页

50积分/C币 立即下载