【PSO】熟悉PSO算法

来源:互联网 发布:二战苏联伙食知乎 编辑:程序博客网 时间:2024/06/04 19:44


问:怎样才算是真正熟悉一个PSO算法?

答:下载CEC2013或者2010的标准测试函数集,然后让你的PSO算法在基本的函数集上调通了,这样才算正确地实现了一个PSO算法。

下载地址:http://goanna.cs.rmit.edu.au/~xiaodong/cec13-lsgo/competition/

内容包含:C++/Java/Matlab实现、说明文档、代码demo


问:CEC标准测试函数集,具体包含哪些函数?

答:单峰、多峰、基本、旋转、偏移等一系列测试函数,每个函数有1000个变量;


实验步骤


(1) 实验:实现算法,进行独立重复试验,取平均值、中位数、方差进行计算;

(2) 显著性分析:对(1)中实验值进行显著性分析,做对比实验;

什么是 显著性分析?

一般而言,把要检验的假设称之为原假设,记为H0;把与H0相对应(相反)的假设称之为备择假设,记为H1。如果原假设为真,而检验的结论却劝你放弃原假设。此时,我们把这种错误称之为第一类错误。通常把第一类错误出现的概率记为α;

所谓统计假设检验就是事先对总体(随机变量)的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设是否合理。而把只限定第一类错误概率的统计假设检验就称之为显著性检验。显著性检验是用于检测科学实验中实验组与对照组之间是否有差异以及差异是否显著的办法,更通俗的话来说就是要先对科研数据做一个假设,然后用检验来检查假设对不对;

为什么要做显著性检验?

因为我们想要判断样本与我们对总体所做的假设之间的差异是纯属机会变异,还是由我们所做的假设与总体真实情况之间不一致所引起的。 

怎么做显著性检验?

显著性检验可以分为参数检验和非参数检验。参数检验要求样本来源于正态总体(服从正态分布),且这些正态总体拥有相同的方差,在这样的基本假定(正态性假定和方差齐性假定)下检验各总体均值是否相等,属于参数检验。

当数据不满足正态性和方差齐性假定时,参数检验可能会给出错误的答案,此时应采用基于秩的非参数检验。

因素和元?

所谓的“元”,正是指未知变量的个数。在统计假设检验中,仍然把待检验的未知变量称之为“元”而把影响未知变量的行为(事件)称之为“因素”。

方差检验函数?

方差分析必须满足两条假设,分别是正态性假定和方差齐性假定。因此,在一个完整的统计工程中,必须首先检测数据的正态性假定和方差齐性假定,这就涉及到另外两个函数lillietest正态检验函数(分布检验,检验目标是数据集服从何种分布)和vartestn方差齐性检验(参数检验 ,检测的目标是数据集的分布服从什么样的参数)

参考文献:关于显著性检验,你想要的都在这儿了!

(3) 敏感性分析与绘图

变化参数:迭代次数 (Iteration number)、NFE (number of fitness evaluation)、群体规模m、惯性权重系数w1和w2(inertia weight)、加速常数c1和c2(acceleration constants)、粒子飞行的随机性r1和r2;

参数集中于速度更新公式:

Vid(k+1)=w*Vid(k)+c1*r1*(Pid(k)-Xid(k))+c2*r2*(Pgd(k)-Xid(k))

敏感性分析之后考虑记录迭代中间过程,保留数据绘图:收敛曲线、参数图、对比图

(4) 离散粒子群算法

速度更新:不是简单的加法公式,而是自定义策略来更新速度,策略好坏的判断标准为对最优解的接近程度;

测试函数:CEC测试函数集中的函数主要是连续函数,离散粒子群算法无法使用,测试方法要根据应用场景自定义;

(5) 运行程序

编码环境:建议用 VS2015;

运行环境:集群运行,需要写好代码、编译、放到集群开多个进程跑;

编码语言:C/C++

说明:CEC2010每个函数包括1000维的变量,跑完需要3-4天,如果放集群,开多进程,可以缩短到1-2天;