群体优化算法(1)——粒子群算法(PSO)

粒子群算法

(1)单目标
1.1 理论
粒子群算法起源于鸟群的捕食行为,其本质是一种随机搜索方法。鸟群捕食时,对于目标猎物的位置信息是共享的,除了自身对于猎物的位置认知,还有其他群体伙伴对目标猎物的位置认知。综合以上信息,改变自身的移动速度和方向,从而不断向目标前进。因此,在优化问题中,最优解就是我们的目标猎物位置,初始解集则是我们的鸟群位置,目标函数用来衡量不同解集到最优解的距离,在自身位置、移动速度与方向满足一定的约束条件下,通过不断迭代和筛选,得到最优解(解集)。

1.2 算法流程
① 问题定义

初始化目标函数:一般用函数句柄定义,可在其他文件中描述具体函数。
初始化解集:定义解集自身维度,即解集元素个数;定义解集约束范围。
② 参数定义
迭代次数;群体个数;
学习因子:自身状态的改变以及群体对自身状态改变的影响。
移动速度:根据解集大小范围,定义解集的变化速度。
③ 初始化
粒子位置:需满足值域大小以及粒子维度。
粒子速度;
目标函数:结合粒子位置和速度,初始化目标函数值。
个体最优:包括个体最优粒子位置以及目标函数值。
全局最优:通过个体最优粒子的比较,得到全局最优。
④ 迭代更新
Step1:更新速度
v(t+1)=ωv(t)+c1r1(t)[p_b-x(t)]+c2r2(t)*[p_gb-x(t)]
Step2:比较速度值大小。若超出范围,则选取最大值或最小值
Step3:更新位置
X(t+1)=X(t)+v(t+1)
Step4:比较位置大小。若超出范围,则选取最大值或最小值
Step5:比较目标函数值。更新个体最优以及群体最优。
⑤ 可视化绘图

1.3 参数选择原则
①惯性权重ω
ω=ωmax−(ωmax−ωmin)∗t/Tmax
在0.8~1.2之间,粒子群算法有较快的收敛速度;而当大于1.2时,算法容易陷入局部极值。
②自我认知学习因子c1以及全体认知学习因子c2
C1=1.5, C2=2.0

(2)多目标
1.1 理论
生活中需要对多个目标实现同时优化,比如投资股票时,既要考虑提高投资回报率,又要尽可能降低投资的风险性,因此需要权衡多方面的利弊。多目标粒子群算法就是求解一组解集,最优地平衡多个目标。假设整个的粒子群体数为N,将其分为非支配子集A和支配子集B,并创建精英集。每次迭代均只对子集B进行速度和位置更新,并基于适应度支配思想将其与子集A比较,将B中的非劣解并入A中,并更新外部精英集。精英集的规模由密度评估技术、分散度技术等进行控制。
①支配与非支配
子集A中的解对应的目标函数值均小于子集B,则说明A支配B。
②帕累托解集
③帕累托最优前沿解集

1.2 算法流程
① 问题定义
初始化目标函数:一般用函数句柄定义,可在其他文件中描述具体函数。
初始化解集:定义解集自身维度,即解集元素个数;定义解集约束范围。
② 参数定义
迭代次数;群体个数;档案大小
惯性权重:自身惯性的改变
学习因子:自身状态的改变以及群体对自身状态改变的影响。
移动速度:根据解集大小范围,定义解集的变化速度。
网格维度;
领导者选择影响因子;异变率;
③ 初始化
粒子位置:需满足值域大小以及粒子维度。
粒子速度;
目标函数:结合粒子位置和速度,初始化目标函数值。
个体最优:更新个体最优粒子。
粒子是否被支配初始化;粒子网格索引;
④ 迭代更新
Step1:选择leader。自适应网格技术,选择概率低的点,以保证解集的多样性
Step2:更新速度
v(t+1)=ωv(t)+c1r1(t)[p_b-x(t)]+c2r2(t)*[p_leader-x(t)]
Step3:比较速度值大小。若超出范围,则选取最大值或最小值
Step4:更新位置
X(t+1)=X(t)+v(t+1)
Step5:比较位置大小。若超出范围,则选取最大值或最小值
Step6:异变。采用异变的方式保证解集的多样性。
Step7:比较目标函数值。更新个体最优以及群体最优。
Step8:更新档案,存储帕累托最优解集。
Step9:若档案超过个数限制,则进行截断。
Step10:迭代次数已满则终止。

发布了13 篇原创文章 · 获赞 5 · 访问量 540

猜你喜欢

转载自blog.csdn.net/weixin_37801425/article/details/104183350