![一种基于BAS改进的粒子群优化算法求解旅行商问题的方法与流程](https://img.xjishu.com/img/zl/2022/9/6/dvbgivgt3.jpg)
一种基于bas改进的粒子群优化算法求解旅行商问题的方法
技术领域
1.本发明涉及群智能优化算法技术领域,具体涉及一种基于bas改进的粒子群优化算法求解旅行商问题的方法。
背景技术:2.旅行商问题(tsp)是数学领域著名的问题,是商人拜访n个城市并且每个城市仅访问一次,最后回到出发城市,并且要求选择的路线最短的问题。针对著名的旅行商问题,随着城市数量的增加,会产生组合爆炸的情况。早期的研究者使用精确算法求解该问题,在后来,国内外的研究者重点使用近似算法或者启发式算法。因此,我们选择了一种改进的粒子群优化算法来解决此问题。粒子群优化算法(pso)是一种进化计算技术,起源于对鸟群觅食行为的研究。传统的粒子群优化算法容易陷入局部最优并且不稳定,pso的机理性研究较少、缺乏严密的数学指导。
技术实现要素:3.为解决上述问题,本发明提供一种基于bas改进的粒子群优化算法求解旅行商问题的方法,设计合理,解决了现有技术的不足,具有良好的效果。
4.为了实现发明目的,采用以下技术方案:
5.一种基于bas改进的粒子群优化算法求解旅行商问题的方法,包括以下步骤:
6.s1、初始化相关参数,包括城市数量、粒子群数量以及最大迭代次数;
7.s2、初始化城市坐标、每个粒子的位置和速度;
8.s3、通过bas算法产生随机速度,并根据适应度大小选择速度;
9.s4、更新每个粒子的位置和速度;
10.s5、分别保存个体最优和群体最优;
11.s6、重复步骤s3、s4和s5,当迭代次数达到预设的上限后,停止迭代;
12.s7、停止迭代后,输出当前群体最优对应的位置序列,即为旅行商问题最短路径的图解。
13.进一步地,s1包括以下子步骤:
14.s11、设置城市数量为n,粒子群数量为m,最大迭代次数为maxlteration;
15.s12、设置粒子群算法的惯性因子为w,该值为非负值,随着迭代次数减小,学习因子为c1、c2、c3;
16.进一步地,s2包括以下子步骤:
17.s21、根据实际情况表示出n个城市的坐标,城市坐标用(x,y)表示;
18.s22、设置每个粒子的位置为n个城市序号的随机序列;
19.s23、设置每个粒子的速度为n维的随机序列;
20.进一步地,s3包括以下子步骤:
21.s31、利用bas算法产生每个粒子的速度,表达式如式(1)所示:
22.v_bas=round(rand(1,n)'.*n)(1)
23.其中,v_bas为bas算法产生的每个粒子的速度,round为取整函数,rand(1,n)产生n维的随机向量,rand(1,n)'表示对rand(1,n)求转置矩阵;
24.s32、利用bas算法产生的粒子速度更新每个粒子的位置,表达式如式(2)所示:
[0025][0026]
其中,为第i个粒子在k+1次迭代中的位置,为第i个粒子在k次迭代中的位置;
[0027]
利用评价函数评价更新后的位置好或者坏,选择使更新后的位置好的速度,评价函数的表达式如下所示:
[0028][0029]
其中,|city
i+1-cityi|为两座城市之间的欧氏距离,为第i个粒子在k+1次迭代时的遍历n个城市后又回到初始城市的总距离。
[0030]
进一步地,s4包括以下子步骤:
[0031]
s41、利用传统的pso算法更新每个粒子的速度,表达式如式(4)所示:
[0032][0033]
其中,为第i个粒子在第k+1次迭代中更新后的速度,为上一次迭代的速度,w为惯性因子,c1,c2和c3为学习因子,为上一次迭代中的个体最优,为上一次迭代中的全局最优;
[0034]
s42、利用传统的pso算法更新每个粒子的位置,表达式如式(5)所示:
[0035][0036]
其中,为第i个粒子在第k+1次迭代中更新后的位置,由上一次迭代中的位置和速度决定。
[0037]
本发明具有的有益效果是:
[0038]
本发明在传统的粒子群算法中引入了bas算法,利用bas算法更新粒子群的速度和位置,可以解决传统粒子群算法容易陷入局部最优的缺点,该方法提高了搜索速度,并且更加稳定,提高了解决旅行商问题的效率。通过程序验证,验证了该算法的有效性。
附图说明
[0039]
图1为本发明的流程图;
[0040]
图2为传统粒子群算法解决旅行商问题的最短路径收敛图;
[0041]
图3为基于bas改进的粒子群算法解决旅行商问题的最短路径收敛图;
[0042]
图4为传统粒子群算法解决旅行商问题的城市分布图;
[0043]
图5为基于bas改进的粒子群算法解决旅行商问题的城市分布图;
具体实施方式
[0044]
下面结合附图和具体实施例对本发明的具体实施方式做进一步说明:
[0045]
一种基于bas改进的粒子群优化算法求解旅行商问题的方法,其特征在于,包括以下步骤:
[0046]
s1、初始化相关参数,包括城市数量、粒子群数量以及最大迭代次数;
[0047]
具体地,s1包括以下子步骤:
[0048]
s11、设置城市数量为n=14,粒子群数量为m=500,最大迭代次数为maxlteration=100;
[0049]
s12、设置粒子群算法的惯性因子为w,iteration代表迭代次数,w为非负值,随着迭代次数减小,学习因子为c1=0.5、c2=0.7、c3=0.05;
[0050]
s2、初始化城市坐标、每个粒子的位置和速度;
[0051]
具体地,s2包括以下子步骤:
[0052]
s21、根据实际情况表示出14个城市的坐标,城市坐标用(x,y)表示;
[0053]
本实施例用14x2的数组表示出14个城市的位置为:[16.47 96.10;16.47 94.44;20.09 92.54;22.39 93.37;25.23,97.24;22.00 96.05;20.47 97.02;17.20 96.29;16.30 97.38;14.05 98.12;16.53 97.38;21.52 95.59;19.41 97.13;20.09 94.55];
[0054]
s22、设置每个粒子的位置为14个城市序号的随机序列;
[0055]
s23、设置每个粒子的速度为14维的随机序列;
[0056]
s3、通过bas算法产生随机速度,并根据适应度大小选择速度;
[0057]
s3包括以下子步骤:
[0058]
s31、利用bas算法产生每个粒子的速度,表达式如式(1)所示:
[0059]
v_bas=round(rand(1,n)'.*n)(1)
[0060]
其中,v_bas为bas算法产生的每个粒子的速度,round为取整函数,rand(1,n)产生n维的随机向量,rand(1,n)'表示对rand(1,n)求转置矩阵;
[0061]
s32、利用bas算法产生的粒子速度更新每个粒子的位置,表达式如式(2)所示:
[0062][0063]
其中,为第i个粒子在k+1次迭代中的位置,为第i个粒子在k次迭代中的位置;
[0064]
利用评价函数评价更新后的位置好或者坏,选择使更新后的位置好的速度,评价函数的表达式如下所示:
[0065][0066]
其中,|city
i+1-cityi|为两座城市之间的欧氏距离,为第i个粒子在k+1次迭代时的遍历n个城市后又回到初始城市的总距离,当总距离小时评价为“好”,当总距离大时评价为“坏”。
[0067]
s4、更新每个粒子的位置和速度;
[0068]
所述s4包括以下子步骤:
[0069]
s41、利用传统的pso算法更新每个粒子的速度,表达式如式(4)所示:
[0070]
[0071]
其中,为第i个粒子在第k+1次迭代中更新后的速度,为上一次迭代的速度,w为惯性因子,c1,c2和c3为学习因子,为上一次迭代中的个体最优,为上一次迭代中的全局最优;
[0072]
s42、利用传统的pso算法更新每个粒子的位置,表达式如式(5)所示:
[0073][0074]
其中,为第i个粒子在第k+1次迭代中更新后的位置,由上一次迭代中的位置和速度决定。
[0075]
s5、分别保存个体最优和群体最优;
[0076]
其中,个体最优为一个粒子在迭代过程中的最优,群体最优是利用群体优化算法选取在所有个体最优中的最优;
[0077]
s6、重复步骤s3、s4和s5,当迭代次数达到预设的上限后,停止迭代;
[0078]
s7、停止迭代后,输出当前群体最优对应的位置序列,即为旅行商问题最短路径的图解,如图5所示。
[0079]
经过实验验证,如图2所示,传统的pso算法最短路径收敛于32.1767,通过加入bas算法改进后,如图3所示,最短路径收敛于30.8785。如图4和图5所示,传统pso算法容易陷入局部最优,加入bas算法以后可以跳出局部最优,求得全局最优解。
[0080]
当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。