Matlab【优化布局-配电网重构】基于遗传算法求解实现配电网故障恢复和故障重构问题

%关于编译
%函数说明
%输入变量: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
          
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值