📄 遗传算法.m
字号:
p=zeros(50,12);
p_test=zeros(50,30);
%50*18的输入样本
for i=1:50
for j=1:12
p(i,j)=dd(i,j);
end
end
%测试样本
for i=1:50
for j=1:30
p_test(i,j)=dd(i,j+18);
end
end
t=[1 0;1 0;1 0;1 0;1 0;1 0;0 1;0 1;0 1;0 1;0 1;0 1]';%2×18的目标样本
variable=zeros(1,780);%1×77的矩阵,用于存放种群样本
%f=zeros(2,1);%用于存放测试样本的结果
nind=30;%个体数目
maxgen=50;%最大遗传代数
nvar=780;%变量的维数
preci=20;%变量的二进制位数
ggap=1;%代沟
%fieldD=[20*5252;-10;10;1;0;1;1];
fieldD=[rep([20],[1,780]);rep([-1;1],[1,780]);rep([1;0;1;1],[1,780])];%区域表述器
chrom=crtbp(30,780*20);%创建初始种群
gen=0;%代计数器
objvar=bs2rv(chrom,fieldD);%计算初始种群的十进制转换
objv=objfunval(objvar,p,t);%计算初始种群个体的目标函数值
while gen<maxgen, %迭代
fitnv=ranking(objv); %分配适应度值
selch=select('sus',chrom,fitnv,ggap);%选择
selch=recombin('xovsp',selch,0.7); %重组
selch=mut(selch); %变异
objvar=bs2rv(selch,fieldD); %计算子代种群的十进制转换
objvsel=objfunval(objvar,p,t);%计算子代的目标函数值
[chrom objv]=reins(chrom,selch,1,1,objv,objvsel);%重插值
gen=gen+1; %代计数器增加
end
objvar=bs2rv(chrom,fieldD);%遗传优化后的权值
i=0;
[y,i]=min(objv);
variable=objvar(i,:);%遗传后的最优权值
wij=fenpei(variable);%将最优权值种群通过fenpei函数变成矩阵形式赋给wij
net=newff(minmax(p),[15 2],{'logsig','logsig'},'traingdx');%建立BP网络
net.iw{1,1}=wij;%用wij初始化网络输入层到输出层的权值
net.trainparam.epochs=500;%设定训练次数
net.trainparam.goal=0.001;%设定满足的目标
LP.lr=0.5;%学习率
net=train(net,p,t);%训练网络
%p_test=[d3 d4 d8 d11];%测试样本
f=sim(net,p_test)%仿真
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -