%关于编译
%函数说明
%输入变量:pop:种群,pm:变异概率
%输出变量:newpop变异以后的种群
function [newpop] = mutation(pop,pm,bb)
[px,py] = size(pop);
newpop = ones(size(pop));
L1=pop(:,1:8); %基于基因块的染色体
L2=pop(:,9:16);
L3=pop(:,17:22);
L4=pop(:,23:32);
L5=pop(:,33:36);
%基于环网的编码策略,公共支路只需要放在其中1个环网中,开关1不需要编码(始终闭合)
loop1=[2,3,4,5,18,19,20,33];
loop2=[22,23,24,25,26,27,28,37];
loop3=[8,9,10,11,21,35];
loop4=[6,7,15,16,17,29,30,31,32,36];
loop5=[12,13,14,34];
%需要判断故障支路在哪个环网上,对应的环网不需要操作,保证故障支路始终置0
if ismember(bb,loop1)==1
for i = 1:px
if(rand<pm)
mjuzhen=[2,3,4,5];
cpoint = mjuzhen(round(rand*3)+1);%选择基因块
if cpoint==2
spoint=round(rand*(size(L2,2)-1))+1; %选择基因位
if L2(i,spoint)==0
L2(i,spoint)=1;
if (spoint+1)<=size(L2,2)
L2(i,spoint+1)=0; %后一位置为0
else
L2(i,1)=0;
end
end
if L2(i,spoint)==1
L2(i,find(L2(i,:)==0))=1;%原先为0的置为1
L2(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==3
spoint=round(rand*(size(L3,2)-1))+1; %选择基因位
if L3(i,spoint)==0
L3(i,spoint)=1;
if (spoint+1)<=size(L3,2)
L3(i,spoint+1)=0; %后一位置为0
else
L3(i,1)=0;
end
end
if L3(i,spoint)==1
L3(i,find(L3(i,:)==0))=1;%原先为0的置为1
L3(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==4
spoint=round(rand*(size(L4,2)-1))+1; %选择基因位
if L4(i,spoint)==0
L4(i,spoint)=1;
if (spoint+1)<=size(L4,2)
L4(i,spoint+1)=0; %后一位置为0
else
L4(i,1)=0;
end
end
if L4(i,spoint)==1
L4(i,find(L4(i,:)==0))=1;%原先为0的置为1
L4(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==5
spoint=round(rand*(size(L5,2)-1))+1; %选择基因位
if L5(i,spoint)==0
L5(i,spoint)=1;
if (spoint+1)<=size(L5,2)
L5(i,spoint+1)=0; %后一位置为0
else
L5(i,1)=0;
end
end
if L5(i,spoint)==1
L5(i,find(L5(i,:)==0))=1;%原先为0的置为1
L5(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
else newpop(i,:) = pop(i,:);
end
end
end
if ismember(bb,loop2)==1
for i = 1:px
if(rand<pm)
mjuzhen=[1,3,4,5];
cpoint = mjuzhen(round(rand*3)+1);%选择基因块
if cpoint==1
spoint=round(rand*(size(L1,2)-1))+1; %选择基因位
if L1(i,spoint)==0
L1(i,spoint)=1;
if (spoint+1)<=size(L1,2)
L1(i,spoint+1)=0; %后一位置为0
else
L1(i,1)=0;
end
end
if L1(i,spoint)==1
L1(i,find(L1(i,:)==0))=1;%原先为0的置为1
L1(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==3
spoint=round(rand*(size(L3,2)-1))+1; %选择基因位
if L3(i,spoint)==0
L3(i,spoint)=1;
if (spoint+1)<=size(L3,2)
L3(i,spoint+1)=0; %后一位置为0
else
L3(i,1)=0;
end
end
if L3(i,spoint)==1
L3(i,find(L3(i,:)==0))=1;%原先为0的置为1
L3(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==4
spoint=round(rand*(size(L4,2)-1))+1; %选择基因位
if L4(i,spoint)==0
L4(i,spoint)=1;
if (spoint+1)<=size(L4,2)
L4(i,spoint+1)=0; %后一位置为0
else
L4(i,1)=0;
end
end
if L4(i,spoint)==1
L4(i,find(L4(i,:)==0))=1;%原先为0的置为1
L4(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==5
spoint=round(rand*(size(L5,2)-1))+1; %选择基因位
if L5(i,spoint)==0
L5(i,spoint)=1;
if (spoint+1)<=size(L5,2)
L5(i,spoint+1)=0; %后一位置为0
else
L5(i,1)=0;
end
end
if L5(i,spoint)==1
L5(i,find(L5(i,:)==0))=1;%原先为0的置为1
L5(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
else newpop(i,:) = pop(i,:);
end
end
end
if ismember(bb,loop3)==1
for i = 1:px
if(rand<pm)
mjuzhen=[1,2,4,5];
cpoint = mjuzhen(round(rand*3)+1);%选择基因块
if cpoint==1
spoint=round(rand*(size(L1,2)-1))+1; %选择基因位
if L1(i,spoint)==0
L1(i,spoint)=1;
if (spoint+1)<=size(L1,2)
L1(i,spoint+1)=0; %后一位置为0
else
L1(i,1)=0;
end
end
if L1(i,spoint)==1
L1(i,find(L1(i,:)==0))=1;%原先为0的置为1
L1(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==2
spoint=round(rand*(size(L2,2)-1))+1; %选择基因位
if L2(i,spoint)==0
L2(i,spoint)=1;
if (spoint+1)<=size(L2,2)
L2(i,spoint+1)=0; %后一位置为0
else
L2(i,1)=0;
end
end
if L2(i,spoint)==1
L2(i,find(L2(i,:)==0))=1;%原先为0的置为1
L2(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==4
spoint=round(rand*(size(L4,2)-1))+1; %选择基因位
if L4(i,spoint)==0
L4(i,spoint)=1;
if (spoint+1)<=size(L4,2)
L4(i,spoint+1)=0; %后一位置为0
else
L4(i,1)=0;
end
end
if L4(i,spoint)==1
L4(i,find(L4(i,:)==0))=1;%原先为0的置为1
L4(i,spoint)=0;
end
newpop(i,:)=[L1(i,:),L2(i,:),L3(i,:),L4(i,:),L5(i,:)];
end
if cpoint==5
spoint=round(rand*(size(L5,2)-1))+1; %选择基因位
wouderw
- 粉丝: 339
- 资源: 2960
最新资源
- 【年终奖】年终奖与当月工资个税计算表(终极版).xlsx
- 【年终奖】年终考核方案(WORD版).doc
- 【年终奖】销售业绩奖金计算表.xlsx
- 【年终奖】通用绩效考核表含奖金.xlsx
- 【年终奖】员工年终奖分配方案(规范行政文件).doc
- 【年终奖】员工超产奖金计算表.xlsx
- 【年终奖】员工提成奖金统计表.xlsx
- 【年终奖】员工年终奖金发放统计(函数自动计算).xlsx
- 【全年行事历】4团建活动物料清单.xlsx
- 【全年行事历】5团建医药箱常备药清单.docx
- 【全年行事历】7团建活动策划书.docx
- 【全年行事历】ZOL团建活动策划方案.pptx
- 【全年行事历】XXX团建活动计划.pptx
- 【全年行事历】86团建活动培训PPT完.pptx
- 【全年行事历】大型企业公司活动进度表.xlsx
- 【全年行事历】公司年度活动计划.xls
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页