本发明涉及组合优化、路径规划领域,具体涉及一种基于天牛须搜索算法的旅行商问题求解方法。
背景技术:
旅行商问题:
tsp问题(travelingsalesmanproblem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一;它描述了以下场景:有一名旅行商人要拜访各个城市,城市的数量为n,限制条件为每个城市仅拜访一次且所有城市必须都需要拜访,优化目标为使得在拜访完所有城市并最终回到起点的情况下旅行商人走过的总路径长度最短。经典的tsp问题中点与点之间的路径长度为点与点之间的直线距离。
天牛须搜索算法:
天牛须搜索算法是一种新型生物启发式智能优化算法,其模拟了天牛觅食行为,当天牛觅食时会利用左右触须来感知食物的气味强度,如果左边触须收到的气味强度大,它下一步就往气味强度大的左边飞,否则往右边飞,天牛须搜索算法中天牛的当前位置即为所求问题的可行解,食物的气味强度为适应度函数;传统的天牛须搜索算法多用于求解连续性函数的优化问题,难以求解离散型问题。
技术实现要素:
针对上述问题,本发明提供了一种基于天牛须搜索算法的旅行商问题求解方法。
本发明的技术方案是:一种基于天牛须搜索算法的旅行商问题求解方法,具体步骤包括如下:
步骤(1.1)、初始化m个城市的坐标,计算各个城市之间的距离,生成距离矩阵d;
步骤(1.2)、初始化参数;设置天牛群规模排n,最大迭代次数max,更新概率p1、天牛个体xi中左、右须之间的距离d及局部搜索概率p;
步骤(1.3)、初始化天牛群的位置x,计算天牛群中天牛个体xi的适应度值f(x),记录天牛个体xi的个体历史最优pbst和群体历史最优gbst;
步骤(1.4)、求得当前位置中左、右须分别对应的位置:将左、右须之间的距离d作为随机变换的次数,对当前的天牛个体xi进行d次变换,生成的新个体作为左须xl,再对当前的天牛个体xi进行d次变换,生成与左须xl不同的新个体作为右须xr;
步骤(1.5)、确定左、右须的适应度值分别为f(xl),f(xr):如左须xl的适应度值f(xl)小于右须xr的适应度值f(xr),则计算当前个体位置位移到左须xl的移动向量;否则计算当前个体位置位移到右须xr的移动向量;
步骤(1.6)、根据天牛个体xi的位置更新策略,得到天牛个体xi的新位置
步骤(1.7)、计算当前位置和得到的新位置的适应度值分别为f(xi),
步骤(1.8)、将天牛个体xi移动至新位置
步骤(1.9)、判断是否到达最大迭代次数;若迭代完成,则输出全局最优解及其对应位置,否则,则进行更新参数,并重新返回步骤(1.4)至步骤(1.8)。
进一步的,在步骤(1.5)中,所述天牛个体xi的左、右须的适应度值f(xl),f(xr),如下式所示:
式中,d(xij,xj+1)为天牛个体xi中第j个城市和第j+1个城市之间的距离。
进一步的,在所述步骤(1.6)中,所述的位置更新策略的具体操作方法如下:
(1.6.1)、遍历天牛个体xi中的每一个元素,将生成(0,1)之间的随机数r1与更新概率p1进行对比;
(1.6.2)、当随机数r1大于局更新概率p1时,则对位置中的相应元素进行更新生成临时个体位置,若小于则将当前元素置0,其具体如下式所示:
式中,
进一步的,在所述步骤(1.6)中,进行修正的具体操作步骤如下:
(1.7.1)、将序列中未出现的城市进行随机排序;
(1.7.2)、将排序后的城市,依次赋值给为0的元素,从而得到一个符合要求的序列。
在所述步骤(1.8)中,进行局部搜索操作的具体操作步骤如下:
(1.8.1)、产生两个随机数a,b(0<a,b<m),取a,b中的较小值最为开始位置,较大值作为结束位置,对序列进行逆序操作;
(1.8.2)、计算逆序后的序列的适应度值f(x),若优于原序列,则进行更新,否则保持原序列不变。
进一步的,在所述步骤(1.9)中,所述更新后的参数为天牛个体xi当前位置中左、右两须之间的距离d,具体如下式所示:
dtemp=dtemp*0.996
d=floor(1+dtemp)
其中,dtemp表示更新后的临时距离,floor(x)表示向下取整,即取不大于x的最小整数。
本发明的有益效果是:本发明所述的一种基于天牛须搜索算法的旅行商问题求解方法,将原本应用于连续域的天牛须搜索算法应用于离散域去解决旅行商问题,同时保持了天牛须搜索算法的原有思想。
附图说明
图1是本发明的结构流程图;
图2是本发明的实施例对比示意图。
具体实施方式
为了更清楚地说明本发明的技术方案,下面结合附图对本发明的技术方案做进一步的详细说明:
如图1所述;一种基于天牛须搜索算法的旅行商问题求解方法,具体步骤包括如下:
步骤(1.1)、初始化m个城市的坐标,计算各个城市之间的距离,生成距离矩阵d,所述的距离矩阵d=(d1,d2,...,dm);
步骤(1.2)、初始化算法的参数;设置天牛群规模排n,最大迭代次数max,更新概率p1、天牛个体xi中左、右须之间的距离d及局部搜索概率p;
步骤(1.3)、初始化天牛群的位置x,所述x=(x1,x2,...xi,xm),式中,xi为天牛个体;计算天牛群中天牛个体xi的适应度值f(x),同时记录个体历史最优pbst和群体历史最优gbst;
步骤(1.4)、求得当前位置中左、右须分别对应的位置:将左、右须之间的距离d作为随机变换的次数,对当前的天牛个体xi进行次变换,生成的新个体作为左须xl,再对当前的天牛个体xi进行d次变换,生成与左须xl不同的新个体作为右须xr;
步骤(1.5)、确定左、右须的适应度值分别为f(xl),f(xr):如左须xl的适应度值f(xl)小于右须xr的适应度值f(xr),则计算当前个体位置位移到左须xl的移动向量;否则计算当前个体位置位移到右须xr的移动向量;
步骤(1.6)、根据天牛个体xi的位置更新策略,得到天牛个体xi的新位置
步骤(1.7)、计算当前位置和得到的新位置的适应度值分别为f(xi),
步骤(1.8)、将天牛个体xi移动至新位置
步骤(1.9)、判断是否到达最大迭代次数;若迭代完成,则输出全局最优解及其对应位置,否则,则进行更新参数,并重新返回步骤(1.4)至步骤(1.8)。
进一步的,在步骤(1.5)中,所述天牛个体xi的左、右须的适应度值f(xl),f(xr),如下式所示:
式中,d(xij,xj+1)为天牛个体xi中第j个城市和第j+1个城市之间的距离。
进一步的,在所述步骤(1.6)中,所述的位置更新策略的具体操作方法如下:
(1.6.1)、遍历天牛个体xi中的每一个元素,将生成(0,1)之间的随机数r1与更新概率p1进行对比;
(1.6.2)、当随机数r1大于更新概率p1时,则对位置中的相应元素进行更新生成临时个体位置,若小于则将当前元素置0,其具体如下式所示:
式中,
进一步的,在所述步骤(1.6)中,进行修正的具体操作步骤如下:
(1.7.1)、将序列中未出现的城市进行随机排序;
(1.7.2)、将排序后的城市,依次赋值给为0的元素,从而得到一个符合要求的序列。
进一步的,在所述步骤(1.8)中,进行局部搜索操作的具体操作步骤如下:
(1.8.1)、产生两个随机数a,b(0<a,b<m),取a,b中的较小值最为开始位置,较大值作为结束位置,对序列进行逆序操作;
(1.8.2)、计算逆序后的序列的适应度值f(x),若优于原序列,则进行更新,否则保持原序列不变。
进一步的,在所述步骤(1.9)中,所述更新后的参数为天牛个体xi当前位置中左、右两须之间的距离d,具体如下式所示:
dtemp=dtemp*0.996
d=floor(1+dtemp)
其中,dtemp表示更新后的临时距离,floor(x)表示向下取整,即取不大于x的最小整数。
针对旅行商问题,对天牛须算法进行离散化处理,并在该算法中添加了局部搜索算法,避免算法在后期陷入局部最优解:
1、天牛的位置:
根据tsp问题的特性,将第i个天牛的位置定义为所遍历的城市的路径,用如下形式表示:
xi=(xi1,xi2,....,xin)
其中,n为城市的总个数,(i=1,2,3,...q,q为种群规模大小);xi表示第i个天牛所遍历的城市路径为x1→x2....→xn;(xi1,xi2,....,xin)中的xij表示天牛第i次所遍历的城市的编号。
2、适应度函数:
定义一个解x=(x1,x2,...,xn),表示遍历城市的顺序;将遍历路径的长度,作为适应度函数f(x)
其中,
具体实施例:
(1)、对实验条件进行以下设定:
种群数目100、城市数目29,局部搜索概率0.5,更新概率0.5,最大迭代次数1000
(2)、适应度函数为
其中,d(xij,xj+1)为天牛个体xi中第j个城市和第j+1个城市之间的距离。
具体的,1、载入29个的城市坐标,计算各个城市之间的距离,生成距离矩阵;
2、设置种群的数目为100,更新概率p1=0.5,天牛个体xi左、右两须间的距离d=20,局部搜索概率p=0.5;
3、初始化天牛群的位置x=(x1,x2,...,xm),式中,xi为天牛个体;根据初始化结果计算天牛群中个体的适应度值f(x),同时记录个体历史最优pbst和群体历史最优gbst;
4、对当前天牛个体xi进行d次变换,生成的新个体作为左须xl,再对当前个体xi进行d次变换生成与左须xl不同的个体作为右须xr;
5、如果fleft≤fright则计算当前位置xi与左须xl的移动向量,如果fright<fleft则计算当前位置xi与右须xr之间的移动向量;
v=xi-xtemp
其中,v表示从xi向xtemp转移时,xi中的元素向右位移的移动向量,fleft为左须的适应度值,fright为右须的适应度值;
6、遍历个体中的每一个元素,生成(0,1)之间的随机数r1与更新概率p1进行比较,如果r1>p1,则对当前元素进行更新,否则将
7、对
8、计算
9、生成(0,1)之间的随机数r2与局部搜索概率p进行比较,若r2>p,则进行局部搜索,否则转入步骤10;
10、计算当前个体的适应度值f(x)与个体历史最优pbst和群体历史最优gbst进行比较,若f(x)<pbst,则更新个体历史最优为f(x),若f(x)<gbst,则更新群体历史最优为f(x);
iff(x)<pbstthenpbst=f(x)
iff(x)<gbstthengbst=f(x)
11、判断是否达到最大迭代次数,如达到,则输出群体最优及对应的个体,否则,更新天牛左右须之间的距离,然后转入步骤(1.4);通过计算机仿真,结果如图2所示。
最后,应当理解的是,本发明中所述实施例仅用以说明本发明实施例的原则;其他的变形也可能属于本发明的范围;因此,作为示例而非限制,本发明实施例的替代配置可视为与本发明的教导一致;相应地,本发明的实施例不限于本发明明确介绍和描述的实施例。