(PSO-BP)结合粒子群的神经网络算法以及matlab实现
原理:
PSO(粒子群群算法):可以在全局范围内进行大致搜索,得到一个初始解,以便BP接力
BP(神经网络):梯度搜素,细化能力强,可以进行更仔细的搜索。
数据:对该函数((2.1*(1-x+2*x.^2).*exp(-x.^2/2))+sin(x)+x','x')[-5,5]进行采样,得到30组训练数据,拟合该网络。
神经网络结构设置: 该网络结构为,1-7-1结构,即输入1个神经元,中间神经元7个,输出1个神经元
程序步骤:
第一步:先采用抽取30组数据,包括输入和输出
第一步:运行粒子群算法,进行随机搜索,选择一个最优的解,该解的维数为22维。
第二步:在;粒子群的解基础上进行细化搜索
程序代码:
clc
clear
tic
SamNum=30; HiddenNum=7;
InDim=1;
OutDim=1; load train_x
load train_f a=train_x';
d=train_f'; p=[a];
t=[d];
[SamIn,minp,maxp,tn,mint,maxt]=premnmx(p,t); NoiseVar=0.01;
Noise=NoiseVar*randn(1,SamNum);
SamOut=tn + Noise; SamIn=SamIn';
SamOut=SamOut'; MaxEpochs=60000;
lr=0.025;
E0=0.65*10^(-6); %%
%the begin of PSO E0=0.001;
Max_num=500;
particlesize=200;
c1=1;
c2=1;
w=2;
vc=2;
vmax=5;
dims=InDim*HiddenNum+HiddenNum+HiddenNum*OutDim+OutDim;
x=-4+7*rand(particlesize,dims);
v=-4+5*rand(particlesize,dims);
f=zeros(particlesize,1);
%%
for jjj=1:particlesize
trans_x=x(jjj,:);
W1=zeros(InDim,HiddenNum);
B1=zeros(HiddenNum,1);
W2=zeros(HiddenNum,OutDim);
B2=zeros(OutDim,1); W1=trans_x(1,1:HiddenNum);
B1=trans_x(1,HiddenNum+1:2*HiddenNum)';
W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)';
B2=trans_x(1,3*HiddenNum+1);
Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1);
Error=Networkout-SamOut;
SSE=sumsqr(Error) f(jjj)=SSE;
end
personalbest_x=x;
personalbest_f=f;
[groupbest_f i]=min(personalbest_f);
groupbest_x=x(i,:);
for j_Num=1:Max_num
vc=(5/3*Max_num-j_Num)/Max_num;
%%
v=w*v+c1*rand*(personalbest_x-x)+c2*rand*(repmat(groupbest_x,particlesize,1)-x);
for kk=1:particlesize
for kk0=1:dims
if v(kk,kk0)>vmax
v(kk,kk0)=vmax;
else if v(kk,kk0)<-vmax
v(kk,kk0)=-vmax;
end
end
end
end
x=x+vc*v;
%%
for jjj=1:particlesize
trans_x=x(jjj,:);
W1=zeros(InDim,HiddenNum);
B1=zeros(HiddenNum,1);
W2=zeros(HiddenNum,OutDim);
B2=zeros(OutDim,1); W1=trans_x(1,1:HiddenNum);
B1=trans_x(1,HiddenNum+1:2*HiddenNum)';
W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)';
B2=trans_x(1,3*HiddenNum+1);
Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1);
Error=Networkout-SamOut;
SSE=sumsqr(Error); f(jjj)=SSE; end
%%
for kk=1:particlesize
if f(kk)<personalbest_f(kk)
personalbest_f(kk)=f(kk);
personalbest_x(kk)=x(kk);
end
end
[groupbest_f0 i]=min(personalbest_f); if groupbest_f0<groupbest_f
groupbest_x=x(i,:);
groupbest_f=groupbest_f0;
end
ddd(j_Num)=groupbest_f
end
str=num2str(groupbest_f);
trans_x=groupbest_x;
W1=trans_x(1,1:HiddenNum);
B1=trans_x(1,HiddenNum+1:2*HiddenNum)';
W2=trans_x(1,2*HiddenNum+1:3*HiddenNum)';
B2=trans_x(1,3*HiddenNum+1);
%the end of PSO
%% for i=1:MaxEpochs
%%
Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1);
Error=Networkout-SamOut;
SSE=sumsqr(Error) ErrHistory=[ SSE]; if SSE<E0,break, end
dB2=zeros(OutDim,1);
dW2=zeros(HiddenNum,OutDim);
for jj=1:HiddenNum
for k=1:SamNum
dW2(jj,OutDim)=dW2(jj,OutDim)+Error(k)*Hiddenout(k,jj);
end
end
for k=1:SamNum
dB2(OutDim,1)=dB2(OutDim,1)+Error(k);
end
dW1=zeros(InDim,HiddenNum);
dB1=zeros(HiddenNum,1);
for ii=1:InDim
for jj=1:HiddenNum for k=1:SamNum
dW1(ii,jj)=dW1(ii,jj)+Error(k)*W2(jj,OutDim)*Hiddenout(k,jj)*(1-Hiddenout(k,jj))*(SamIn(k,ii));
dB1(jj,1)=dB1(jj,1)+Error(k)*W2(jj,OutDim)*Hiddenout(k,jj)*(1-Hiddenout(k,jj)); end
end
end W2=W2-lr*dW2;
B2=B2-lr*dB2; W1=W1-lr*dW1;
B1=B1-lr*dB1;
end Hiddenout=logsig(SamIn*W1+repmat(B1',SamNum,1));
Networkout=Hiddenout*W2+repmat(B2',SamNum,1); aa=postmnmx(Networkout,mint,maxt);
x=a;
newk=aa;
figure
plot(x,d,'r-o',x,newk,'b--+')
legend('原始数据','训练后的数据');
xlabel('x');ylabel('y');
toc
注:在(i5,8G,win7,64位)PC上的运行时间为30s左右。鉴于PSO带有概率性,可以多跑几次,看最佳的一次效果。

转载于:https://www.cnblogs.com/jacksin/p/8835907.html
(PSO-BP)结合粒子群的神经网络算法以及matlab实现的更多相关文章
- 群智能优化算法-测试函数matlab源码
群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%% ...
- 粒子群算法(PSO)算法解析(简略版)
粒子群算法(PSO) 1.粒子群算法(PSO)是一种基于群体的随机优化技术: 初始化为一组随机解,通过迭代搜寻最优解. PSO算法流程如图所示(此图是从PPT做好,复制过来的,有些模糊) 2.PSO模 ...
- 粒子群算法优化BP生物能神经网络
定义: 粒子群中每个粒子的位置表示BP神经网络当前迭代中权值的集合,每个粒子的维数由网络中起连接作用的权值的数量和阈值个数决定,以给定训练样本集的神经网络输出误差作为神经网络训练问题的适应度函数,适应 ...
- 粒子群优化算法对BP神经网络优化 Matlab实现
1.粒子群优化算法 粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作 ...
- 算法(三)粒子群算法PSO的介绍
一.引言 在讲算法之前,先看两个例子: 例子一:背包问题,一个书包,一堆物品,每个物品都有自己的价值和体积,装满书包,使得装的物品价值最大. 例子二:投资问题,n个项目,第i个项目投资为ci 收益为p ...
- ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)
ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...
- 计算智能(CI)之粒子群优化算法(PSO)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...
- 【比较】粒子群算法PSO 和 遗传算法GA 的相同点和不同点
目录 PSO和GA的相同点 PSO和GA不同点 粒子群算法(PSO)和遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解. PSO和G ...
- C语言实现粒子群算法(PSO)二
上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*( ...
随机推荐
- 直播 | Apache Kylin & Apache Hudi Meetup
千呼万唤始出来,Meetup 直播终于来啦- 本次线上 Meetup 由 Apache Kylin 与 Apache Hudi 社区联合举办,将于 3 月 14 日晚进行直播,邀请到来自丁香园.腾讯. ...
- 曹工说Redis源码(4)-- 通过redis server源码来理解 listen 函数中的 backlog 参数
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- PowerShell入门简介
文章更新于:2020-03-03 一.PowerShell简介 说实话,我总感觉 PowerShell 是 cmd 的加强版,但是看官方介绍,功能甚是强大,用处有待我们发掘. 二.PowerShell ...
- flask-类视图
flask-类视图 标准类视图 from flask import Flask, render_template, views, jsonify app = Flask(__name__) class ...
- MongoDB查询mgov2的聚合方法
1.多条表数据累计相加. respCount := struct { Rebatescore int64 //变量命名必须要和查询的参数一样.}{} o := bson.M{"$match& ...
- Linux CentOS7 开通端口外网端口访问权限
一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常)firewall-cmd --state二.开启端口外网访问1.添加端口 返回 success 代表成功(--permanent永 ...
- linux中操作k8s的基本命令-更新中
linux中操作k8s的基本命令 最近工作中使用到了k8s,那么就来总结下平时使用到的基本的命令 获取某个namespace下的pod 获取某个namespace下的pod,展示出ip和pod信息 查 ...
- alg-最长回文字符串
class Solution { public: std::string longestPalindrome(const std::string& s) { if (s.empty()) { ...
- 程序员小张的第一篇博文 --记Markdown的使用学习
1.前言 为了即将到来的面试做准备,以及记录一下平日里自己的学习过程和生活日常,我开始进驻博客园啦!这就是我的第一篇博客(有点小激动)~ 作为一只新手,首先记录一下今晚的编写博文的学习过程吧~ 2.使 ...
- stand up meeting 12/2/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 将logic部分提供的delete接口接入,与logic,数据库部分沟通实现了add/delete按钮的复用:解决UI部 ...