用于寻找旅行商最优路径的方法与流程

文档序号:12365860阅读:406来源:国知局
用于寻找旅行商最优路径的方法与流程

本发明属于数据处理技术领域,特别涉及一种群体智能优化方法,可用于寻找旅行商的最优路径。

技术背景

近30年来,优化领域出现了重大变革,人工智能和人工生命技术为优化领域注入了新的活力,一系列基于仿生原理,通过模拟自然现象或过程的现代启发式优化算法相继提出。蚁群优化算法是一种模拟蚂蚁觅食行为的模拟优化算法,蚁群算法在解决旅行商TSP问题、交通运输、指派问题、以及车间调度问题等离散邻域优化问题有着自身的优势,并取得了很大的进展与收获。

蚁群算法的理论研究和实际应用表明,它是一种很有前途的仿生优化算法。随着人类认识的进步和社会发展的加速,仿生智能及最优化系统理论将越来越成为科学认识和工程实践的有力工具。在当今社会中,随着人工智能和网络技术的飞速发展,科学技术与其他的多种学科相互交叉,相互渗透和融合,不仅给人们的生活、学习和工作等方面带了便利,而且也从根本上改变了人类的生活和生产。与此同时,随着人类生活空间的不断扩大和对世界认识水平的不断提高,人们又对科学技术的发展提出了更高、更多的要求,期待着更多的研究学者对它进行不断的研究和提高,其中高效的优化技术和智能计算的要求也进一步的迫切需求。众所周知,社会性昆虫如蜜蜂,蚂蚁等,虽然其单个个体的力量很小,行为方式很简单、随机,但是它们却可以凭借集体的力量进行一些复杂的社会性活动,来更好的完成单个个体很难甚至不能完成的行为或活动,如它们可以通过社会分工等方式来更快的找到食物,共同的建造巢穴和防止外敌入侵等等。这种群体所表现出来的“智能”,就可以称之为群体智能。

群体智能中的群体是指“一组相互之间可以进行间接通信的主体,这组主体能够合作进行分布式问题求解”。而所谓群体智能是指“无智能的主体通过合作表现出智能行为的特性”。蚁群算法正是群体智能算法中的一个重要分支。在求解离散型组合优化的问题上,蚁群算法表现出了其他进化算法无法比拟的优越性。蚁群算法不仅具有鲁棒性、分布式计算、正反馈性、易于和其他的智能算法相结合的特点,而且还有智能搜索、全局优化等优势。该算法已经引起了众多专家和学者的注意,现在正被越来越多的研究者关注和探讨,算法的理论得到不断的完善,应用范围也普及到许多的科学技术及工程领域,是一种有良好发展前景的模拟进化算法。

蚁群算法应用在旅行商TSP问题上取得了很好的效果。旅行商TSP问题是组合优化中最著名的问题之一,它易于描述而难于求解。旅行商TSP问题问题描述如下:给定n个城市和每两个城市间的距离(或给定n个城市和各个城市的坐标,这样同样可以求的任意两个城市间的距离)。一个旅行商人自某一个城市出发巡回售货,旅行商应该如何选择路线,使每个城市经过一次且仅一次,以完成一个回路,并且路径最短。

意大利学者Dorigo等人提出的基本蚁群算法,在求解30个城市旅行商TSP问题,得到了非常满意的结果,并将蚁群算法与其他一些算法,如爬山法、模拟退火算法、禁忌搜索算法、遗传算法和进行规划进行了比较,结果显示对于多个不同的实例,蚁群算法比这些算法都能收敛到更好的解。这个结果使得许多学者收到了鼓舞,并纷纷加入到蚁群算法的研究中来。但是随着研究的深入,再将基本蚁群算法应用到更大规模的旅行商TSP问题上时,计算结果很不理想。这表明基本蚁群算法在求解大规模复杂问题上能力有限。面对较大规模的旅行商TSP问题时,存在很多局部极小点,单一的信息素调整方案使得基本蚁群算法较容易陷入这些局部极小点,从而出现停滞现象。同时,算法需要较长的搜索时间。

在Dorigo等人提出基本的蚁群算法后,基于前面发现的问题,又提出了新的ACS算法,该算法能很好的解决之前基本蚁群算法不能解决大规模的TSP问题,在该算法中,蚂蚁数为10个,基本蚁群算法的蚂蚁数是等于城市数的。该算法的收敛速度很高,搜索时间能缩短不少,所求的最优解较基本蚁群算法有不少提升,但是这种算法不是很稳定,会陷入局部最优解,导致程序停滞,最终求得的最优路径不准确。



技术实现要素:

本发明的目的在于克服已有技术的缺点,提出一种用于寻找旅行商最优路径的方法,避免陷入局部最优解,提高最优路径的准确性。

实现上述目的技术思路是:对现有的蚁群算法进行改进,即在刚开始时为各个路径设置相同的信息素浓度,使蚂蚁按照状态转移方程选择下一条路径,直到完成一次遍历;计算出本次的最优路径;然后在蚂蚁经过的路径上增加一定量的信息素,并按照信息素新的更新方式进行更新,进入下一次循环,直到循环结束,输出最终的最优路径。

根据上述思路,本发明的技术方案包括如下:

(1)数据预处理步骤:

(1a)输入旅行商TSPLIB数据库里城市坐标数据,该城市坐标数据表示x个城市的坐标位置,x为大于10的整数,用i、j分别表示n个城市中的两个不同城市,并将这两个城市的连线视为一条边(i,j);

(1b)初始化边(i,j)上的信息素浓度为τij(0)=0.1,设置轨迹相对重要性参数α=1,见度的相对重要性参数β=2;

(2)设置计算全局最优路径的循环次数Nmax=1000;

(3)设循环次数Nc=1,通过蚁群算法开始第一次循环,计算第一次最优路径长度Cb,完成信息素浓度更新;

(3a)将10个蚂蚁随机分布于10个城市;

(3b)计算第一只蚂蚁路径长度:

(3b1)设蚂蚁循环遍历次数N1=x;

(3b2)将第1只蚂蚁访问过的城市集设置为集合U,其他未访问的城市集设置为集合A,由状态转移概率公式计算出第1只蚂蚁从当前城市i到集合A中未访问城市j的状态转移概率值Sij

(3b3)对集合A中的n个城市分别计算其状态转移概率值,得到状态转移概率集合:S={Si1,Si2…Sij…Sin},其中Sij表示城市i到城市j的状态转移概率值,j=1,2,…,n,n为集合A中未访问的城市的数量,n=1,2,…,x;

(3b4)找出状态转移概率集合S中最大值Sik,k=1,2,…,j,则城市k为蚂蚁要移动的一下个城市;

(3b5)将第一只蚂蚁移动到城市k,并在集合A中剔除城市k,在集合U中加入城市k,更新集合A和集合U;

(3b6)第1只蚂蚁移动到城市k后,蚂蚁返回步骤(3b3),继续访问集合A中的第j+1个城市,直到集合A中没有城市,即N1=x,第1只蚂蚁遍历完成;

(3b7)在第1只蚂蚁遍历完所有城市后,计算第1只蚂蚁所访问城市的路径总长度:其中dij表示第i个城市与第j个城市之间的距离;

(3c)剩下的9只蚂蚁按照(3b)的方法遍历所有城市,计算9只蚂蚁路径总长度分别为C2,C3,C4,C5,C6,C7,C8,C9,C10,得到路径总长度集合C={C1,…Ca…C10},其中Ca表示第a个蚂蚁的路径总长度,a=1,2,…,10;

(3d)找出路径总长度集合C中的最小值Cmin,并将该最小值Cmin赋给最优路径长度Cb

(3e)更新边(i,j)上的信息素浓度:

τij(t+m)=(1-ρ)·τij(t)+Δτij

其中,τij(t+m)为t+m时刻边(i,j)上的信息素浓度,m=1,2,3…1000,ρ表示信息素挥发系数,1-ρ为信息素残留因子,ρ=0.01,τij(t)为t时刻边(i,j)上信息素浓度,表示在本次循环中边(i,j)上的信息素浓度增量,其中,ca表示第a只蚂蚁路径总长度,a=1,2,…,10,Q为路径长度参数,Q=1,Cb表示最优路径长度;

(3f)当完成所有边上信息素浓度更新之后,记录τij(t+m)和最优路径长度Cb

(4)循环次数Nc加1,返回步骤(3),本次循环完成后,记录本次最优路径长度Cbl,最优路径长度Cbl=min{Cb,Cbl},其中min{Cb,Cbl}表示Cb和Cbl中值较小的一个,Cbl为第Nc次循环的最优路径长度,l=1,2,…,1000;

(5)判断循环次数Nc,当循环次数达到预定的循环次数1000时,循环结束,输出最终的全局最优路径长度Cb1000

本发明与现有技术相比具有如下优点:

1.本发明在更新信息素浓度τij(t)时,引入了新的增量增加了蚂蚁选择其他边的概率,克服了过早出现停滞现象,避免陷入局部最优解。

2.本发明中采用信息素全局的更新规则,而不是信息素全局更新,提高了最优路径长度的准确度。

附图说明

图1是本发明的实现总流程图;

图2是用现有基本蚁群算法ACO在eil76数据库中找到的最优路径轨迹图;

图3是用现有蚁群系统算法ACS在eil76数据库中找到的最优路径轨迹图;

图4是用本发明在eil76数据库中找到的最优路径轨迹图;

图5是用现有基本蚁群算法ACO在bier127数据库中找到的最优路径轨迹图;

图6是用现有蚁群系统算法ACS在bier127数据库中找到的最优路径轨迹图;

图7是用本发明在bier127数据库中找到的最优路径轨迹图。

具体实施方式

以下结合附图本发明的具体实施和效果作进一步详细描述。

参照图1,给出如下两种实施例:

实施例1:寻找旅行商城市坐标eil76数据库的最优路径

eil76数据库是旅行商TSPLIB数据库中76个城市的坐标数据和城市编号,其中包含76行,3列数据,第1列是城市编号,第2列为城市的横坐标,第3列为城市的纵坐标,eil76数据库可以从以下地址获取。

(http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/)

本实例的实现步骤如下:

步骤1.数据预处理。

(1a)输入城市坐标eil76数据库,并用i、j分别表示76个城市中的两个不同城市,再将这两个城市的连线视为一条边(i,j);

(1b)初始化边(i,j)上的信息素浓度为τij(0)=0.1,设置轨迹相对重要性参数α=1,见度的相对重要性参数β=2。

步骤2.设置计算最优路径的循环次数Nmax=1000。

循环次数的多少直接影响到最优路径长度的效果,循环次数越多,则计算最优路径的准确性越高,但是也会降低运算速度,本发明兼顾最优路径长度效果和运算速度,取循环次数Nmax=1000;

步骤3.设循环次数Nc=1,通过蚁群算法开始第一次循环。

蚁群算法由Dorigo等人提出,先将10个蚂蚁随机分布于eil76数据库中的10个城市,使蚂蚁按照状态转移方程选择下一城市,直到完成一次遍历,计算出本次的最优路径,其步骤如下:

(3a)将10个蚂蚁随机分布于eil76数据库中的10个城市。

在蚁群算法中,根据eil76数据库可知城市的数量为76,将蚂蚁数量也设置为76,将76只蚂蚁随机分布在eil76数据库中的76个城市,但是这样运算速度很低,所以后来又将蚁群算法中的蚂蚁数量设置为10,即先将第1只蚂蚁,随机分布于eil76数据库中的第Z1个城市上,再将第r只蚂蚁,随机分布于eil76数据库中的第Zr个市城上,r=2,…,10;

(3b)计算第一只蚂蚁路径长度:

(3b1)设蚂蚁循环遍历次数N1=76,即蚂蚁要遍历的次数等于城市的数量76。

(3b2)第一只蚂蚁访问一遍所有的城市:

(3b21)将第1只蚂蚁访问过的城市集设置为集合U,其他未访问的城市集设置为集合A,由状态转移概率公式计算出第1只蚂蚁从当前城市i到集合A中未访问城市j的状态转移概率值Sij

其中,表示为的最大值,τij(t)为t时刻边(i,j)上信息素浓度,参数α表示轨迹相对重要性,ηij(t)表示蚂蚁从城市i到城市j的期望程度,取ηij(t)=1/dij,dij表示城市i和城市j之间的距离,参数β表示能见度的相对重要性,q为(0,1)内服从均匀分布的随机变量,q0=0.4,s表示集合A中未访问的城市,τis(t)为t时刻城市i到城市s上信息素浓度,ηis(t)表示蚂蚁从城市i到城市s的期望程度;

(3b22)对集合A中的n个城市分别计算其状态转移概率值,得到状态转移概率集合:S={Si1,Si2…Sij…Sin},其中Sij表示城市i到城市j的状态转移概率值,j=1,2,…,n,n为集合A中未访问的城市的数量,n=1,2,…,76;

(3b23)找出状态转移概率集合S中最大值Sik,k=1,2,…,j,则城市k为蚂蚁要移动的一下个城市;

(3b24)将第一只蚂蚁移动到城市k,并在集合A中剔除城市k,在集合U中加入城市k,更新集合A和集合U;

(3b25)第1只蚂蚁移动到城市k后,蚂蚁返回步骤(3b21),继续访问集合A中的第j+1个城市,直到集合A中没有城市,即N1=76,第1只蚂蚁遍历完成;

(3b3)在第1只蚂蚁遍历完所有城市后,计算第1只蚂蚁所访问城市的路径总长度:其中dij表示第i个城市与第j个城市之间的距离;

(3c)剩下的9只蚂蚁按照(3b)方法计算,得路径总长度分别为C2,C3,C4,C5,C6,C7,C8,C9,C10,得到路径总长度集合C={C1,…Cr…C10},其中Cr表示第r个蚂蚁的路径总长度,r=1,2,…,10;

(3d)找出路径总长度集合C中的最小值Cmin,并将该最小值Cmin赋给最优路径长度Cb

(3e)更新边(i,j)上的信息素浓度。

τij(t+m)=(1-ρ)·τij(t)+Δτij

其中,τij(t+m)为t+m时刻边(i,j)上的信息素浓度,m=1,2,3…1000,ρ表示信息素挥发系数,1-ρ为信息素残留因子,ρ=0.01,τij(t)为t时刻边(i,j)上信息素浓度,表示在本次循环中边(i,j)上的信息素浓度增量,其中,cr表示第r只蚂蚁路径总长度,r=1,2,…,10,Q为路径长度参数,Q=1,Cb表示最优路径长度;

(3f)当完成所有边上信息素浓度更新之后,记录τij(t+m)和最优路径长度Cb,完成第一次循环。

步骤4.循环次数Nc加1,返回步骤3,本次循环完成后,记录本次最优路径长度Cbl,其中Nc=1,2,…,1000,l=1,2,…,1000。

当Nc=1时,计算的最优路径长度为Cb

当Nc=2,…,1000时,最优路径长度Cbl=min{Cb,Cbl},其中min{Cb,Cbl}表示Cb和Cbl中值较小的一个,Cbl为第Nc次循环的最优路径长度。

步骤5.完成循环次数,获得全局最优路径长度Cb1000

判断循环次数Nc,若Nc=1000,循环结束,Cbl000=min{Cb,Cbl000},输出最终的最优路径长度Cb1000

实施例2:寻找旅行商城市坐标bier127数据库的最优路径

bier127数据库是旅行商TSPLIB数据库中127个城市的坐标数据和城市编号,其中包含127行,3列数据,第1列是城市编号,第2列为城市的横坐标,第3列为城市的纵坐标,bier127数据库可以从以下地址获取。

(http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/)

本实例的实现步骤如下:

步骤一.数据预处理。

(1.1)输入城市坐标bier127数据库,并用i、j分别表示127个城市中的两个不同城市,再将这两个城市的连线视为一条边(i,j);

(1.2)初始化边(i,j)上的信息素浓度为τij(0)=0.1,设置轨迹相对重要性参数α=1,见度的相对重要性参数β=2。

步骤二.设置计算最优路径的循环次数Nmax=1000。

步骤三.设循环次数Nc=1,通过蚁群算法开始第一次循环。

(3.1)将10个蚂蚁随机分布于bier127数据库中的10个城市,即先将第1只蚂蚁,随机分布于bier127数据库中的第Z1个城市上,再将第r只蚂蚁,随机分布于bier127数据库中的第Zr个市城上,r=2,…,10;

(3.2)计算第一只蚂蚁路径长度:

(3.2a)设蚂蚁循环遍历次数N1=127,即蚂蚁要遍历的次数等于城市的数量127。

(3.2b)第一只蚂蚁访问一遍所有的城市:

(3.2b1)将第1只蚂蚁访问过的城市集设置为集合U,其他未访问的城市集设置为集合A,由状态转移概率公式计算出第1只蚂蚁从当前城市i到集合A中未访问城市j的状态转移概率值Sij

其中,表示为的最大值,τij(t)为t时刻边(i,j)上信息素浓度,参数α表示轨迹相对重要性,ηij(t)表示蚂蚁从城市i到城市j的期望程度,取ηij(t)=1/dij,dij表示城市i和城市j之间的距离,参数β表示能见度的相对重要性,q为(0,1)内服从均匀分布的随机变量,q0=0.4,s表示集合A中未访问的城市,τis(t)为t时刻城市i到城市s上信息素浓度,ηis(t)表示蚂蚁从城市i到城市s的期望程度;

(3.2b2)对集合A中的n个城市分别计算其状态转移概率值,得到状态转移概率集合:S={Si1,Si2…Sij…Sin},其中Sij表示城市i到城市j的状态转移概率值,j=1,2,…,n,n为集合A中未访问的城市的数量,n=1,2,…,127;

(3.2b3)找出状态转移概率集合S中最大值Sik,k=1,2,…,j,则城市k为蚂蚁要移动的一下个城市;

(3.2b4)将第一只蚂蚁移动到城市k,并在集合A中剔除城市k,在集合U中加入城市k,更新集合A和集合U;

(3.2b5)第1只蚂蚁移动到城市k后,蚂蚁返回步骤(3.2b1),继续访问集合A中的第j+1个城市,直到集合A中没有城市,即N1=127,第1只蚂蚁遍历完成;

(3.2c)在第1只蚂蚁遍历完所有城市后,计算第1只蚂蚁所访问城市的路径总长度:其中dij表示第i个城市与第j个城市之间的距离;

(3.3)剩下的9只蚂蚁按照(3.2)方法计算,得路径总长度分别为L2,L3,L4,L5,L6,L7,L8,L9,L10,得到路径总长度集合L={L1,…Lr…L10},其中Lr表示第r个蚂蚁的路径总长度,r=1,2,…,10;

(3.4)找出路径总长度集合L中的最小值Lmin,并将该最小值Lmin赋给最优路径长度Lb

(3.5)更新边(i,j)上的信息素浓度。

τij(t+m)=(1-ρ)·τij(t)+Δτij

其中,τij(t+m)为t+m时刻边(i,j)上的信息素浓度,m=1,2,3…1000,ρ表示信息素挥发系数,1-ρ为信息素残留因子,ρ=0.01,τij(t)为t时刻边(i,j)上信息素浓度,表示在本次循环中边(i,j)上的信息素浓度增量,其中,Lr表示第r只蚂蚁路径总长度,r=1,2,…,10,Q为路径长度参数,Q=1,Lb表示最优路径长度;

(3.6)当完成所有边上信息素浓度更新之后,记录τij(t+m)和最优路径长度Lb,完成第一次循环。

步骤四.循环次数Nc加1,返回步骤三,本次循环完成后,记录本次最优路径长度Lbl,其中Nc=1,2,…,1000,l=1,2,…,1000。

当Nc=1时,计算的最优路径长度为Lb

当Nc=2,…,1000时,最优路径长度Lbl=min{Lb,Lbl},其中min{Lb,Lbl}表示Lb和Lbl中值较小的一个,Lbl为第Nc次循环的最优路径长度。

步骤五.完成循环次数,获得全局最优路径长度Lb1000

判断循环次数Nc,若Nc=1000,循环结束,Lbl000=min{Lb,Lbl000},输出最终的最优路径长度Lb1000

本发明的效果可以通过仿真实验进一步说明:

仿真实验1:分别运用现有基本蚁群算法ACO,蚁群系统算法ACS和本发明方法求解城市坐标数据库eil76的最优路径长度,结果如表1所示。

表1三种方法在城市坐标数据库eil76仿真中得到的最优路径长度

从表1中可以看出,用本发明的方法相比于其他两种方法,在求解城市坐标数据库eil76的最优路径长度时,比现有的两种算法求得的最优路径长度都小,提高了求解的最优路径长度的准确度。

仿真实验2:分别运用现有基本蚁群算法ACO,蚁群系统算法ACS和本发明方法求解城市坐标数据库eil76的最优路径轨迹,结果分别如图2、图3、图4所示。

比较图2、图3和图4,图2所示的基本蚁群算法ACO中获得的最优路径轨迹出现交叉现象,而图3和图4的最优路径轨迹没有出现交叉,但图4所示的用本发明方法获得的最优路径长度比图3所示的蚁群系统算法ACS获得的最优路径长度小,体现了避免陷入局部最优解,提高了求解的最优路径长度的准确度。

仿真实验3:分别运用现有基本蚁群算法ACO,蚁群系统算法ACS和本发明方法求解城市坐标数据库bier127的最优路径长度,结果如表2所示。

表2三种方法在城市坐标数据库bier127仿真中得到的最优路径长度

从表2中可以看出,用本发明的方法相比于其他两种方法,在求解城市坐标数据库bier127的最优路径长度时,比现有的两种算法求得的最优路径长度都小,提高了求解的最优路径长度的准确度。

仿真实验4:分别运用现有基本蚁群算法ACO,蚁群系统算法ACS和本发明方法求解城市坐标数据库bier127的最优路径轨迹,结果如图5、图6、图7所示,其中图5是用现有基本蚁群算法ACO在bier127数据库中找到的最优路径轨迹图;图6是用现有蚁群系统算法ACS在bier127数据库中找到的最优路径轨迹图;图7是用本发明在bier127数据库中找到的最优路径轨迹图。

比较图5、图6和图7可见,图5和图6中最优路径轨迹出现交叉现象,而图7最优路径轨迹没有出现交叉,体现了本发明避免了陷入局部最优解。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1