一种具有访问优先级约束的旅行商问题优化方法

文档序号:37241316发布日期:2024-03-06 17:09阅读:25来源:国知局
一种具有访问优先级约束的旅行商问题优化方法

本发明涉及旅行商问题求解,特别是涉及一种具有访问优先级约束的旅行商问题优化方法。


背景技术:

1、tsp(旅行商问题)是一种经典的组合优化问题,旨在在给定一组城市和它们之间的距离中找到一条最短路径,使得每个城市仅访问一次,最终回到起始城市。

2、然而,目前用于解决tsp的启发式算法主要依赖生成随机数进行搜索和优化过程,同时需要进行参数调优。这些方法存在一些问题,如:由于搜索过程基于随机性,存在陷入局部最优解的概率;选择适当的参数值需要一定的经验和实验,不同问题可能需要不同的参数设置;初始解的选择对算法性能有显著影响;由于算法的随机性,多次运行同一算法可能导致不同结果,使得结果的稳定性和可复现性变得困难,进而影响算法的准确性和稳定性。

3、其次,在求解tsp的方法中也未考虑解决城市间存在访问优先级约束的情况,而实际情况是,城市的访问顺序往往会受到多种情况的限制,如交通规定、时间窗口、服务顺序等。因此,为了更好地应对这些实际问题,需要一种能够解决具有访问优先级约束的旅行商问题fc-tsp的方法。

4、具有访问优先级约束的旅行商问题fc-tsp是在tsp的框架下,考虑到了每个城市间均存在访问优先级约束的情况下,提出并推广出来的新问题。具体描述如下:给定一个仓库(vd),即旅行商的起点城市和终点城市。规模大小为n的城市集合v={v1,v2,v3,...,vn}(不包括vd),每个城市在城市集中具有特定的名称。旅行商需要从仓库出发,访问集合v中的每一个城市并回到仓库,使得访问距离最小化。在生成满足fc-tsp的最短回路时,需要满足额外的访问优先级约束。


技术实现思路

1、发明目的:本发明的目的是提供一种准确性高、稳定性好的具有访问优先级约束的旅行商问题优化方法。

2、技术方案:为实现上述目的,本发明所述的一种具有访问优先级约束的旅行商问题优化方法,包括以下步骤:

3、步骤1:基于城市集合v={v1,v2,v3,...,vn}、仓库vd的坐标,创建城市间距离矩阵w,基于访问优先级约束机制创建约束序列集c={c1,c2,c3,...,cm};利用约束序列集c中的信息,构建m阶张量met,met中的每个元素称为单元,存放与单元的空间索引相关的城市之间边的信息;

4、步骤2:基于m阶张量met和w,构建m阶张量clt,clt的外部结构与张量met相同,且张量clt在相同位置存放的内容与张量met一一对应,其中张量met中存放边的信息,张量clt则存放与该边相关的累加距离值;

5、步骤3:基于适应度标准评价,从张量clt中筛选出符合具有访问优先级约束的旅行商问题的最小访问距离;

6、步骤4:基于深度优先搜索算法dfs,利用得到的met、clt以及最小访问距离,反向寻找所有与最小访问距离相符的最优路径,通过对最优路径反转,获得具有访问优先级约束的旅行商问题的最优解。

7、步骤1所述的边均为有向边,用eij表示vi到vj的边,且满足eij≠eji;其中,vi、vj表示城市集合v中任意两个城市,i,j∈n,n表示城市集合v中城市总数量,vi为eij的起点城市sv,城市vj为eij的终点城市ev:通过连接有向边,得到从仓库出发途经城市集合v中的所有城市,最终回到仓库的闭合回路;

8、步骤1实现的方法包括以下步骤:

9、步骤101:计算城市集合v中任意两个城市vi、vj之间的距离;

10、步骤102:基于任意两个城市之间的距离计算结果,创建城市间的距离矩阵w;

11、步骤103:基于访问优先级约束机制,创建约束序列集c={c1,c2,c3,...,cm};其中,|ck|表示ck的城市数量;若vx是ck中第i个城市,则ck,i与vx表示同一城市;

12、步骤104:构建一个规模为y的m阶张量met;

13、步骤105:对met中的每个单元进行顺序遍历,每个单元中所有边的不同终点城市ev数量为m个;创建termination_point_list保存m个终点城市ev;

14、步骤106:遍历termination_point_list中的每个终点城市ev,创建ventor_list_x以保存所有终点城市ev为vx,即遍历到termination_point_list中的vx的边;

15、ventor_list_x包括两个部分,第一部分包含m-1个边,这些边以termination_point_list中除vx外,其余所有城市分别为起点城市sv,vx为终点城市ev的边;第二部分包含1个边,以vx所在的约束序列中vx的前一个城市为起点城市sv,vx作为终点城市ev的边;将这两部分合并,得到ventor_list_x中的所有的m个边;

16、步骤107:将步骤106重复执行m次,获得met中一个单元中所有的m*m个边;

17、步骤108:根据每条边中的起点城市sv所在的约束序列的编号作为纵坐标,终点城市ev所在的约束序列的编号作为横坐标的规定,重新组织张量met中一个单元中的m*m个边,形成一个m*m的矩阵,并将其存入单元中;

18、步骤109:将步骤105-s108重复执行y次,获得一个完整的m阶张量met。

19、步骤101所述的城市vi和城市vj之间距离的计算公式为:

20、

21、式中,(xi,yi),(xj,yj)分别为vi、vj的横纵坐标;

22、步骤104所述的规模大小y为:

23、

24、式中,m表示约束序列集中约束序列的个数,ci表示第i个约束序列中的城市个数;

25、步骤109所述的张量met表示为:

26、

27、式中,[l1,l2,l3,...,lm]表示张量met中单元的空间索引,这个单元中以矩阵的形式存放数据,[x,y]表示此矩阵的坐标,这个坐标中存放边,表示第x个约束序列中第lx个位置的城市。

28、步骤2实现的方法包括以下步骤:

29、步骤201:构建一个与met规模大小相同的m阶张量clt,用来保存边的累加距离值;

30、步骤202:对张量clt中的每个单元进行顺序遍历,利用距离矩阵w中城市间的距离信息,确保张量met与clt在相同索引的单元中的相同坐标存放的分别是边和该边对应的距离;

31、步骤203:从张量met中依次选取一个单元,遍历单元中的每一条边,通过当前边所在单元的空间索引和在单元中矩阵的坐标信息,推断出与当前边相连的前一条边所在的单元以及在该单元中矩阵中的横坐标;通过推断出来的单元中的一行的所有边的终点城市ev与当前边的起点城市sv相同,创建previous_accumulation_list以存放这行边在张量clt中相同位置对应的边的累加距离值;

32、步骤204:从previous_accumulation_list中选择最小值,将最小值与当前边距离相加,获得累加距离值,并存放到张量clt中,且存放的位置与张量met中当前边存放的位置的相同;

33、步骤205:将步骤203-步骤204重复执行m*m次,获得张量clt中一个单元的所有边的累加距离值;

34、步骤206:将步骤202-步骤205重复执行y次,获得一个完整的m阶张量clt。

35、步骤204所述累加距离值的计算公式为:

36、

37、式中,表示在张量clt中,空间索引为[l1,l2,l3,...,lx-1,...,lm]的单元中坐标为[x,y]的位置上存放的与在张量met中相同位置的边对应的累加距离值;表示城市与之间的距离;z∈{l1,l2,l3,...,lx-1,...,ly-1...,lm};

38、步骤206所述的张量clt表示为:

39、

40、式中,clt[l1,l2,l3,...,lm][x,y]表示在张量clt中,空间索引为[l1,l2,l3,...,lm]的单元中矩阵坐标为[x,y]的位置上存放的边的累加距离值。

41、步骤3所述从张量clt中筛选出符合具有访问优先级约束的旅行商问题的最小访问距离,实现方法包括以下步骤:

42、步骤301:创建final_summation_list,用以将通过张量clt中最后一个单元获得的m*m个累加求和值先行后列依次保存;创建final_city_list,用以将基于张量met中最后一个单元获得的m*m个边的终点城市ev先行后列依次保存;

43、步骤302:同时顺序遍历final_summation_list和final_city_list,将final_summation_list的值和final_city_list中所对应的城市与仓库之间的距离的两个值进行相加,将相加结果依次存入创建的final_lenth_list中;

44、步骤303:基于适应度标准评价,选取final_lenth_list中的最小值作为具有访问优先级约束的旅行商问题寻找的最小访问距离,并记录最小值所在final_lenth_list中的下标位置为min_locate。

45、步骤303所述最小访问距离的计算公式为:

46、

47、式中,vd表示为仓库,表示final_city_list[i]的城市和仓库的距离。

48、步骤4实现的方法包括以下步骤:

49、步骤401:创建一个finding_path_list和一个final_path_list,分别用来存储局部路径和最终的完整路径;

50、基于最小值所在final_lenth_list中的下标位置为min_locate对m进行除法操作,得到商a和余数b,确定在张量clt和met中寻找路径的起始位置,即最后一个单元的坐标为(a,b);

51、步骤402:基于边所在单元的空间索引信息和单元中的坐标信息,推断出当前边前一条边所在的单元的空间索引信息和坐标信息中的行坐标;

52、通过张量clt当前边的累加距离值减去该边的距离得到的数值,在这一行中查找与该值相同的值,从而确定找到的前一条边的坐标信息中的纵坐标;

53、找到的前一条边的终点城市ev添加到当前正在回溯的局部路径中;当张量clt的当前边的累加距离值减去该边的距离得到的数值在这一行中查找到k个累加距离值与该值相同时,将已找到的局部路径复制k份存入finding_path_list中,并继续回溯final_length_list中的第一条局部路径;

54、步骤403:将步骤402重复进行n次,最后加上仓库,得到一条完整的回路;在finding_path_list中删去该条路径,在final_path_list添加该条路径;

55、步骤404:将步骤402-s403重复进行,直至finding_path_list中不存在局部路径;此时,final_path_list中包含所有与最小访问距离相对应的所有的路径;

56、步骤405:将final_path_list的所有的路径进行反转,得到所有的最优路径。

57、步骤402所述通过clt当前边的累加距离值减去该边的距离得到的数值,在这一行中查找与该值相同的值,从而确定找到的前一条边的坐标信息中的纵坐标的公式为:

58、

59、式中,表示clt中空间索引为[l1,l2,l3,...,lx-1,...,lm]的单元中矩阵坐标为[x,y]的位置上存放的与在张量met中相同位置的边对应的累加距离值,表示城市与之间的距离。

60、步骤4所述的找到最优解,是基于确定的最小访问距离的基础上,利用深度优先搜索算法dfs以向前搜索边的方式连接相邻的边,最终形成具有访问优先级约束的旅行商问题的完整回路;通过这一过程,获得具有访问优先级约束的旅行商问题的最小访问距离以及与最小访问距离相对应的所有最优路径,即最优解。

61、步骤4所述的找到最优解,是基于确定的最小访问距离的基础上,利用深度优先搜索算法dfs以向前搜索边的方式连接相邻的边,最终形成具有访问优先级约束的旅行商问题的完整回路;通过这一过程,获得具有访问优先级约束的旅行商问题的最小访问距离以及与最小访问距离相对应的所有最优路径,即最优解。

62、有益效果:本发明具有如下优点:1、本方法通过构建多阶张量高效存储有效的边和累加距离,从而避免了大量的无效搜索,提高了搜索效率,实现对全约束旅行商问题的全面搜索和优化求解;

63、2、本方法弥补了传统旅行商tsp未考虑城市间存在访问优先级约束的不足,在求解具有访问优先级约束的旅行商问题过程中更加可靠、全面,不仅确保找到最小访问距离,还能够找到全部的最优路径,同时避免了启发式算法寻找最优解存在的容易陷入局部最优、不稳定等问题;

64、3、本方法通过深度优先搜索算法反向寻找所有与最小访问距离相符的最优路径,优化了不必要的计算,同时保持了寻找最优解的能力,能够更加高效和有效地解决具有访问优先级约束的旅行商问题。

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