⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cross.m

📁 该程序用遗传算法对人工神经网络进行优化
💻 M
字号:
%对染色体进行交叉运算
function NewW=cross(NewW,gc,gm)
%交叉取值率
Pc=0.1;
%计算交叉次数
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);
CrossNum=Pc*m.*n*P;
for i=1:CrossNum(1)
    %随机选取两个父代参与交叉操作
    a1=floor(2+(P-2)*rand+0.5);
    a2=floor(2+(P-2)*rand+0.5);
    %随机选取染色体上参与交叉操作的元素
    b=floor(1+(m(1)-1)*rand+0.5);
    c=floor(1+(n(1)-1)*rand+0.5);
    %参与交叉的父代染色体
    p1=NewW(a1).w1(b,c);
    p2=NewW(a2).w1(b,c);
    a=rand;
    %线性交叉运算
    p1=p1*a+p2*(1-a);
    p2=p1*(1-a)+p2*a;
    %子代替代其父代
    NewW(a1).w1(b,c)=p1;
    NewW(a2).w1(b,c)=p2;
end
for i=1:CrossNum(2)
    %随机选取两个父代参与交叉操作
    a1=floor(2+(P-2)*rand+0.5);
    a2=floor(2+(P-2)*rand+0.5);
    %随机选取染色体上参与交叉操作的元素
    b=floor(1+(m(2)-1)*rand+0.5);
    c=floor(1+(n(2)-1)*rand+0.5);
    %参与交叉的父代染色体
    p1=NewW(a1).w2(b,c);
    p2=NewW(a2).w2(b,c);
    a=rand;
    %线性交叉运算
    p1=p1*a+p2*(1-a);
    p2=p1*(1-a)+p2*a;
    %子代替代其父代
    NewW(a1)=NewW(a1);
    NewW(a1).w2(b,c)=p1;
    NewW(a2).w2(b,c)=p2;
end
for i=1:CrossNum(3)
    %随机选取两个父代参与交叉操作
    a1=floor(2+(P-2)*rand+0.5);
    a2=floor(2+(P-2)*rand+0.5);
    %随机选取染色体上参与交叉操作的元素
    b=floor(1+(m(3)-1)*rand+0.5);
    c=floor(1+(n(3)-1)*rand+0.5);
    %参与交叉的父代染色体
    p1=NewW(a1).b1(b,c);
    p2=NewW(a2).b1(b,c);
    a=rand;
    %线性交叉运算
    p1=p1*a+p2*(1-a);
    p2=p1*(1-a)+p2*a;
    %子代替代其父代
    NewW(a1)=NewW(a1);
    NewW(a1).b1(b,c)=p1;
    NewW(a2).b1(b,c)=p2;
end
for i=1:CrossNum(4)
    %随机选取两个父代参与交叉操作
    a1=floor(2+(P-2)*rand+0.5);
    a2=floor(2+(P-2)*rand+0.5);
    %随机选取染色体上参与交叉操作的元素
    b=floor(1+(m(4)-1)*rand+0.5);
    c=floor(1+(n(4)-1)*rand+0.5);
    %参与交叉的父代染色体
    p1=NewW(a1).b2(b,c);
    p2=NewW(a2).b2(b,c);
    a=rand;
    %线性交叉运算
    p1=p1*a+p2*(1-a);
    p2=p1*(1-a)+p2*a;
    %子代替代其父代
    NewW(a1)=NewW(a1);
    NewW(a1).b2(b,c)=p1;
    NewW(a2).b2(b,c)=p2;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -