www.pudn.com > yhzgah_sars.rar > variation.m


%对染色体进行变异运算 
function NewW=variation(NewW,gc,gm) 
%变异率 
Pm=0.05; 
%计算交叉次数 
m=[size(NewW(1).w1,1),size(NewW(1).w2,1),size(NewW(1).b1,1),size(NewW(1).b2,1)]; 
n=[size(NewW(1).w1,2),size(NewW(1).w2,2),size(NewW(1).b1,2),size(NewW(1).b2,2)]; 
P=length(NewW); 
MutNum=Pm*m.*n*P; 
for i=1:MutNum(1) 
    %选择参与变异操作的基因座 
    a=floor(1+(m(1)-1)*rand+0.5); 
    b=floor(1+(n(1)-1)*rand+0.5); 
    %选择参与变异操作的染色体 
    c=floor(2+(P-2)*rand+0.5); 
    %计算权向量的边界 
    [bl1 br1]=findminmax(NewW(c).w1); 
    md=sign(rand-0.5); 
    if md 
        NewW(c).w1(a,b)=NewW(c).w1(a,b)-Mutfun(NewW(c).w1(a,b),gc,gm,bl1,br1); 
    else 
        NewW(c).w1(a,b)=NewW(c).w1(a,b)+Mutfun(NewW(c).w1(a,b),gc,gm,bl1,br1); 
    end 
end 
for i=1:MutNum(2) 
    %选择参与变异操作的基因座 
    a=floor(1+(m(2)-1)*rand+0.5); 
    b=floor(1+(n(2)-1)*rand+0.5); 
    %选择参与变异操作的染色体 
    c=floor(2+(P-2)*rand+0.5); 
    %计算权向量的边界 
    [bl2 br2]=findminmax(NewW(c).w2(a,b)); 
    md=sign(rand-0.5); 
    if md 
        NewW(c).w2(a,b)=NewW(c).w2(a,b)-Mutfun(br2-NewW(c).w2(a,b),gc,gm,bl2,br2); 
    else 
        NewW(c).w2(a,b)=NewW(c).w2(a,b)+Mutfun(NewW(c).w2(a,b)-bl2,gc,gm,bl2,br2); 
    end 
end 
for i=1:MutNum(3) 
    %选择参与变异操作的基因座 
    a=floor(1+(m(3)-1)*rand+0.5); 
    b=floor(1+(n(3)-1)*rand+0.5); 
    %选择参与变异操作的染色体 
    c=floor(2+(P-2)*rand+0.5); 
    %计算权向量的边界 
    [bl3 br3]=findminmax(NewW(c).b1(a,b)); 
    md=sign(rand-0.5); 
    if md 
        NewW(c).b1(a,b)=NewW(c).b1(a,b)-Mutfun(br3-NewW(c).b1(a,b),gc,gm,bl3,br3); 
    else 
        NewW(c).b1(a,b)=NewW(c).b1(a,b)+Mutfun(NewW(c).b1(a,b)-bl3,gc,gm,bl3,br3); 
    end 
end 
for i=1:MutNum(4) 
    %选择参与变异操作的基因座 
    a=floor(1+(m(4)-1)*rand+0.5); 
    b=floor(1+(n(4)-1)*rand+0.5); 
    %选择参与变异操作的染色体 
    c=floor(2+(P-2)*rand+0.5); 
    %计算权向量的边界 
    [bl4 br4]=findminmax(NewW(c).b2(a,b)); 
    md=sign(rand-0.5); 
    if md 
        NewW(c).b2(a,b)=NewW(c).b2(a,b)-Mutfun(br4-NewW(c).b2(a,b),gc,gm,bl4,br4); 
    else 
        NewW(c).b2(a,b)=NewW(c).b2(a,b)+Mutfun(NewW(c).b2(a,b)-bl4,gc,gm,bl4,br4); 
    end 
end