所用数据同“2 - 较复杂的BP神经网络实现”
GAMain.m

clc
clear
close all
%% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出T
%样本数据就是前面问题描述中列出的数据
load dataa
% warning('off')
% 初始隐层神经元个数
%hiddennum=31;
hiddennum=13;
inputnum=size(P1,1);       % 输入层神经元个数
outputnum=size(T1,1);      % 输出层神经元个数
w1num=inputnum*hiddennum; % 输入层到隐层的权值个数=输入层*隐含层节点个数
w2num=outputnum*hiddennum;% 隐层到输出层的权值个数=输出层*隐含层节点个数
N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数=权值+阈值(隐含层+输出层节点个数)%% 定义遗传算法参数
NIND=40;        %个体数目,种群大小  #可修改该值来调整优化效果
MAXGEN=100;      %最大遗传代数  #可修改该值来调整优化效果
PRECI=10;       %变量的二进制位数,个体长度                                  ??如何确定,对优化结果有何影响
GGAP=0.95;      %代沟,95%的父代复制给了子代。GGAP缺省或NaN表示=1,GGAP也可大于1。传统遗传算子包括:选择,交叉,变异;新的遗传算子,如代沟,人工选择等等
px=0.7;         %交叉概率
pm=0.01;        %变异概率
trace=zeros(N+1,MAXGEN);                        %寻优结果的初始值,初始权值和阈值FieldD=[repmat(PRECI,1,N);repmat([-0.5;0.5],1,N);repmat([1;0;1;1],1,N)];  %区域描述器 ??Chrom=crtbp(NIND,PRECI*N);    %初始种群,创建任意离散随机种群矩阵,NIND行PRECI*N列,个体数目*个体长度
%% 优化
gen=0;                                 %代计数器
X=bs2rv(Chrom,FieldD);                 %计算初始种群的十进制转换
ObjV=Objfun(X,P1,T1,hiddennum,P1_test,T1_test);  %计算目标函数值,计算适应度值,  ??
while gen<MAXGENfprintf('%d\n',gen)FitnV=ranking(ObjV); %分配适应度值。按照个体的目标值ObjV(列向量)由小到大的顺序对个体进行排序,并返回个体适应度值FitnV的列向量SelCh=select('sus',Chrom,FitnV,GGAP); %选择。SelCh=select(SEL_F,Chrom,FitnV,GGAP):%SEL_F是一个字符串,包含一个低级选择函数名,如rws或sus。%FitnV是列向量,包含种群Chrom中个体的适应度值,该值表明每个个体被选择的预期概率。%GGAP是一个可选参数,指出代沟部分种群被复制。若GGAP省略或为NaN,则GGAP=1。%SUBPOP是一个可选参数,决定种群Chrom中子种群的数量。若SUBPOP省略或为NaN,则SUBPOP=1,种群Chrom中子种群必须有相同大小。SelCh=recombin('xovsp',SelCh,px); %交叉。NewChrom=recombin(REC_F,Chrom,RecOpt)。此处为矩阵第一行后四位与第二行后四位交叉%REC_F是一个包含低级重组函数名的字符串,如recdis或xovsp%RecOpt是一个指明交叉概率的任选参数,若省略或为NaN,将设为缺省值SelCh=mut(SelCh,pm); %变异。NewChrom=mut(OldChrom,Pm,BaseV)。%OldChrom是当前种群%Pm为变异概率,省略时为0.7/Lind%BaseV指明染色体个体元素的变异的基本字符,省略时为二进制编码X=bs2rv(SelCh,FieldD);  %子代个体的十进制转换,将二进制转换到十进制。Phen=bs2rv(SelCh,FieldD)%bs2rv根据译码矩阵FieldD将二进制串矩阵Chrom转换为实值向量,返回十进制矩阵ObjVSel=Objfun(X,P1,T1,hiddennum,P1_test,T1_test);  %计算子代的目标函数值,计算子代适应度值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群X=bs2rv(Chrom,FieldD);  %新种群二进制转换到十进制gen=gen+1;              %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=min(ObjV);trace(1:N,gen)=X(I,:);    %记下每代的最优值trace(end,gen)=Y;         %记下每代的最优值
end
%% 画进化图
figure(1);
plot(1:MAXGEN,trace(end,:));
grid on
xlabel('遗传代数')
ylabel('误差的变化')
title('进化过程')
bestX=trace(1:end-1,end);
bestErr=trace(end,end);
[~,bestT_sim]=BpFunction(bestX,P1,T1,hiddennum,P1_test,T1_test);
fprintf(['最优初始权值和阈值:\nX=',num2str(bestX'),'\n最小误差err=',num2str(bestErr),'\n'])

Objfun.m

function Obj=Objfun(X,P1,T1,hiddennum,P1_test,T1_test)
%% 用来分别求解种群中各个个体的目标值
%% 输入
% X:所有个体的初始权值和阈值
% P:训练样本输入
% T:训练样本输出
% hiddennum:隐含层神经元数
% P_test:测试样本输入
% T_test:测试样本期望输出
%% 输出
% Obj:所有个体的预测样本的预测误差的范数[M,N]=size(X);
Obj=zeros(M,1);
for i=1:M
%     Obj(i)=Bpfun(X(i,:),P,T,hiddennum,P_test,T_test);Obj(i)=BpFunction(X(i,:),P1,T1,hiddennum,P1_test,T1_test);
end

BpFunction.m

%% 输入
% x:一个个体的初始权值和阈值
% P:训练样本输入
% T:训练样本输出
% hiddennum:隐含层神经元数
% P_test:测试样本输入
% T_test:测试样本期望输出
%% 输出
% err:预测样本的预测误差的范数
function [err,T_sim]=BpFunction(x,P1,T1,hiddennum,P1_test,T1_test)
inputnum=size(P1,1);                             % 输入层神经元个数
% hiddennum=2*inputnum+1;                           % 隐含层神经元个数
outputnum=size(T1,1);                                % 输出层神经元个数
%% 数据归一化
[p_train,ps_train]=mapminmax(P1,0,1);
p_test=mapminmax('apply',P1_test,ps_train);
[t_train,ps_output]=mapminmax(T1,0,1);
%% 开始构建BP网络
net=newff(p_train,t_train,hiddennum);               %隐含层为hiddennum个神经元
%设定参数网络参数
net.trainParam.epochs=1000;
net.trainParam.goal=1e-3;
net.trainParam.lr=0.01;
net.trainParam.showwindow=false;                    %高版MATLAB使用 不显示图形框
%% BP神经网络初始权值和阈值
w1num=inputnum*hiddennum;                                           %输入层到隐层的权值个数
w2num=outputnum*hiddennum;                                          %隐含层到输出层的权值个数
% x=2*rand(1,w1num+hiddennum+w2num+outputnum)-1;                      %随即生成权值
W1=x(1:w1num);                                                      %初始输入层到隐含层的权值
B1=x(w1num+1:w1num+hiddennum);                                      %隐层神经元阈值
W2=x(w1num+hiddennum+1:w1num+hiddennum+w2num);                      %隐含层到输出层的权值
B2=x(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum);      %输出层阈值
net.iw{1,1}=reshape(W1,hiddennum,inputnum);                         %为神经网络的输入层到隐含层权值赋值
net.lw{2,1}=reshape(W2,outputnum,hiddennum);                        %为神经网络的隐含层到输出层权值赋值
net.b{1}=reshape(B1,hiddennum,1);                                   %为神经网络的隐层神经元阈值赋值
net.b{2}=reshape(B2,outputnum,1);                                   %为神经网络的输出层阈值赋值
%% 开始训练
net = train(net,p_train,t_train);
%% 测试网络
t_sim = sim(net,p_test);
T_sim = mapminmax('reverse',t_sim,ps_output);   %反归一化
err=norm(T_sim-T1_test);                         %预测结果与测试结果差的范数,范数越小说明预测得越准确,如果范数为0,说明预测得完全准确

优化结果:

使用遗传算法优化Bp神经网络权值和阈值的流程图如下:

基于遗传算法优化的BP神经网络算法相关推荐

  1. 基于遗传算法优化的BP神经网络的 非线性函数拟合

    遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法.因此在介绍遗传算法前有必要简单的介绍生 ...

  2. 基于遗传算法优化的BP神经网络

    文章目录 BP神经网络和遗传算法 算法用途 实例分析 BP神经网络 GA-BP神经网络 遗传算法的步骤: GA-BP神经网络MATLAB源码 实现形式(一) 实现形式(二) 实现形式(三) BP神经网 ...

  3. (Matlab)遗传算法优化的BP神经网络实现回归预测

    目录 摘要: 1.BP神经网络介绍: 2.遗传算法原理介绍: 3.遗传算法优化的BP神经网络: 4.算例分析: 5.Matlab代码实现 摘要: 基于Matalb平台,将遗传算法(GA)与BP神经网络 ...

  4. 基于遗传算法优化的Elman神经网络数据预测-附代码

    基于遗传算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于遗传算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

  5. 基于遗传算法改进的BP神经网络电网负荷预测,GA-BP神经网络电网负荷预测,1000案例之14

    摘要 节能减排,降低谈排放,降低电网传输的损耗 电力负荷预测是以电力负荷为对象进行的一系列预测工作.从预测对象来看,电力负荷预测包括对未来电力需求量(功率)的预测和对未来用电量(能量)的预测以及对负荷 ...

  6. 基于果蝇优化的BP神经网络(分类应用) - 附代码

    基于果蝇优化的BP神经网络(分类应用) - 附代码 文章目录 基于果蝇优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.果蝇优化BP神经网络 3.1 BP神经 ...

  7. 基于布谷鸟优化的BP神经网络(分类应用) - 附代码

    基于布谷鸟优化的BP神经网络(分类应用) - 附代码 文章目录 基于布谷鸟优化的BP神经网络(分类应用) - 附代码 1.鸢尾花iris数据介绍 2.数据集整理 3.布谷鸟优化BP神经网络 3.1 B ...

  8. 基于果蝇优化的BP神经网络(预测应用) - 附代码

    基于果蝇优化的BP神经网络(预测应用) 文章目录 基于果蝇优化的BP神经网络(预测应用) 1.数据介绍 3.FOA优化BP神经网络 3.1 BP神经网络参数设置 3.2 果蝇算法应用 4.测试结果: ...

  9. 基于布谷鸟优化的BP神经网络(预测应用) - 附代码

    基于布谷鸟优化的BP神经网络(预测应用) - 附代码 文章目录 基于布谷鸟优化的BP神经网络(预测应用) - 附代码 1.数据介绍 3.CS优化BP神经网络 3.1 BP神经网络参数设置 3.2 布谷 ...

最新文章

  1. [WCF编程]10.操作:回调操作
  2. python自学书籍推荐豆瓣-想学python,请问有没好的书籍推荐?
  3. linux中特殊字符的含义,Linux中的特殊符号以及特殊语法
  4. 蓝桥杯 试题 基础练习 特殊回文数——16行代码AC
  5. attr和prop的区别
  6. vue-cli起服务chrome不能打断点——每周汇总(第一周)
  7. 三星Galaxy A73显示Geekcbench:或搭载骁龙778G
  8. web前端学习笔记(二)---Django
  9. Node有什么特点?
  10. jquery post java对象_jquery $.post()返回数据
  11. 【渝粤教育】国家开放大学2018年春季 0179-21T数据库基础与应用 参考试题
  12. Linux下实现Rsync目录同步备份
  13. centos安装部署webssh
  14. 期货发展的几个重要时间点和事件
  15. android qq skype,蓝牙耳机与IVT组合实现在电脑聊天、打电话(QQ、Skype)
  16. BLE(12)—— 细说 Connection
  17. P2184 贪婪大陆(线段树)
  18. java中cbrt_Java Math类静态double cbrt(double d)示例
  19. 入耳式蓝牙耳机哪种音质好?微型蓝牙隐形耳机推荐
  20. 10个超赞的jQuery图片滑块动画

热门文章

  1. 二维火收银系统服务器超时,二维火收银系统,改变的不止是你的收银模式!
  2. (好文分享)RIM就是我
  3. 程序员必备软件清单,没时间解释了,快上车
  4. 商品详细信息的代码html_实操分享:如何将商品优惠券,添加到淘宝详情页?...
  5. 从0到一开发微信小程序(1)——申请账号并安装开发环境
  6. hdoj-1593-find a way to escape【数学题】
  7. 武警二路擒敌拳16式
  8. 免费的!大数据挖掘师资培训班火热报名中!
  9. 获取手机通讯录加好友
  10. 10个迷惑新手的Cocoa,Objective-c开发难点和问题 39|MX21k