文档库 最新最全的文档下载
当前位置:文档库 › 基本pso优化神经网络程序

基本pso优化神经网络程序

基本pso优化神经网络程序
基本pso优化神经网络程序

clc

clear all

%一、初始化部分

%1.1 预处理样本数据

% 选取训练样本(x,y)

for i=1:126

x=0+0.0251*(i-1);

y(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; % 待逼近函数

end

AllSamIn=0:0.0251:pi; %训练样本输入

AllSamOut=y; %训练样本输出

%选取测试样本

for i=1:125

x=0.0125+0.0251*(i-1); %测试样本输入

ytest(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; %测试样本输出

end

AlltestIn=0.0125:0.0251:(pi-0.0125);

AlltestOut=ytest;

%归一化训练样本,测试样本

[AlltestInn,minAlltestIn,maxAlltestIn,AlltestOutn,minAlltestOut,maxAlltestOut]= premnmx(AlltestIn,AlltestOut); %测试样本

[AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut]= premnmx(AllSamIn,AllSamOut); %训练样本

testIn=AlltestInn;

testOut=AlltestOutn;

global Ptrain;

Ptrain = AllSamInn;

global Ttrain;

Ttrain = AllSamOutn;

%1.2 设置神经网络参数

global indim; %输入层神经元个数

indim=1;

global hiddennum; %隐藏层神经元个数

hiddennum=3;

global outdim; %输出层神经元个数

outdim=1;

global Gpos;

%1.3 设置微粒群参数

vmax=0.5; % 速度上限

minerr=1e-7; % 目标误差

wmax=0.95;

global itmax; % 最大迭代次数

itmax=200;

c1=1.5;

c2=1.5;

%权值随迭代次数线性递减以保证收敛

for iter=1:itmax

W(iter)=wmax-((wmax-wmin)/itmax)*iter;

end

a=-1;

b=1;

m=-1;

n=1;

global N; % 微粒个数

N=30;

global D; % 每个微粒的维数

D=(indim+1)*hiddennum+(hiddennum+1)*outdim; %所有权值和阈值

% 初始化微粒位置

rand('state',sum(100*clock)); %产生和时间相关的随机数

global X;

X=a+(b-a)*rand(N,D,1); %X的值在a 和b之间

%初始化微粒速度

V=m+(n-m)*rand(N,D,1); %V的值在m和n之间

%二、微粒群更新迭代部分

%global net;

net=newff(minmax(Ptrain),[hiddennum,outdim],{'tansig','purelin'});

global gbest; %全局最优位置

global pbest; %局部最优位置

%2.1第一次迭代

fitness=fitcal(X,indim,hiddennum,outdim,D,Ptrain,Ttrain); %计算适应值

[C,I]=min(fitness(:,1,1)); %第一代,返回微粒群中最小适应值给C,该微粒的序号给I L(:,1,1)=fitness(:,1,1); %第一代,每个微粒的适应值

B(1,1,1)=C; %第一代,全局最优适应值(B存储当前代最优适应值)bestminimum(1)=C; % bestminimum存储所有代中的全局最小适应值

gbest(1,:,1)=X(I,:,1); %第一代,全局最优的微粒位置

for p=1:N

G(p,:,1)=gbest(1,:,1); %G便于速度更新运算(函数格式统一)

end

Gpos=gbest(1,:,1);

pbest(i,:,1)=X(i,:,1); %因为是第一代,当前位置即为历史最优位置

end

V(:,:,2)=W(1)*V(:,:,1)+c1*rand*(pbest(:,:,1)-X(:,:,1))+c2*rand*(G(:,:,1)-X(:,:,1)); % 更新速度% 判断速度是否越界

for ni=1:N

for di=1:D

if V(ni,di,2)>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

end

end

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<=minerr

Gpos=gbest(1,:,GI); %若满足均方误差条件,记录最优位置,停止迭代

break

end

if j>=itmax

break %超过最大迭代次数时,退出

end

%计算历史全局最优位置

if B(1,1,j)

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)<=C

pbest(i,:,j)=X(i,:,j);

else

pbest(i,:,j)=X(i,:,I);

end

end

V(:,:,j+1)=W(j)*V(:,:,j)+c1*rand*(pbest(:,:,j)-X(:,:,j))+c2*rand*(G(:,:,j)-X(:,:,j));

for ni=1:N

for di=1:D

if V(ni,di,j+1)>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); %输出层的输出值

end

subplot(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个样本的误差数组

end

plot(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

BP神经网络测试例子(附数据)

Train.txt 5.0,3.0,1.6,0.2,1 5.0,3.4,1.6,0.4,1 5.2,3.5,1.5,0.2,1 5.2,3.4,1.4,0.2,1 4.7,3.2,1.6,0.2,1 4.8,3.1,1.6,0.2,1 5.4,3.4,1.5,0.4,1 5.2,4.1,1.5,0.1,1 5.5,4.2,1.4,0.2,1 4.9,3.1,1.5,0.1,1 5.0,3.2,1.2,0.2,1 5.5,3.5,1.3,0.2,1 4.9,3.1,1.5,0.1,1 4.4,3.0,1.3,0.2,1 5.1,3.4,1.5,0.2,1 5.0,3.5,1.3,0.3,1 4.5,2.3,1.3,0.3,1 4.4,3.2,1.3,0.2,1 5.0,3.5,1.6,0.6,1 5.1,3.8,1.9,0.4,1 4.8,3.0,1.4,0.3,1 5.1,3.8,1.6,0.2,1 4.6,3.2,1.4,0.2,1 5.3,3.7,1.5,0.2,1 5.0,3.3,1.4,0.2,1 6.6,3.0,4.4,1.4,2 6.8,2.8,4.8,1.4,2 6.7,3.0,5.0,1.7,2 6.0,2.9,4.5,1.5,2 5.7,2.6,3.5,1.0,2 5.5,2.4,3.8,1.1,2 5.5,2.4,3.7,1.0,2 5.8,2.7,3.9,1.2,2 6.0,2.7,5.1,1.6,2 5.4,3.0,4.5,1.5,2 6.0,3.4,4.5,1.6,2 6.7,3.1,4.7,1.5,2 6.3,2.3,4.4,1.3,2 5.6,3.0,4.1,1.3,2 5.5,2.5,4.0,1.3,2 5.5,2.6,4.4,1.2,2 6.1,3.0,4.6,1.4,2 5.8,2.6,4.0,1.2,2

PSO参数优化

1.利用PSO参数寻优函数(分类问题):psoSVMcgForClass 2.[bestCVaccuracy,bestc,bestg,pso_option]= 3.psoSVMcgForClass(train_label,train,pso_option) 4.输入: 5.train_label:训练集的标签,格式要求与svmtrain相同。 6.train:训练集,格式要求与svmtrain相同。 7.pso_option:PSO中的一些参数设置,可不输入,有默认值,详细请看代码的帮 助说明。 8.输出: 9.bestCVaccuracy:最终CV意义下的最佳分类准确率。 10.bestc:最佳的参数c。 11.bestg:最佳的参数g。 12.pso_option:记录PSO中的一些参数。 13.========================================================== 14.利用PSO参数寻优函数(回归问题):psoSVMcgForRegress 15.[bestCVmse,bestc,bestg,pso_option]= 16.psoSVMcgForRegress(train_label,train,pso_option) 17.其输入输出与psoSVMcgForClass类似,这里不再赘述。 复制代码 psoSVMcgForClass源代码: 1.function [bestCVaccuarcy,bestc,bestg,pso_option] = psoSVMcgForClass(train_label,train,pso_option) 2.% psoSVMcgForClass 3. 4.%% 5.% by faruto 6.%Email:patrick.lee@https://www.wendangku.net/doc/50349025.html, QQ:516667408 https://www.wendangku.net/doc/50349025.html,/faruto BNU 7.%last modified 2010.01.17 8. 9.%% 若转载请注明: 10.% faruto and liyang , LIBSVM-farutoUltimateVersion 11.% a toolbox with implements for support vector machines based on libsvm, 2009. 12.% 13.% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for 14.% support vector machines, 2001. Software available at 15.% https://www.wendangku.net/doc/50349025.html,.tw/~cjlin/libsvm 16.%% 参数初始化 17.if nargin == 2 18. pso_option = struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ... 19. 'k',0.6,'wV',1,'wP',1,'v',5, ...

(完整word版)用MATLAB编写PSO算法及实例

用MATLAB 编写PSO 算法及实例 1.1 粒子群算法 PSO 从这种模型中得到启示并用于解决优化问题。PSO 中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value) ,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 假设在一个维的目标搜索空间中,有个粒子组成一个群落,其中第个粒子表示为一个维的向量 ,。 第个粒子的“飞行 ”速度也是一个维的向量,记为 ,。 第个粒子迄今为止搜索到的最优位置称为个体极值,记为 ,。 整个粒子群迄今为止搜索到的最优位置为全局极值,记为 在找到这两个最优值时,粒子根据如下的公式(1.1)和( 1.2)来更新自己的速度和位置: (1.1) (1. 2) 其中:和为学习因子,也称加速常数(acceleration constant),和为[0,1]范围内的均匀随机数。式(1.1)右边由三部分组成,第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己D N i D ),,,(21iD i i i x x x X N i ,,2,1 i D ),,21i iD i i v v v V ,( 3,2,1 i i ),,,(21iD i i best p p p p N i ,,2,1 ),,,(21gD g g best p p p g ) (2211id gd id id id id x p r c x p r c v w v id id id v x x 1c 2c 1r 2r

BP神经网络模型应用实例

BP神经网络模型 第1节基本原理简介 近年来全球性的神经网络研究热潮的再度兴起,不仅仅是因为神经科学本身取得了巨大的进展.更主要的原因在于发展新型计算机和人工智能新途径的迫切需要.迄今为止在需要人工智能解决的许多问题中,人脑远比计算机聪明的多,要开创具有智能的新一代计算机,就必须了解人脑,研究人脑神经网络系统信息处理的机制.另一方面,基于神经科学研究成果基础上发展出来的人工神经网络模型,反映了人脑功能的若干基本特性,开拓了神经网络用于计算机的新途径.它对传统的计算机结构和人工智能是一个有力的挑战,引起了各方面专家的极大关注. 目前,已发展了几十种神经网络,例如Hopficld模型,Feldmann等的连接型网络模型,Hinton等的玻尔茨曼机模型,以及Rumelhart等的多层感知机模型和Kohonen的自组织网络模型等等。在这众多神经网络模型中,应用最广泛的是多层感知机神经网络。多层感知机神经网络的研究始于50年代,但一直进展不大。直到1985年,Rumelhart等人提出了误差反向传递学习算法(即BP算),实现了Minsky的多层网络

设想,如图34-1所示。 BP 算法不仅有输入层节点、输出层节点,还可有1个或多个隐含层节点。对于输入信号,要先向前传播到隐含层节点,经作用函数后,再把隐节点的输出信号传播到输出节点,最后给出输出结果。节点的作用的激励函数通常选取S 型函数,如 Q x e x f /11)(-+= 式中Q 为调整激励函数形式的Sigmoid 参数。该算法的学习过程由正向传播和反向传播组成。在正向传播过程中,输入信息从输入层经隐含层逐层处理,并 传向输出层。每一层神经元的状态只影响下一层神经

标准粒子群算法(PSO)及其Matlab程序和常见改进算法

一、粒子群算法概述 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。 PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个”极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 二、算法原理 粒子群算法采用常数学习因子,及惯性权重,粒子根据如下的公式更新自己的速度和位置。 V ki=ωk V i?1i+c1r1(Q bi?Q k?1i)+c2r2(Q bg?Q k?1i)Q ki=Q k?1i+V ki 三、算法步骤 1、随机初始化种群中各微粒的位置和速度; 2、评价个粒子的适应度,将各粒子的位置和适应度储存在各微粒的pbest(Q bi)中,将所有pbest中适应度最优的个体的位置和适应度存储在gbest(Q bg)中。 3、更新粒子的速度和位移。 V ki=ωk V i?1i+c1r1(Q bi?Q k?1i)+c2r2(Q bg?Q k?1i)Q ki=Q k?1i+V ki 4、对每个微粒,与其前一个最优位置比较,如果较好,则将其作为当前的最优位置。 5、比较当前所有的pbest和上一迭代周期的gbest,更新gbest。 6、若满足停止条件(达到要求精度或迭代次数),搜索停止,输出结果,否则,返回2。

实验八:基于神经网络的优化计算实验

实验八:基于神经网络的优化计算实验 一、实验目的 掌握连续Hopfield神经网络的结构和运行机制,理解连续Hopfield神经网络用于优化计算的基本原理,掌握连续Hopfield神经网络用于优化计算的一般步骤。 二、实验原理 连续Hopfield神经网络的能量函数的极小化过程表示了该神经网络从初始状态到稳定状态的一个演化过程。如果将约束优化问题的目标函数与连续Hopfield神经网络的能量函数对应起来,并把约束优化问题的解映射到连续Hopfield神经网络的一个稳定状态,那么当连续Hopfield神经网络的能量函数经演化达到最小值时,此时的连续Hopfield神经网络的稳定状态就对应于约束优化问题的最优解。 三、实验条件 VC++6.0。 四、实验内容

1、参考求解TSP问题的连续Hopfield神经网络源代码,给出15个城市和20个城市的求解结果(包括最短路径和最佳路线),分析连续Hopfield神经网络求解不同规模TSP问题的算法性能。 2、对于同一个TSP问题(例如15个城市的TSP问题),设置不同的网络参数,分析不同参数对算法结果的影响。 3、上交源代码。 五、实验报告 1、画出连续Hopfield神经网络求解TSP问题的流程图。

2、根据实验内容,给出相应结果及分析。 (1)15个城市(测试文件TSP15.TXT)

tsp15.txt 最短路程 371 最佳路线 1914861351534712210111 →→→→→→→→→→→→→→→ (2)20个城市(测试文件TSP20.TXT) tsp20.txt 最短路程349 最佳路线 →→→→→→→→→→→→→→→→→→→→→141618971315111735124289191610201 3、总结连续Hopfield神经网络和遗传算法用于TSP问题求解时的优缺点。

基于神经网络的优化计算实验报告

人工智能实验报告 实验六基于神经网络的优化计算实验 一、实验目的: 掌握连续Hopfield神经网络的结构和运行机制,理解连续Hopfield神经网络用于优化计算的基本原理,掌握连续Hopfield神经网络用于优化计算的一般步骤。 二、实验原理 连续Hopfield神经网络的能量函数的极小化过程表示了该神经网络从初始状态到稳定状态的一个演化过程。如果将约束优化问题的目标函数与连续Hopfield神经网络的能量函数对应起来,并把约束优化问题的解映射到连续Hopfield神经网络的一个稳定状态,那么当连续Hopfield神经网络的能量函数经演化达到最小值时,此时的连续Hopfield神经网络的稳定状态就对应于约束优化问题的最优解。 三、实验条件: VC++6.0。 四、实验内容: 1、参考求解TSP问题的连续Hopfield神经网络源代码,给出15个城市和20个城市的求解结果(包括最短路径和最佳路线),分析连续Hopfield神经网络求解不同规模TSP问题的算法性能。 2、对于同一个TSP问题(例如15个城市的TSP问题),设置不同的网络参数,分析不同参数对算法结果的影响。 3、上交源代码。

五、实验报告要求: 1、画出连续Hopfield神经网络求解TSP问题的流程图。 2、根据实验内容,给出相应结果及分析。 (1)15个城市(测试文件TSP15.TXT)

tsp15.txt 最短路程 371 最佳路线 →→→→→→→→→→→→→→→1914861351534712210111 (2)20个城市(测试文件TSP20.TXT) tsp20.txt 最短路程349 最佳路线 →→→→→→→→→→→→→→→→→→→→→141618971315111735124289191610201 3、总结连续Hopfield神经网络和遗传算法用于TSP问题求解时的优缺点。 遗传算法易出现早熟收敛和收敛性差的缺点。 Hopfield算法对高速计算特别有效,但网络不稳定。 用Hopfield解TSP问题效果并不理想。相对前面的遗传算法解TSP 性能有相当大差距。

粒子群算法解决函数优化问题

粒子群算法解决函数优化问题 1、群智能算法研究背景 粒子群优化算法(Particle Swarm Optimization,PSO)是由Kennedy 和Eberhart 在研究鸟类和鱼类的群体行为基础上于1995 年提出的一种群智能算法,其思想来源于人工生命和演化计算理论,模仿鸟群飞行觅食行为,通过鸟集体协作使群体达到优。 PSO算法作为一种新的群智能算法,可用于解决大量非线性、不可微和多峰值的复杂函数优化问题,并已广泛应用于科学和工程领域,如函数优化、神经网络训练、经济调度、模式识别与分类、结构设计、电磁场和任务调度等工程优化问题等。 PSO算法从提出到进一步发展,仅仅经历了十几年的时间,算法的理论基础还很薄弱,自身也存在着收敛速度慢和早熟的缺陷。如何加快粒子群算法的收敛速度和避免出现早熟收敛,一直是大多数研究者关注的重点。因此,对粒子群算法的分析改进不仅具有理论意义,而且具有一定的实际应用价值。 2、国内外研究现状 对PSO算法中惯性权重的改进:Poli等人在速度更新公式中引入惯性权重来更好的控制收敛和探索,形成了当前的标准PSO算法。 研究人员进行了大量的研究工作,先后提出了线性递减权值( LDIW)策略、模糊惯性权值( FIW) 策略和随机惯性权值( RIW) 策略。其中,FIW 策略需要专家知识建立模糊规则,实现难度较大,RIW 策略被用于求解动态系统,LDIW策略相对简单且收敛速度快, 任子晖,王坚于2009 年,又提出了基于聚焦距离变化率的自适应惯性权重PSO算法。 郑春颖和郑全弟等人,提出了基于试探的变步长自适应粒子群算

法。这些改进的PSO算法既保持了搜索速度快的特点, 又提高了全局搜索的能力。 对PSO算法的行为和收敛性的分析:1999 年采用代数方法对几种典型PSO算法的运行轨迹进行了分析,给出了保证收敛的参数选择范围。在收敛性方面Fransvan den Bergh引用Solis和Wets关于随机性算法的收敛准则,证明了标准PSO算法不能收敛于全局优解,甚至于局部优解;证明了保证收敛的PSO算法能够收敛于局部优解,而不能保证收敛于全局优解。 国内的学者:2006 年,刘洪波和王秀坤等人对粒子群优化算法的收敛性进行分析,指出它在满足收敛性的前提下种群多样性趋于减小,粒子将会因速度降低而失去继续搜索可行解的能力,提出混沌粒子群优化算法。 2008 年,黄翀鹏和熊伟丽等人分析惯性权值因子大小对PSO算法收敛性所带来的影响,对粒子群算法进行了改进。2009 年,高浩和冷文浩等人,分析了速度因子对微粒群算法影响,提出了一种基于Gaussian 变异全局收敛的粒子群算法。并证明了它能以概率 1 收敛到全局优解。 2010 年,为提高粒子群算法的收敛性,提出了基于动力系统的稳定性理论,对惯性权重粒子群模型的收敛性进行了分析,提出了使得在算法模型群模型收敛条件下的惯性权重和加速系数的参数约束关系,使算法在收敛性方面具有显著优越性。在PSO算法中嵌入别的算法的思想和技术。 1997年,李兵和蒋慰孙提出混沌优化方法; 1998年,Angeline在PSO算法中引入遗传算法中的选择算子,该算法虽然加快了算法的收敛速度,但同时也使算法陷入局部优的概率大增,特别是在优化Griewank 基准函数的优值时得到的结果不理想; 2004 年,高鹰和谢胜利将混沌寻优思想引入到粒子群优化算法中,首先对当前群体中的优粒子进行混沌寻优, 再用混沌寻优的结果随机替换群体中的一个粒子,这样提出另一种混沌粒子群优化算法。

BP神经网络matlab实例

神经网络Matlab p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络 net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); %对BP网络进行仿真 anew=postmnmx(anewn,mint,maxt); %还原数据 y=anew'; 1、BP网络构建 (1)生成BP网络 = net newff PR S S SNl TF TF TFNl BTF BLF PF (,[1 2...],{ 1 2...},,,) R?维矩阵。 PR:由R维的输入样本最小最大值构成的2

S S SNl:各层的神经元个数。 [1 2...] TF TF TFNl:各层的神经元传递函数。 { 1 2...} BTF:训练用函数的名称。 (2)网络训练 = [,,,,,] (,,,,,,) net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真 = [,,,,] (,,,,) Y Pf Af E perf sim net P Pi Ai T {'tansig','purelin'},'trainrp' BP网络的训练函数 训练方法训练函数 梯度下降法traingd 有动量的梯度下降法traingdm 自适应lr梯度下降法traingda 自适应lr动量梯度下降法traingdx 弹性梯度下降法trainrp Fletcher-Reeves共轭梯度法traincgf Ploak-Ribiere共轭梯度法traincgp Powell-Beale共轭梯度法traincgb 量化共轭梯度法trainscg 拟牛顿算法trainbfg 一步正割算法trainoss Levenberg-Marquardt trainlm

用MATLAB编写PSO算法及实例

用MATLAB编写PSO算法及实例

用MATLAB 编写PSO 算法及实例 1.1 粒子群算法 PSO 从这种模型中得到启示并用于解决优化问题。PSO 中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value) ,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 假设在一个维的目标搜索空间中,有个粒子组成一个群落,其中第个粒子表示为一个维的向量 ,。 第个粒子的“飞行 ”速度也是一个维的向量,记为 ,。 第个粒子迄今为止搜索到的最优位置称为个体极值,记为 ,。 整个粒子群迄今为止搜索到的最优位置为全局极值,记为 在找到这两个最优值时,粒子根据如下的公式(1.1)和( 1.2)来更新自己的速度 D N i D ),,,(21iD i i i x x x X =N i ,,2,1 =i D ),,21i iD i i v v v V ,(=3,2,1 =i i ),,,(21iD i i best p p p p =N i ,,2,1 =),,,(21gD g g best p p p g =

和位置: (1.1) (1. 2) 其中:和为学习因子,也称加速常数(acceleration constant),和为 [0,1]范围内的均匀随机数。式(1.1)右边由三部分组成,第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己先前速度的趋势;第二部分为“认知(cognition)”部分,反映了粒子对自身历史经验的记忆(memory)或回忆(remembrance),代表粒子有向自身历史最佳位置逼近的趋势;第三部分为“社会(social)”部分,反映了粒子间协同合作与知识共享的群体历史经验。 二、算法设计 2.1 算法流程图 2.2 算法实现 算法的流程如下: ()) (2211id gd id id id id x p r c x p r c v w v -+-+*=id id id v x x +=1c 2c 1r 2 r

利用PSO优化SVM

%% 清空环境 clc clear load wine; train = [wine(1:30,:);wine(60:95,:);wine(131:153,:)]; train_label = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)]; test = [wine(31:59,:);wine(96:130,:);wine(154:178,:)]; test_label = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)]; [train,pstrain] = mapminmax(train'); pstrain.ymin = 0; pstrain.ymax = 1; [train,pstrain] = mapminmax(train,pstrain); [test,pstest] = mapminmax(test'); pstest.ymin = 0; pstest.ymax = 1; [test,pstest] = mapminmax(test,pstest); train = train'; test = test'; %% 参数初始化 %粒子群算法中的两个参数 c1 = 1.6; % c1 belongs to [0,2] c2 = 1.5; % c2 belongs to [0,2] maxgen=300; % 进化次数 sizepop=30; % 种群规模 popcmax=10^(2); popcmin=10^(-1); popgmax=10^(3); popgmin=10^(-2); k = 0.6; % k belongs to [0.1,1.0]; Vcmax = k*popcmax; Vcmin = -Vcmax ; Vgmax = k*popgmax; Vgmin = -Vgmax ;

基于神经网络的优化计算实验

实验六基于神经网络的优化计算实验 一、实验目的 掌握连续Hopfield神经网络的结构和运行机制,理解连续Hopfield神经网络用于优化计算的基本原理,掌握连续Hopfield神经网络用于优化计算的一般步骤。 二、实验原理 连续Hopfield神经网络的能量函数的极小化过程表示了该神经网络从初始状态到稳定状态的一个演化过程。如果将约束优化问题的目标函数与连续Hopfield神经网络的能量函数对应起来,并把约束优化问题的解映射到连续Hopfield神经网络的一个稳定状态,那么当连续Hopfield神经网络的能量函数经演化达到最小值时,此时的连续Hopfield神经网络的稳定状态就对应于约束优化问题的最优解。 实验报告 1、画出连续Hopfield神经网络求解TSP问题的流程图。

2、根据实验内容,给出相应结果及分析。 (1)、参考求解TSP问题的连续Hopfield神经网络源代码(设置参数A=15,B=15,D=0.015, u0=0.02,h=0.5,r= cityNumber*10),给出15个城市和20个城市的求解结果(包括最短路径和最佳路线),分析连续Hopfield神经网络求解不同规模TSP问题的算法性能。 1)int main(int argc,char *argv[]):修改路径计算的代码 2)最后要求输出:

TSP4 (2)、对于同一个TSP问题(例如15个城市的TSP问题),设置不同的网络参数(A=50,B=50,D=0.01,C=50,u0=0.02, h=0.5,r=cityNumber*100; A=0.5, B=0.5, D=0.5, C=0.2,u0=0.02,h=0.5,r=cityNumber*100; A=500,B=500,D=500,C=200,u0=0.02,h=0.5, r=cityNumber*100; A=5, B=5, D=0.01, C=5,u0=0.02,h=0.5, r=cityNumber*100),分析不同参数对算法结果的影响。 1)int main(int argc,char *argv[]):增加全局约束的参数C,网络动态方程也需增加全局约束项。 2)bool is_a_road():在是否是一条可行路径中,需要增加满足全局约束的判断 3)最后要求输出: 情况一 情况二

PSO算法

群体智能方法:是通过模拟自然界生物群体行为来实现人工智能的一种方法。 群体智能这个概念来自对自然界中生物群体的观察,群居性生物通过协作表现出的宏观智能行为特征被称为群体智能。 群体智能具有如下特点: (1) 控制是分布式的,不存在中心控制。因而它更能够适应当前网络环境下的工作状态,并且具有较强的鲁棒性,即不会由于某一个或几个个体出现故障而影响群体对整个问题的求解。 (2) 群体中的每个个体都能够改变环境,这是个体之间间接通信的一种方式,这种方式被称为“激发工作”。由于群体智能可以通过非直接通信的方式进行信息的传输与合作,因而随着个体数目的增加,通信开销的增幅较小,因此,它具有较好的可扩充性。 (3) 群体中每个个体的能力或遵循的行为规则非常简单,因而群体智能的实现比较方便,具有简单性的特点 (4) 群体表现出来的复杂行为是通过简单个体的交互过程突现出来的智能,因此,群体具有自组织性。 PSO基本原理 最初是为了在二维几何空间图形中优化模拟鸟群不可预测的运动。PSO 算法从这种模型中得到启示并用于解决优化问题。PSO算法中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为“粒子”。所有的粒子都有一个由目标函数决定的适应值(fitness value),每个粒子都由一个两维的速度变量决定各自飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。PSO算法初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己。第一个极值就是粒子本身所经历的最优解,这个解被称为个体极值。另一个极值是整个种群目前所经历的最优解,这个极值被称为全局极值。另外也可以只选取整个种群中的一部分作为粒子的邻居,在所有邻居中的极值被称为局部极值。

(完整版)BP神经网络matlab实例(简单而经典)

p=p1';t=t1'; [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化 net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络 net.trainParam.lr=0.01; net.trainParam.epochs=100000; net.trainParam.goal=1e-5; [net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络 pnew=pnew1'; pnewn=tramnmx(pnew,minp,maxp); anewn=sim(net,pnewn); %对BP网络进行仿真 anew=postmnmx(anewn,mint,maxt); %还原数据 y=anew'; 1、BP网络构建 (1)生成BP网络 = net newff PR S S SNl TF TF TFNl BTF BLF PF (,[1 2...],{ 1 2...},,,) PR:由R维的输入样本最小最大值构成的2 R?维矩阵。 S S SNl:各层的神经元个数。 [ 1 2...] { 1 2...} TF TF TFNl:各层的神经元传递函数。 BTF:训练用函数的名称。 (2)网络训练 [,,,,,] (,,,,,,) = net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真 = [,,,,] (,,,,) Y Pf Af E perf sim net P Pi Ai T {'tansig','purelin'},'trainrp'

BP神经网络实例

BP神经网络实例

智能控制 第一章BP神经网络基本原理 一、BP神经网络基本概念 1、人工神经网络 人工神经网络ANN(Artificial Neural Network),是对人类大脑系统的一阶特性的一种描述。简单地讲,它是一个数学模型,可以用电子线路来实现,也可以用计算机程序来模拟,是人工智能研究地一种方法。近年来发展迅速并逐渐成熟的一种人工智能技术,其来源于对神经元细胞的模拟。人工神经网络具有以下三个特点:信息分布表示,运算全局并行与局部操作,信息非线性处理。由于这三个特点,使得由人工神经网络构成的分类器具有强大的数据拟和与泛化能力,因而广泛运用于模式识别与机器学习领域。 神经网络模式识别的过程分为两步:首先是学习过程,通过大量的训练样本,对网络进行训练,根据某种学习规则不断对连接权值进行调节,然后使网络具有某种期望的输出,这种输出就可以将训练样本正确分类到其所属类别中去,此时可以认为网络是学习到了输入数据或样本间的内在规律。接下来是分类过程,应用前面学习过程所训练好的权值,对任意送入网络的样本进行分类。 人工神经网络模型各种各样,目前已有数十种。他们从各个角度对生物神经系统的不同层次进行了描述和模拟。代表模型有感知机、多层映射BP网、RBF 网络、HoPfiled模型、Boit~机等等。虽然人工神经网络有很多模型,但按神经元的连接方式只有两种型态:没有反馈的前向网络和相互结合型网络。前向网络是多层映射网络,每一层中的神经元只接受来自前一层神经元的信号,因此信号的传播是单方向的。BP网络是这类网络中最典型的例子。在相互结合型网络中,任意两个神经元都可能有连接,因此输入信号要在网络中往返传递,从某一初态开始,经过若干变化,渐渐趋于某一稳定状态或进入周期震荡等其它状态,这方面典型的网络有Hopfiled模型等。 1

PSO算法使用简介

PSO算法使用简介 1 PSO工具箱简介 PSOt为PSO的工具箱,该工具箱将PSO算法的核心部分封装起来,提供给用户的为算法的可调参数,用户只需要定义好自己需要优化的函数(计算最小值或者最大值),并设置好函数自变量的取值范围、每步迭代允许的最大变化量(称为最大速度,Max_V)等,即可自行优化。 与遗传算法相比,PSO仅需要调整少数几个参数即可实现函数的优化。该算法对待优化函数没有任何特别的要求(如可微分、时间连续等),因而其通用性极强,对多变量、高度非线性、不连续及不可微的情况更加具有其优势。 该工具箱的使用主要分为几个步骤: 1) 在Matlab中设置工具箱的路径; 2) 定义待优化函数; 3) 调用PSO算法的核心函数:pso_Trelea_vectorized()。 其中第三步最关键,用户需要根据自己的需要设置好参数,可使算法极快收敛。 下面对各个步骤一一介绍。 2 设置工具箱的路径 2.1 在Matlab的命令窗口点击"File-->Set Path....",如下图: 2.2 在弹出的对话框中点击"Add Folder",然后浏览找到工具箱放置的位置,如下图 2.3 若想用到该工具箱所带的测试函数,还需要用如上同样的方法,设置路径指向工具箱下的"testfunctions"文件夹; 2.4 若想用于训练神经网络的训练,设置路径指向工具箱下的"testfunctions"文件夹"nnet" 3 定义待优化函数(参见文件test_func.m) 用户根据自己的需要,定义需要优化的函数。举个例子,若想计算如下二元函数的最小值 z= 0.5*(x-3)^2+0.2*(y-5)^2-0.1 其中自变量x、y的范围均为[-50, 50]。 可按下面的方法定义该待优化函数: %%----------------------------------------------------------------%% function z=test_func(in) nn=size(in); x=in(:,1); y=in(:,2); nx=nn(1); for i=1:nx temp = 0.5*(x(i)-3)^2+0.2*(y(i)-5)^2-0.1; z(i,:) = temp; end %%----------------------------------------------------------------%% 需要特别指出的是:PSO算法的核心函数pso_Trelea_vectorized()自动初始化一组随机

2019神经网络实学习 例子.doc

神经网络实学习例子 1通过神经网络滤波和信号处理,传统的sigmoid函数具有全局逼近能力,而径向基rbf函数则具有更好的局部逼近能力,采用完全正交的rbf径向基函 数作为激励函数,具有更大的优越性,这就是小波神经网络,对细节逼近能力 更强。 BP网络的特点①网络实质上实现了一个从输入到输出的映射功能,而数学 理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解 内部机制复杂的问题。我们无需建立模型,或了解其内部过程,只需输入,获 得输出。只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次 的学习以内收敛到最低误差附近。而且理论上,一个三层的神经网络,能够以 任意精度逼近给定的函数,这是非常诱人的期望;②网络能通过学习带正确答 案的实例集自动提取"合理的"求解规则,即具有自学习能力;③网络具有一定 的推广、概括能力。bp主要应用回归预测(可以进行拟合,数据处理分析,事 物预测,控制等)、分类识别(进行类型划分,模式识别等),在后面的学习中,都将给出实例程序。但无论那种网络,什么方法,解决问题的精确度都无法打 到100%的,但并不影响其使用,因为现实中很多复杂的问题,精确的解释是毫 无意义的,有意义的解析必定会损失精度。BP注意问题1、BP算法的学习速度 很慢,其原因主要有:a由于BP算法本质上为梯度下降法,而它所要优化的目 标函数又非常复杂,因此,必然会出现"锯齿形现象",这使得BP算法低效; 结论4:由上表可以看出,后者的初始权值比较合适些,因此训练的时间 变短, 误差收敛速度明显快些。因此初始权值的选取对于一个网络的训练是很重 要的。 1.4,用最基本的BP算法来训练BP神经网络时,学习率、均方 误差、权值、阈值的设置都对网络的训练均有影响。综合选取合理的值, 将有

基本pso优化神经网络程序

clc clear all %一、初始化部分 %1.1 预处理样本数据 % 选取训练样本(x,y) for i=1:126 x=0+0.0251*(i-1); y(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; % 待逼近函数 end AllSamIn=0:0.0251:pi; %训练样本输入 AllSamOut=y; %训练样本输出 %选取测试样本 for i=1:125 x=0.0125+0.0251*(i-1); %测试样本输入 ytest(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; %测试样本输出 end AlltestIn=0.0125:0.0251:(pi-0.0125); AlltestOut=ytest; %归一化训练样本,测试样本 [AlltestInn,minAlltestIn,maxAlltestIn,AlltestOutn,minAlltestOut,maxAlltestOut]= premnmx(AlltestIn,AlltestOut); %测试样本 [AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut]= premnmx(AllSamIn,AllSamOut); %训练样本 testIn=AlltestInn; testOut=AlltestOutn; global Ptrain; Ptrain = AllSamInn; global Ttrain; Ttrain = AllSamOutn; %1.2 设置神经网络参数 global indim; %输入层神经元个数 indim=1; global hiddennum; %隐藏层神经元个数 hiddennum=3; global outdim; %输出层神经元个数 outdim=1; global Gpos; %1.3 设置微粒群参数 vmax=0.5; % 速度上限 minerr=1e-7; % 目标误差 wmax=0.95;

BP神经网络的设计实例(MATLAB编程)资料

神经网络的设计实例(MATLAB编程) 例1 采用动量梯度下降算法训练BP 网络。 训练样本定义如下: 输入矢量为 p =[-1 -2 3 1 -1 1 5 -3] 目标矢量为t = [-1 -1 1 1] 解:本例的MATLAB 程序如下: close all clear echo on clc % NEWFF——生成一个新的前向神经网络 % TRAIN——对BP 神经网络进行训练 % SIM——对BP 神经网络进行仿真 pause % 敲任意键开始 clc % 定义训练样本 P=[-1, -2, 3, 1; -1, 1, 5, -3]; % P 为输入矢量 T=[-1, -1, 1, 1]; % T 为目标矢量 pause; clc % 创建一个新的前向神经网络 net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm') % 当前输入层权值和阈值 inputWeights=net.IW{1,1} inputbias=net.b{1} % 当前网络层权值和阈值 layerWeights=net.LW{2,1} layerbias=net.b{2} pause clc % 设置训练参数 net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.mc = 0.9; net.trainParam.epochs = 1000; net.trainParam.goal = 1e-3; pause clc % 调用TRAINGDM 算法训练BP 网络 [net,tr]=train(net,P,T);

Matlab PSO优化RBF的程序

Matlab PSO优化RBF的程序。 找了很久,凡是能找到的都找到了。网上就没有对的。自己写的一直有问题。我有个不完整的。大家看看能不能补全: AllSamIn=[]; AllSamOut=[]; %前向通道数据预设 global minAllSamOut; global maxAllSamOut; % 从总样本中抽取10%的样本作为测试样本,其余作为训练样本 [AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut] = premnmx(AllSamIn,AllSamOut); TesSamIn=[]; TestSamOut=[]; TargetOfTestSam=[]; %测试样本目标 TrainSamIn=AllSamInn; TrainSamOut=AllSamOutn; %样本评估: EvaSamIn=[]; %样本评估输入 EvaSamInn=tramnmx(EvaSamIn,minAllSamIn,maxAllSamIn); %归一化处理 global Ptrain; Ptrain= TrainSamIn; global Ttrain; Ttrain=TrainSamOut; Ptest = TestSamIn; Ttest = TestSamOut; spread=1.2; vmax=0.5; %最大速率

minerr=0.001; %适应度阈值 wmax=0.90; %惯性权重的最大值 wmin=0.30; %惯性权重的最小值 global itmax; itmax=300; %允许的最大迭代步数 c1=2; %学习因子 c2=2; %学习因子 for iter= 1:itmax W(iter)=wmax-((wmax-wmin)/itmax)*iter; %惯性权重下降 end %粒子在a,b之间随机初始化: a=-1; b=1; m=-1; n=1; global N; %粒子种群数目 N=40; global D; %粒子群长度 D=(indim+1)*hiddennum+(hiddennum+1)*outdim; %粒子群位置初始化: rand('state',sum(100*clock)); %产生0-1之间的随机数,粒子在a,b(-1,1)之间初始化 X=a+(b-a)*rand(N,D,1); %产生N行D列由0-1之间的矩阵 V=m+(n-m)*rand(N,D,1); %粒子群速度在m,n即-1和1之间初始化 %粒子群优化RBF神经网络的适应度值 global fvrec;

相关文档
相关文档 最新文档