遗传算法matlab源代码

上传人:ni****g 文档编号:511999179 上传时间:2023-02-07 格式:DOCX 页数:14 大小:17.50KB
返回 下载 相关 举报
遗传算法matlab源代码_第1页
第1页 / 共14页
遗传算法matlab源代码_第2页
第2页 / 共14页
遗传算法matlab源代码_第3页
第3页 / 共14页
遗传算法matlab源代码_第4页
第4页 / 共14页
遗传算法matlab源代码_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《遗传算法matlab源代码》由会员分享,可在线阅读,更多相关《遗传算法matlab源代码(14页珍藏版)》请在金锄头文库上搜索。

1、方案一的程序编码函数主文件:functionXp,LC1,LC2,LC3=CLBGA8(M,Pm) %陈璐斌编程,解决 VRP 问题(带时间窗) %输入参数%M 遗传进化迭代次数%Pm 变异概率%输出参数%Xp 最优个体%LC1 目标收敛曲线%LC2 平均适应度收敛曲线%LC3 最优适应度收敛曲线%变量初始化Xp=zeros(1,5);LC1=zeros(1,M);LC2=zeros(1,M);LC3=zeros(1,M);Best=inf;%编码方式-第一步:产生初始种群N=10;%N 种群规模farm=cell(l,N);%存储种群的细胞结构k=1;while (N-k=0)G=randp

2、erm(5);%产生5个客户的全排列 farmk=G;k=k+l;end%进化迭代计数器counter=l;while counter=M %第二步:交叉 %交叉采用双亲双子单点交叉N=10;%种群规模 newfarm=cell(1,2*N-4);%存储子代的细胞结构 Ser=randperm(N);%两两随机配对表生成for i=l:(N-2)%避免交叉概率为1A=farmSer(i);B=farmSer(i+1);% 取出父代P0=unidrnd(5);%随机选择交叉点 aa=zeros(1,5);bb=zeros(1,5);A_=A;B_=B;for ii=1:5-P0aa(ii)=B(

3、P0+ii);endfor ii=1:5-P0for iiii=1:5if(B(P0+ii)=A_(iiii)A_(iiii)=0;endendendfor iii=6-P0:5for iiii=1:5 if(A_(iiii)=0) aa(iii)=A_(iiii); A_(iiii)=0;break endendendfor ii=1:5-P0bb(ii)=A(P0+ii);endfor ii=1:5-P0for iiii=1:5if(A(P0+ii)=B_(iiii)B_(iiii)=0;endend for iii=6-P0:5for iiii=1:5if(B_(iiii)=0)bb(i

4、ii)=B_(iiii);B_(iiii)=0;breakendendend%产生子代newfarm2*i-1=aa; newfarm2*i=bb;endFARM=farm,newfarm;%新旧种群合并 % 第三步:选择复制 %计算当前种群适应度并存储N=10;SYZ=zeros(1,3*N-4);syz=zeros(1,3*N-4);for i=1:(3*N-4)x=FARMi;SYZ(i)=clb8(x);end%选择复制,较优的N个个体复制到下一代k=1;while k=(3*N-4)maxSYZ=max(SYZ);posSYZ=find(SYZ=maxSYZ);POS=posSYZ(

5、1);k=k+1;farmk=FARMPOS;syz(k)=SYZ(POS);SYZ(POS)=0;end%记录和更新,更新最优个体,记录收敛曲线数据 maxsyz=max(syz);meansyz=mean(syz);pos=find(syz=maxsyz);LC2(counter+1)=meansyz;if maxsyzBest=maxsyz;Xp=farmpos(1);endLC3(counter+1)=Best;d=0,6.4,3.2,3.9,3.7,2;6.4,0,2.9,2.1,4.5,4.1;3.2,2.9,0,1.5,3.3,1.2;3.9,2.1,1.5,0,3.6,2.6;

6、3.7,4.5,3.3,3.6 ,0,3.8;.2.0,4.1,1.2,2.6,3.8,0;%距离矩阵 t=0,0.16,0.08,0.1,0.09,0.05;0.16,0,0.07,0.05,0.11,0.1;0.08,0.07,0,0.04,0.08,0.03;.0.1,0.05,0.04,0,0.09,0.07;0.09,0.11,0.08,0.09,0,0.10;0.05,0.1,0.03,0.07,0.1,0;%行驶时间矩阵w=0.15,0.2,0.18,0.25,0.22;% 服务时间矩阵% 时间窗向量early=0.15,0.3,0.7,0.4,0.7;xx=x;%取出染色体j=

7、1;%分工点初始化%取距离向量 d1,d2d1=zeros(1,6);d1(1)=d(1,xx(1)+1);for i=1:4d1(i+1)=d(xx(i)+1,xx(i+1)+1);endd1(6)=d(xx(5)+1,1);%时间窗计算T=t(1,xx(1)+1);pun1=0;if Tearly(xx(1)pun1=early(xx(1)-T;T=early(xx(1);endT=T+w(xx(1);for i=2:5T=T+t(xx(i-1)+1,xx(i)+1); if TrandAA=farmi; POS1=unidrnd(5); POS2=unidrnd(5); temp=AA(

8、POS1); AA(POS1)=AA(POS2);AA(POS2)=temp; farmi=AA;end end counter=counter+1; end %第五步:绘制收敛曲线图 figure(2);plot(LC1);xlabel(迭代次数); ylabel(目标的值); title(目标的收敛曲线); figure(3); plot(LC2);xlabel(迭代次数); ylabel (适应度函数的平均值); title(平均适应度函数的收敛曲线);figure(4);plot(LC3);xlabel(迭代次数);ylabel (适应度函数的最优值);title(最优适应度函数的收敛

9、曲线);适应度文件:%计算载重量和时间窗%适应度函数计算function Fitness=clb8(x)d=0,6.4,3.2,3.9,3.7,2;6.4,0,2.9,2.1,4.5,4.1;3.2,2.9,0,1.5,3.3,1.2;3.9,2.1,1.5,0,3.6,2.6;3.7,4.5,3.3,3.6 ,0,3.8;.2.0,4.1,1.2,2.6,3.8,0;%距离矩阵 t=0,0.16,0.08,0.1,0.09,0.05;0.16,0,0.07,0.05,0.11,0.1;0.08,0.07,0,0.04,0.08,0.03;. 0.1,0.05,0.04,0,0.09,0.07

10、;0.09,0.11,0.08,0.09,0,0.10;0.05,0.1,0.03,0.07,0.1,0;%行驶时间矩阵w=0.15,0.2,0.18,0.25,0.22;% 服务时间矩阵% 时间窗向量early=0.15,0.3,0.7,0.4,0.7;xx=x;%取出染色体j=1;%分工点初始化%取距离向量 d1,d2d1=zeros(1,6);d1(1)=d(1,xx(1)+1);for i=1:4d1(i+1)=d(xx(i)+1,xx(i+1)+1);endd1(6)=d(xx(5)+1,1);%时间窗计算T=t(1,xx(1)+1);pun1=0;if Tearly(xx(1)pu

11、n1=early(xx(1)-T;T=early(xx(1);endT=T+w(xx(1);for i=2:5T=T+t(xx(i-1)+1,xx(i)+1);if Tearly(xx(i)pun1=pun1+early(xx(i)-T;T=early(xx(i);endT=T+w(xx(5);endF=sum(10.*d1)+sum(10.*d2)+20*pun1;Fitness=1/F;计算时间文件:functionT=TOTALT(Xp1)Xp=Xp1; t=0,0.16,0.08,0.1,0.09,0.05;0.16,0,0.07,0.05,0.11,0.1;0.08,0.07,0,0

12、.04,0.08,0.03;. 0.1,0.05,0.04,0,0.09,0.07;0.09,0.11,0.08,0.09,0,0.10;0.05,0.1,0.03,0.07,0.1,0;%行驶时间矩阵 w=0.15,0.2,0.18,0.25,0.22;% 服务时间矩阵% 时间窗向量early=0.15,0.3,0.7,0.4,0.7;T=t(1,Xp(1)+1);if Tearly(Xp(1)T=early(Xp(1);endT=T+w(Xp(1);for i=2:5T=T+t(Xp(i-1)+1,Xp(i)+1);if T=0)G=randperm;产生6个客户的全排列 farmk=G;k=k+1;end%进化迭代计数器counter=1;while counter=M %第二步:交叉 %交叉采用双亲双子单点交叉N=10;%种群规模 newfarm=cell(1,2*N-4);%存储子代的细胞结构Ser=randperm(N);%两两随机配对表生成 for i=l:(N-2)%避免交叉概率为1 A=farmSer(i);B=farmSer(i+1);% 取出父代P0=unidrnd(6);%随机选择交叉点 aa=zeros(1,6);bb=zero

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号