(本文参考自:戴朝华. 粒子群优化算法综述. Available at: http://www.sciencetimes.com.cn/u/dchzyf/.)
PSO算法的问题:
1. PSO收敛快,特别是在算法的早期,但存在着精度较低,易发散等缺点。加速系数、最大速度等参数太大,粒子可能错过最优解--------------->不收敛; 收敛的情况下,由于所有粒子都向最优的方向飞去,所有粒子趋向同一化(失去多样性)--------->使得后期收敛速度明显变慢,搜索能力变弱,同时算法收敛到一定精度时,无法继续优化。
2. 缺乏数学理论支持,PSO算法本质上是一种随机搜索算法,因此可靠性上让人存疑;
3. 寻找一种好的拓扑结构,加强PSO算法的泛化能力;
4. 平衡全局搜索和局部搜索能力;
PSO算法优化方向:粒子群初始化、领域拓扑、参数选择和混合策略四个方面。
(1)粒子群初始化:粒子群初始化对算法性能有一定的影响,分为粒子位置初始化和速度初始化。
粒子群位置初始化的理想效果:初始种群尽可能均匀覆盖整个搜索空间。
一、不推荐的初始化:a. 均匀分布随机数
缺点:1. 对搜索空间的覆盖不够好;
2. 当维度D增大时候,所有的粒子都倾向于靠近搜索空间的边缘:
b. 伪随机数初始化:造成粒子在参数空间的不均匀分布和聚集效应;
二、推荐的初始化:a. 基于centroidal voronoi tessellations (CVTs)的种群初始化方法(这东西是啥没搞懂);
b. 采用正交设计方法对种群进行初始化;
c. 类随机采样方法中的sobol序列:使得粒子群在参数空间更加均匀;
d. Hammersley方法:感觉这个类似于类随机采样方法(具体我也没搞清楚);
e. 将粒子建立为带电(positive charged)的模型,通过建立一个平衡方程,求解该方程的最小解获得粒子初始化位置;
f. 设置偏向的随机分布(推荐):即:我们通过对评价函数等一系列先验信息进行分析,得出最优解的可能存在空间范围,然后在这些范围内,着重撒点。就算再不济,也可以根据评价函数遵循Nearer is Better class(最优解更加可能在搜索空间的中心位置准则),在搜索空间的中心位置着重撒点。比如:
粒子群速度初始化:主要有如下五种方式:(根据实验表明,One-rand的效果最好。喂!!!这里One-rand的表达式是不是写错了啊?)
(2)领域拓扑:粒子的拓扑,决定了粒子所接受到的信息来源。
一、全局模型gbest:最早的粒子群优化版本是全局PSO,使用全局拓扑结构,社会只能通过种群中,最优的那个粒子,对每个粒子施加影响。
1. 优点:具有较快的收敛速度。
2. 缺点:粒子间的交流不够充分,但更容易陷入局部极值。
二、局部模型lbest:采用每个粒子仅在一定的邻域内进行信息交换,,粒子之间的交流相对比较缓慢。
1. 优点:粒子更容易搜索问题空间中的不同地区。
2. 缺点:信息传递缓慢,设计相对复杂。
3. 分类:被动模型:微观领域、宏观领域、维度划分;主动模型。
(1)微观邻域:细分到每个粒子。空间邻域(spatial neighborhood)、性能空间(performance space)邻域、社会关系邻域(sociometric neighborhood)。
a. 空间邻域:直接在搜索空间按粒子间的距离(如欧式距离)进行划分。在搜索初始阶段,将邻域定义为每个粒子自身;随着迭代次数的增加,将邻域范围逐渐扩展到整个种群。
b. 性能空间领域:根据性能指标(如适应度、目标函数值)划分的邻域,如:适应度距离比值(fitness-distance-ratio)来选择粒子的相邻粒子。
c. 社会关系邻域:按粒子存储阵列的索引编号进行划分,主要有:环形拓扑(ring or circle topology)、轮形拓扑(wheel topology)或星形拓扑(star topology)、塔形拓扑(pyramid topology)、冯-诺以曼拓扑(Von Neumann topology)以及随机拓扑(random topology)等。(随机拓扑往往对大多数问题能表现出较好的性能,其次是冯-诺以曼拓扑。)
(2)宏观邻域:对群体进行划分。比如:使用簇分析将整个粒子群划分为多个簇,然后用簇中心代替带收缩因子PSO中的粒子历史最佳位置或群体历史最佳位置;根据粒子相似性动态地将粒子群体按种类划分为多个子种群,再以每个子种群的最佳个体作为每个粒子的邻域最佳位置;划分一个主群体,多个仆群体,仆群体进行独立的搜索,主群体在仆群体提供的最佳位置基础上开展搜索;每间隔一定代数将整个群体随机地重新划分;每个粒子除了自身和邻域最佳历史位置外,还学习邻域内其他粒子的成功经验(只学好的,不学坏的)等等;
(3)维度划分:想法源自于:搜索空间维数较高时往往容易遭受“维数灾”的困扰。假设粒子群的整体维度为D,则可以将D划分成不同的部分,比如划分成k份,使用不同的群体,分别优化不同的维度。
(4)主动模型:主动改变粒子邻域空间,避免碰撞和拥挤。比如:将粒子分为带电粒子和自然粒子,带电粒子接近会产生排斥;为每个粒子引入与邻近粒子距离成反比的自组织危险度,距离越近危险度越高,当危险度达到一定阈值,对粒子进行重新初始化,或者弹开;为粒子赋一个半径,以检测两个粒子是否会发生碰撞,并且采取碰撞-弹开方式将其分离。
(3)参数选择:三种参数:惯性权重或收敛因子、最大速度、两个加速因子。
一、惯性权重:
a. 惯性权重大:加强PSO全局搜索能力;惯性权重小:加强PSO局部搜索能力;
b. 矛盾点:初始惯性权重大,局部搜索能力差,可能错过最优点;后期,惯性权重小,全局搜索能力不行,导致整个粒子群就陷入局部最优解。
c. 优化方向:在适当的时候降低权重w,平衡全局和局部搜索能力;
d. 优化建议:w随着更新代数的增加从0.9线性递减到0.4;
二、压缩因子:
a. 优势:惯性常数方法通常采用惯性权值随更新代数增加而递减的策略,算法后期由于惯性权值过小,会失去探索新区域的能力,而收缩因子方法则不存在此不足
b. 优化建议:通常φ取4.1,χ得0.729。
三、最大速度的选择:为了抑制粒子更新的无规律的跳动,速度往往被限制在[-Vm,Vm]
a. Vm增大,有利于全局探索(exploration),但可能越过全局最优解;Vm减小,有利于局部开发(exploitation),但可能陷入局部最优;
b. 优化建议:一般设定为问题空间的10%~20%;或者动态调整Vm,比如:根据群体最佳适应和最差适应来进行调整;
四、两个加速常数:加速常数C1和C2分别用于控制粒子指向自身或邻域最佳位置的运动。
a. C1增大,粒子全局搜索能力好;C2增大,粒子向着最优靠拢局部能力好,但粒子会过早收敛;
b. 优化建议:C1 = C2 = 2.0,并且C1+C2 <= 4.0;或者根据自适应调整,比如随着迭代次数增加,减小C1增大C2;
(4)混合法:PSO与其他方法结合。
这点我觉得,主要根据个人的学习积累来操作。考虑方向:增加粒子群的局部搜索能力。