1、粒子群优化算法

粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,该算法模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作使群体达到最优目的,是一种基于 Swarm Inteligence的优化方法。同遗传算法类似,也是一种基于群体叠代的,但并没有遗传算法用的交叉以及变异,而是粒子在解空间追随最优的粒子进行搜索。PSO的优势在于简单容易实现同时又有深刻的智能背景,既适合科学研究,又特别适合工程应用,并且没有许多参数需要调整。

粒子群优化算法源于1987年Reynolds对鸟群社会系统boids的仿真研究,boids是一个CAS。在boids中,一群鸟在空中飞行,每个鸟遵守以下三条规则:
1)避免与相邻的鸟发生碰撞冲突;
2)尽量与自己周围的鸟在速度上保持协调和一致;
3)尽量试图向自己所认为的群体中靠近。
仅通过使用这三条规则,boids系统就出现非常逼真的群体聚集行为,鸟成群地在空中飞行,当遇到障碍时它们会分开绕行而过,随后又会重新形成群体。
Reynolds仅仅将其作为CAS的一个实例作仿真研究,而并未将它用于优化计算中 。
Kennedy和Eberhart在中加入了一个特定点,定义为食物,鸟根据周围鸟的觅食行为来寻找食物。他们的初衷是希望通过这种模型来模拟鸟群寻找食源的现象,然而实验结果却揭示这个仿真模型中蕴涵着很强的优化能力,尤其是在多维空间寻优中。
PSO中,每个优化问题的解都是搜索空间中的一只鸟。称之为“粒子(Particle)”。所有的粒子都有一个由被优化的函数决定的适应值,每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索.
PSO 初始化为一群随机粒子。然后通过叠代找到最优解。在每一次叠代中,粒子通过跟踪两个"极值"来更新自己。第一个就是粒子本身所找到的最优解。这个解叫做个体极值pBest. 另一个极值是整个种群目前找到的最优解。这个极值是全局极值gBest。另外,也可以不用整个种群而只是用其中一部分的邻居。
PSO算法数学表示如下:
设搜索空间为D维,总粒子数为n。第i个粒子位置表示为向量Xi=( xi1, xi2,…, xiD );第i个粒子 “飞行”历史中的过去最优位置(即该位置对应解最优)为Pi=( pi1,pi2,…,piD ),其中第g个粒子的过去最优位置Pg为所有Pi ( i=1, …,n)中的最优;第i个粒子的位置变化率(速度)为向量Vi=(vi1, vi2,…, viD)。每个粒子的位置按如下公式进行变化(“飞行”):

其中,C1,C2为正常数,称为加速因子;rand( )为[0,1]之间的随机数;w称惯性因子,w较大适于对解空间进行大范围探查(exploration),w较小适于进行小范围开挖(exploitation)。第d(1≤d≤D)维的位置变化范围为[-XMAXd , XMAXd],速度变化范围为[-VMAXd , VMAXd],迭代中若位置和速度超过边界范围则取边界值。

粒子群初始位置和速度随机产生,然后按公式(1)(2)进行迭代,直至找到满意的解。目前,常用的粒子群算法将全体粒子群(Global)分成若干个有部分粒子重叠的相邻子群,每个粒子根据子群(Local)内历史最优Pl调整位置,即公式(2)中Pgd换为Pld。

2、粒子群优化BP神经网络

神经网络与粒子群算法的结合主要有两种方式:一是利用粒子群算法的全局搜索能力来优化神经网络的拓扑结构、连接权值和阈值,将粒子群算法良好的全局寻优能力与BP算法良好的局部寻优能力相结合,以提高神经网络的泛化能力和学习性能,从而改进神经网络的整体搜索效率;二是将神经网络嵌入到粒子群算法当中,利用神经网络良好的学习性能来改进粒子群算法的优化性能,以提高粒子群算法的收敛速度,减少计算的工作量。

3、粒子群算法生成BP神经网络的权值和阈值,Matlab编程

function [W1,W2,B1,B2]=pso(HiddenNum,InDim,OutDim)

% clc;clear
% tic; %程序运行计时
E0=0.001; %允许误差
MaxNum=; %粒子最大迭代次数
narvs=InDim*HiddenNum++HiddenNum+HiddenNum; %目标函数的自变量个数=
particlesize=; %粒子群规模=
c1=; %每个粒子的个体学习因子,也称为加速常数
c2=; %每个粒子的社会学习因子,也称为加速常数
w=0.6; %惯性因子
vmax=0.8; %粒子的最大飞翔速度
x=-+*rand(particlesize,narvs); %粒子所在的位置
v=*rand(particlesize,narvs); %粒子的飞翔速度
%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,
%目标函数是:y=+(2.1*(-x+*x.^).*exp(-x.^/))
%inline命令定义适应度函数如下:
fitness=inline('1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2)))','x');
%inline定义的适应度函数会使程序运行速度大大降低
for i=:particlesize%粒子群规模
for j=:narvs %目标函数自变量个数
f(i)=fitness(x(i,j));
end
end
personalbest_x=x;%*
personalbest_faval=f;%* 但是是
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=;
while k<=MaxNum
for i=:particlesize
for j=:narvs
f(i)=fitness(x(i,j));
end
if f(i)<personalbest_faval(i) %判断当前位置是否是历史上最佳位置
personalbest_faval(i)=f(i);
personalbest_x(i,:)=x(i,:);
end
end
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
for i=:particlesize %更新粒子群里每个个体的最新位置
v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))...
+c2*rand*(globalbest_x-x(i,:));
for j=:narvs %判断粒子的飞翔速度是否超过了最大飞翔速度
if v(i,j)>vmax;
v(i,j)=vmax;
elseif v(i,j)<-vmax;
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
if abs(globalbest_faval)<E0,break,end
k=k+;
end
Value1=/globalbest_faval-;
Value1=num2str(Value1);
% strcat指令可以实现字符的组合输出
disp(strcat('the maximum value','=',Value1));
%输出最大值所在的横坐标位置
Value2=globalbest_x;
% % Value2=num2str(Value2);
% % disp(strcat('the corresponding coordinate','=',Value2));
% x=-:0.1:;
% y=2.1*(-x+*x.^).*exp(-x.^/);
% plot(x,y,'m-','linewidth',);
% hold on;
% plot(globalbest_x,/globalbest_faval-,'kp','linewidth',);
% legend('样本的输出值','网络的输出值');xlabel('X');ylabel('Y');grid on;toc; % 赋值给 bp神经网络的权值和阈值
W1=zeros(HiddenNum,InDim);
% B1=zeros(HiddenNum,);
% W2=zeros(,HiddenNum);
% B2=zeros(,OutDim); biaozhi=;
for wi=:HiddenNum
W1(wi,:)=Value2(,biaozhi:biaozhi+InDim-);
biaozhi=wi*InDim+;
end
B1=Value2(,biaozhi:biaozhi+HiddenNum-);
B1=B1';
W2=Value2(,biaozhi+HiddenNum:biaozhi+HiddenNum+HiddenNum-);
B2=Value2(,biaozhi+HiddenNum+HiddenNum);
end

粒子群优化算法对BP神经网络优化 Matlab实现的更多相关文章

  1. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  2. 粒子群优化算法PSO及matlab实现

    算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群 ...

  3. MATLAB粒子群优化算法(PSO)

    MATLAB粒子群优化算法(PSO) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.介绍 粒子群优化算法(Particle Swarm Optim ...

  4. ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)

    ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...

  5. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

  6. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...

  7. 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretiza ...

  8. 数值计算:粒子群优化算法(PSO)

    PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...

  9. [matlab] 6.粒子群优化算法

    粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法,该算法最早由Kennedy和Eberhart在19 ...

随机推荐

  1. 批量将制定文件夹下的全部Excel文件导入微软SQL数据库

    以下代码将c:\cs\文件夹下的全部Excle中数据导入到SQL数据库 declare @query vARCHAR(1000) declare @max1 int declare @count1 i ...

  2. 啃算法:归并排序及JavaScript实现

    在学习归并排序之前,有必要了解分治法,因为归并排序正是应用了分治模式.(基本定义摘自<算法导论>) 一.分治法 1.思想: 将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些 ...

  3. 第十届山东省赛L题Median(floyd传递闭包)+ poj1975 (昨晚的课程总结错了,什么就出度出度,那应该是叫讨论一个元素与其余的关系)

    Median Time Limit: 1 Second Memory Limit: 65536 KB Recall the definition of the median of elements w ...

  4. C. Yet Another Counting Problem(循环节规律)

    \(给出a,b,l,r,求在区间[l,r]内有多少x满足x%a%b!=x%b%a\) \(--------------------分割!!~----------------------------\) ...

  5. [ACdream 1211 Reactor Cooling]无源无汇有上下界的可行流

    题意:无源无汇有上下界的可行流 模型 思路:首先将所有边的容量设为上界减去下界,然后对一个点i,设i的所有入边的下界和为to[i],所有出边的下界和为from[i],令它们的差为dif[i]=to[i ...

  6. GIT代码版本管理

    一.实验目的 1.了解分布式版本控制系统的核心机理: 2.熟练掌握git的基本指令和分支管理指令: 二.实验内容 1.安装git: 2.初始配置git,git init git status指令: 3 ...

  7. gather函数

    gather(input, dim, index):根据  index,在  dim  维度上选取数据,输出的  size  与  index  一致 # input (Tensor) – 源张量 # ...

  8. MySQL索引知识介绍

    前言: 索引是MySQL数据库中的重要对象之一,索引的目的在于提高查询效率.可以类比字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可.索引是表的目录,在查找内容之前可以先 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目

    首先,默认咱们已经有了.net core 3.1的开发环境,如果你没有,快去下载... https://dotnet.microsoft.com/download 由于项目是基于abp vNext开发 ...

  10. curl发送请求

    一.get请求 curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http:// ...