如果对粒子群一点都不知道的可以看看上文标准粒子群算法,想看代码的直接去下面1.4标题即可
链接:(105条消息) 自己对粒子群算法的理解(附matlab直接运行代码)(二维)_吕浩轩的博客-CSDN博客_二维粒子群算法h
好现在开始正文:
1.1 前言:理论基础
标准粒子群通过追随个体极值和群体极值完成极值寻优,虽然简单,且能快速收敛,但是随着迭代次数的增加,在种群收敛集中的过程中,各个粒子也越来越相似(接近),这样就有可能进入局部最优解而无法跳出。
混合粒子群算法:摈弃了传统粒子群算法中的通过追踪极值来更新粒子位置的方法,引入了遗传算法中的交叉和变异操作,通过粒子同个体极值和群体极值的交叉以及粒子自身变异的方式来搜索最优解。
1.2 算法流程
基本上和标准粒子群基本一致。(图有点糊,抱歉)
1.3 算法实现
1.3.1 :个体编码
在写代码前,先要讲一下粒子的个体编码
粒子个体采用整数编码,每个粒子代表经过的城市,比如A粒子=5,A的个体编码为[2 5 1 3 6]
表示城市遍历从2开始,途径 5 1 3 6到2结束,没错,是返回2了。这样才能完成TSP的遍历。
1.3.2 :适应度值
粒子适应度值就是遍历路径的长度,计算公式为如下:
n为城市数量,path(i,j)为城市i,j之间的路径长度
1.3.3: 交叉操作
交叉操作
个体通过个体极值和群体极值交叉来更新,交叉方法采用整数交叉法。首先选择两个交叉位置,然后把个体和个体极值或个体与群体极值进行交叉,假定随机选取的交叉位置为3和4位置,操作方法如下:
个体:[9 4 2 1 3 7 6 10 8 5]
极值:[9 2 1 6 3 7 4 10 8 5]
交叉为新个体:[9 4 1 6 3 7 6 10 8 5]
在MATLAB智能算法30个案例这本书中是用上面的素材交换3和5位置生成[9 4 1 6