粒子群算法在神经网络非线性函数拟合中的应用.doc

上传人:xin****828 文档编号:6703681 上传时间:2020-03-02 格式:DOC 页数:17 大小:281.50KB
返回 下载 相关 举报
粒子群算法在神经网络非线性函数拟合中的应用.doc_第1页
第1页 / 共17页
粒子群算法在神经网络非线性函数拟合中的应用.doc_第2页
第2页 / 共17页
粒子群算法在神经网络非线性函数拟合中的应用.doc_第3页
第3页 / 共17页
点击查看更多>>
资源描述
粒子群算法在神经网络非线性函数拟合中的应用一、本文研究和解决的问题在自动控制问题中,系统辨识的目的是为了建立被控对象的数学模型。多年来,控制领域对于复杂的非线性对象的辨识 一直未能很好的解决,神经网络所具有的非线性特性和学习能力 使其在系统辨识方面有很大的潜力。为解决具有复杂的非线性、不确定性和不确知对象的辨识问题开辟了一条有效的途径。基于神经网络的系统辨识是以神经网络作为被辨识对象的模型,利用其非线性特性,可建立非线性系统的静态或动态模型。理论上,多层前馈神经网络能够以任意精度逼近任意非线性映射。 但传统神经网络学习算法中存在的收敛速度慢、容易陷入局部最优等缺点,于是设计了基于标准粒子群算法 的神经网络非线性函数拟合系统。 二、传统的BP神经网络BP 神经网络即采用误差反向传播算法的网络,是一种至今仍然最为流行的前馈型神经网络模型。BP 神经网络有很强的非线性映射能力,它能学习和存贮大量输入-输出模式映射关系,而无需事先了解描述这种映射关系的数学方程。只要能提供足够多的样本模式对供给网络进行学习训练,它便能完成由 n 维输入空间到 m 维输出空间的非线性映射。BP 学习算法属于误差修正型学习,其关键在于根据误差修正输出层和隐含层的连接权值。其学习的基本实现方法是基于最小平方误差准则和梯度下降优化方法来确定权值调整法则。BP网络建模特点: 非线性映照能力:神经网络能以任意精度逼近任何非线性连续函数。在建模过程中的许多问题正是具有高度的非线性。并行分布处理方式:在神经网络中信息是分布储存和并行处理的,这使它具有很强的容错性和很快的处理速度。自学习和自适应能力:神经网络在训练时,能从输入、输出的数据中提取出规律性的知识,记忆于网络的权值中,并具有泛化能力,即将这组权值应用于一般情形的能力。神经网络的学习也可以在线进行。数据融合的能力:神经网络可以同时处理定量信息和定性信息,因此它可以利用传统的工程技术(数值运算)和人工智能技术(符号处理)。多变量系统:神经网络的输入和输出变量的数目是任意的,对单变量系统与多变量系统提供了一种通用的描述方式,不必考虑各子系统间的解耦问题。三、解决问题的思想与方法针对传统神经网络学习算法中存在的收敛速度慢、容易陷入局部最优等缺点,设计了基于标准粒子群算法的神经网络非线性函数拟合系统,将神经网络中的权值看作一个粒子,通过粒子之间的竞争与合作以完成网络的学习过程,仿真结果表明,基于BP的神经网络学习算法在收敛速度、辨识精度等方面要优于传统的BP神经网络。粒子群优化算法(PSO,Particle Swarm Optimization)是计算智能领域,除了蚁群算法、鱼群算法之外的一种群体智能的优化算法。PSO 算法源于对鸟类捕食行为的研究,鸟类捕食时,每只鸟找到食物最简单有效的方法就是搜寻当前距离食物最近的鸟的周围区域。PSO 算法首先在可解空间中初始化一群粒子,每个粒子都代表问题的一个潜在解,用位置、速度和适应度值三项指标表示该粒子特征。适应度值由适应度函数计算得到,其值的好坏表示粒子的优劣。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。粒子在解空间中运动,通过跟踪个体最优值 Pbest 和群体最优值Gbest 更新个体位置,个体最优值 Pbest 是指个体所经历位置中计算得到的适应度值最好的位置,群体最优值 Gbest 是指粒子群中所有粒子搜索到的适应度最好的位置。粒子每更新一次位置,就计算一次适应度值,并且通过比较新粒子的适应度值和个体最优值、群体最优值的适应度值更新 Pbest 和 Gbest 的位置。粒子位置和速度的调整是粒子群算法的关键。假设在一个 D 维的搜索空间中,由 n 个粒子组成的种群 X ( X1, X 2 , X n ) ,其中第 i 个例子表示为一个 D 维的向量 X i (xi1, xi 2 , xiD )T ,代表第 i 个粒子在 D维搜索空间中的位置,亦代表问题的一个潜在解。根据目标函数即可计算出每个粒子位置 Xi 对应的适应度值。第 i 个粒子的速度为Vi (vi1, vi 2 , viD )T ,其个体极值为 P ( pi1, pi 2 , piD )T ,种群的全局极值为 P ( pg1, pg 2 , , pgD )T 。四、实验仿真结果五、程序基本网络函数逼近程序function epoch,s,Wki,Wij,Wb,Ez=dyb(lr,Emin,q)%初始化;%lr 学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;sum=0;Ez=;max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.2).*exp(-x.2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);for epoch=1:max_epoch E=0;m=1;oi=0;ok=0;%置隐含层和输出层各神经元输出初值为零;for m=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;for t=1:qoi(t)=1/(1+exp(-NETi(t);end%计算输出层各神经元输出;NETk=Wki*oi; ok=NETk;%计算误差;E=E+(y(m)-ok)2;%调整输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;%调整隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;endEz(epoch)=sqrt(E/100);if Ez(epoch)vmax V(ni,di,2)=vmax; else if V(ni,di,2)-vmax V(ni,di,2)=-vmax; else V(ni,di,2)=V(ni,di,2); end endend X(:,:,2)=X(:,:,1)+V(:,:,2); %更新位置%disp(执行到这里)%2.2 第2次到最后一次迭代for j=2:itmax h=j; disp(迭代次数,当前代全局最佳适应值,本代以前所有代中的全局最佳适应值) disp(j-1) disp(B(1,1,j-1) %j-1代全局最优适应值 disp(bestminimum(j-1) %j-1代以前所有代中的全局最优适应值 disp(*) fitness=fitcal(X,indim,hiddennum,outdim,D,Ptrain,Ttrain); C,I=min(fitness(:,1,j); %第j代的最优适应值和最优微粒序号 L(:,1,j)=fitness(:,1,j); %第j代每个微粒的适应值 B(1,1,j)=C; %第j代全局最优适应值 gbest(1,:,j)=X(I,:,j); %第j代全局最优微粒的位置 GC,GI=min(B(1,1,:); %所有代的全局最优适应值赋给GC,代数赋给GI bestminimum(j)=GC; %所有代的最优适应值赋给j代的bestminimum % 判断是否符合条件 if GC=itmax break %超过最大迭代次数时,退出end %计算历史全局最优位置 if B(1,1,j)GC gbest(1,:,j)=gbest(1,:,j); else gbest(1,:,j)=gbest(1,:,GI); end for p=1:N G(p,:,j)=gbest(1,:,j); end %计算各微粒历史最优位置 for i=1:N; C,I=min(L(i,1,:); %计算每个微粒的历史最优适应值,赋给C,代数赋给I if L(i,1,j)vmax V(ni,di,j+1)=vmax; else if V(ni,di,j+1)-vmax V(ni,di,j+1)=-vmax; else V(ni,di,j+1)=V(ni,di,j+1); end end end X(:,:,j+1)=X(:,:,j)+V(:,:,j+1); %2.3 将最优微粒(即最优权值和阈值)赋给神经网络 if j=itmax Gpos=gbest(1,:,GI); end disp(要显示Gpos的值) disp(Gpos) wi=Gpos(1:hiddennum); %输入层-隐藏层权值 wl=Gpos(hiddennum+1:2*hiddennum); %隐藏层-输出层权值 b1=Gpos(2*hiddennum+1:3*hiddennum); %输入层-隐藏层阈值 b2=Gpos(3*hiddennum+1:3*hiddennum+outdim); %隐藏层-输出层阈值end %三、神经网络训练部分%*w,v=size(testIn); %w 返回行数,v返回列数for k=1:v % v是测试样本的个数 for t=1:hiddennum %计算隐藏层每个神经元的输入,输出 hidinput=0; hidinput=wi(t)*testIn(k)-b1(t); hidoutput(t)=tansig(hidinput); end outinput=0; %used to calculate the value of output in outlayer for t=1:hiddennum outinput=outinput+wl(t)*hidoutput(t); %输出层只有一个神经元时的情况 end outVal(k)=purelin(outinput-b2); %输出层的输出值endsubplot(2,1,1) %/调用窗口句柄AlltestIn,AlltestOut=postmnmx(testIn,minAlltestIn,maxAlltestIn,testOut,minAlltestOut,maxAlltestOut); %反归一化ResVal=postmnmx(outVal,minAlltestOut,maxAlltestOut);trainError=abs(ResVal-AlltestOut); %测试误差for k=1:v SquareE(k)=(trainError(k)*trainError(k)/2; %v个样本的误差数组endplot(AlltestIn,SquareE)ylabel(Error)subplot(2,1,2)j=1:1:h;plot(j,bestminimum(j)set(gca,XLim,1 100000);set(gca,XMinorTick,on);set(gca,XTick,1 10 100 1000 10000 100000);set(gca,YLim,0.000001 1);set(gca,YMinorTick,on);set(gca,YTick,0.000001 0.00001 0.0001 0.001 0.01 0.1 1);set(gca,yscale,log,xscale,log)ylabel(training error)xlabel(Iteration Number)hold on%适应度函数部分function fitval = fitcal(X,indim,hiddennum,outdim,D,Ptrain,Ttrain) %三维矩阵:x 微粒数(X的行数);y 微粒维数(X的列数);z 代数(X的层数)x,y,z=size(X); w,v=size(Ptrain); %二维矩阵:w 训练样本维数,这里为1;v 训练样本个数for i=1:x %x代表粒子数量,z代表代数 wi=X(i,1:hiddennum,z); wl=X(i,1*hiddennum+1:2*hiddennum,z); b1=X(i,2*hiddennum+1:3*hiddennum,z); b2=X(i,3*hiddennum+1:3*hiddennum+outdim,z); error=0; for k=1:v %训练样本总数 for t=1:hiddennum hidinput=0; hidinput=wi(t)*Ptrain(k)-b1(t); hidoutput(t)=tansig(hidinput); end outinput=0; for t=1:hiddennum outinput=outinput+wl(t)*hidoutput(t); end outval(k)=purelin(outinput-b2); errval(k)=Ttrain(k)-outval(k); %绝对误差 error=error+errval(k)*errval(k); %v个样本的误差平方求和 end fitval(i,1,z)=error/v; %均方和,返回值是第i个微粒第z代的误差end
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!