




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、遗传算法优化的BP神经网络建模 (1)主程序 %清空环境变量 clc clear %读取数据 load data.mat %节点个数 inputnum=4; hiddennum=5; outputnum=1; %训练数据和预测数据 input_train=input(1:150,:' input_test=input(151:200,:' output_train=output(1:150' output_test=output(151:200' %选连样本输入输出数据归一化 inputn,inputps=mapminmax(input_train; outpu
2、tn,outputps=mapminmax(output_train; %构建网络 net=newff(inputn,outputn,hiddennum; % 遗传算法参数初始化 maxgen=200; %进化代数,即迭代次数 sizepop=30; %种群规模 pcross=0.9; %交叉概率选择,0和1之间 pmutation=0.1; %变异概率选择,0和1之间 %节点总数 numsum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum; lenchrom=ones(1,numsum; bound=-3*ones(nu
3、msum,1 3*ones(numsum,1; %数据范围 %-种群初始化-%- - individuals=struct('fitness',zeros(1,sizepop, 'chrom',; %将种群信息定义为一个结构体 %avgfitness=; %每一代种群的平均适应度 bestfitness=; %每一代种群的最佳适应度 bestchrom=; %适应度最好的染色体 %初始化种群 for i=1:sizepop %随机产生一个种群 individuals.chrom(i,:=Code(lenchrom,bound; %编码 x=individuals
4、.chrom(i,:; %计算适应度 individuals.fitness(i=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn; %染色体的适应度 end %找最好的染色体 bestfitness bestindex=min(individuals.fitness; bestchrom=individuals.chrom(bestindex,:; %最好的染色体 %avgfitness=sum(individuals.fitness/sizepop; %染色体的平均适应度 % 记录每一代进化中最好的适应度和平均适应度 %trace=
5、avgfitness bestfitness; % 迭代求解最佳初始阀值和权值 % 进化开始 for i=1:maxgen i % 选择 individuals=Select(individuals,sizepop; % avgfitness=sum(individuals.fitness/sizepop; %交叉 individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound; % 变异 individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom
6、,sizepop,i,maxgen,bound; % 计算适应度 for j=1:sizepop x=individuals.chrom(j,:; %解码 individuals.fitness(j=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn; end %找到最小和最大适应度的染色体及它们在种群中的位置 newbestfitness,newbestindex=min(individuals.fitness; worestfitness,worestindex=max(individuals.fitness; % 代替上一次进化中最
7、好的染色体 if bestfitness>newbestfitness bestfitness=newbestfitness; bestchrom=indi viduals.chrom(newbestindex,:; end individuals.chrom(worestindex,:=bestchrom; individuals.fitness(worestindex=bestfitness; %avgfitness=sum(individuals.fitness/sizepop; % trace=trace;avgfitness bestfitness; %记录每一代进化中最好的适
8、应度和平均适应度 end % 遗传算法结果分析 %figure(3 %r c=size(trace; %plot(1:r',trace(:,2,'b-' %title('适应度曲线 ' '终止代数' num2str(maxgen; %xlabel('进化代数'ylabel('适应度' %legend('平均适应度','最佳适应度' disp('适应度 变量' x=bestchrom; % 把最优初始阀值权值赋予网络预测 % %用遗传算法优化的BP网络进行值预测
9、 w1=x(1:inputnum*hiddennum; B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum; w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum; B2=x (inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum; net.iw1,1=res
10、hape(w1,hiddennum,inputnum; net.lw2,1=reshape(w2,outputnum,hiddennum; net.b1=reshape(B1,hiddennum,1; net.b2=B2; % BP网络训练 %网络进化参数 net.trainParam.epochs=100; net.trainParam.lr=0.1; %net.trainParam.goal=0.00001; %网络训练 net,per2=train(net,inputn,outputn; % BP网络预测 %数据归一化 inputn_test=mapminmax('apply
11、39;,input_test,inputps; an=sim(net,inputn_test; test_simu=mapminmax('reverse',an,outputps; error=test_simu-output_test; %figure(4; hold on;plot(1:500,error,'r' legend('优化前的误差','优化后的误差','fontsize',12 (2编码子程序code.m function ret=Code(lenchrom,bound %本函数将变量编码成染色体,
12、用于随机初始化一个种群 % lenchrom input : 染色体长度 % bound input : 变量的取值范围 % ret output: 染色体的编码值 flag=0; while flag=0 pick=rand(1,length(lenchrom; ret=bound(:,1'+(bound(:,2-bound(:,1'.*pick; %线性插值,编码结果以实数向量存入ret中 flag=test(lenchrom,bound,ret; %检验染色体的可行性 end (3适应度函数fun.m function error = fun(x,inputnum,hid
13、dennum,outputnum,net,inputn,outputn %该函数用来计算适应度值 %x input 个体 %inputnum input 输入层节点数 %outputnum input 隐含层节点数 %net input 网络 %inputn input 训练输入数据 %outputn input 训练输出数据 %error output 个体适应度值 %提取 w1=x(1:inputnum*hiddennum; B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum; w2=x(inputnum*hiddennum+hid
14、dennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum; B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum; net=newff(inputn,outputn,hiddennum; %网络进化参数 net.trainParam.epochs=20; net.trainParam.lr=0.1; net.trai nParam.goal=0.00001; ne
15、t.trainParam.show=100; net.trainParam.showWindow=0; %网络权值赋值 net.iw1,1=reshape(w1,hiddennum,inputnum; net.lw2,1=reshape(w2,outputnum,hiddennum; net.b1=reshape(B1,hiddennum,1; net.b2=B2; %网络训练 net=train(net,inputn,outputn; an=sim(net,inputn; error=sum(abs(an-outputn; (4选择操作Select.m function ret=select
16、(individuals,sizepop % 该函数用于进行选择操作 % individuals input 种群信息 % sizepop input 种群规模 % ret output 选择后的新种群 %求适应度值倒数 a bestch=min(individuals.fitness; %b=individuals.chrom(bestch; %c=individuals.fitness(bestch; fitness1=10./individuals.fitness; %individuals.fitness为个体适应度值 %个体选择概率 sumfitness=sum(fitness1;
17、sumf=fitness1./sumfitness; %采用轮盘赌法选择新个体 index=; for i=1:sizepop %sizepop为种群数 pick=rand; while pick=0 pick=rand; end for i=1:sizepop pick=pick-sumf(i; if pick<0 index=index i; break; end end end %index=index bestch; %新种群 individuals.chrom=individuals.chrom(index,:; %individuals.chrom为种群中个体 individ
18、uals.fitness=individuals.fitness(index; %individuals.chrom=individuals.chrom;b; %individuals.fitness=individuals.fitness;c; ret=individuals; (5交叉操作cross.m function ret=Cross(pcross,lenchrom,chrom,sizepop,bound %本函数完成交叉操作 % pcorss input : 交叉概率 % lenchrom input : 染色体的长度 % chrom input : 染色体群 % sizepop
19、input : 种群规模 % ret output : 交叉后的染色体 for i=1:sizepop %每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,%但该轮for循环中是否进行交叉操作则由交叉概率决定(continue控制) % 随机选择两个染色体进行交叉 pick=rand(1,2; while prod(pick=0 pick=rand(1,2; end index=ceil(pick.*sizepop; % 交叉概率决定是否进行交叉 pick=rand; while pick=0 pick=rand; end if pick>pcros
20、s continue; end flag=0; while flag=0 % 随机选择交叉位 pick=rand; while pick=0 pick=rand; end pos=ceil(pick.*sum(lenchrom; %随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同 pick=rand; %交叉开始 v1=chrom(index(1,pos; v2=chrom(index(2,pos; chrom(index(1,pos=pick*v2+(1-pick*v1; chrom(index(2,pos=pick*v1+(1-pick*v2; %交叉结束
21、flag1=test(lenchrom,bound,chrom(index(1,:; %检验染色体1的可 行性 flag2=test(lenchrom,bound,chrom(index(2,:; %检验染色体2的可行性 if flag1*flag2=0 flag=0; else flag=1; end %如果两个染色体不是都可行,则重新交叉 end end ret=chrom; (6变异操作Mutation.m function ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound % 本函数完成变异操作 % pcorss input : 变异概率 % lenchrom input : 染色体长度 % chrom input : 染色体群 % sizepop input : 种群规模 % opts input : 变异方法的选择 % pop input : 当前种群的进化代数和最大的进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度不锈钢材料生产设备维修保养合同
- 二零二五年度建筑水电工程税收筹划合同书
- 二零二五年度市政道路照明工程施工合同费支付条款
- 二零二五年度专业维修技师个人劳务用工协议
- 二零二五年度物联网设备合作分成与智能解决方案协议
- 2025版知识产权担保合同担保期限及侵权赔偿条款
- 2025版机场候机楼电气安装工程合同
- 2025年数据中心机房迁移与设备调优服务合同
- 二零二五年工业自动化设备采购协议
- 二零二五年度国际货物仓储合同范本
- 公司宣传工作管理办法
- 2024年云南省巍山彝族回族自治县人民医院公开招聘护理工作人员试题带答案详解
- 2025年智能安全帽项目规划申请报告
- 济南海川小升初数学试卷
- 铁路职业道德课件教学
- 道路货物运输安全生产管理制度文本
- 2025年安全生产半年总结
- 超声诊断在主动脉夹层中的应用
- 初高中衔接词-1600 词
- 2025年高考真题-生物(河南卷) 含解析
- 加油站消防安全知识培训
评论
0/150
提交评论