最优路径搜索方法及系统
技术领域
本发明涉及路径搜索技术,具体涉及一种最优路径搜索方法及系统。
背景技术
自动寻路是网络游戏内玩家的一种基本需求,玩家只需要用鼠标选择地图上的一个目标节点,计算机通过寻路算法,搜索到一条最短的路径,引导角色通过这条路径走到目标节点。
搜索最优的路径往往需要计算机进行一段长时间的计算。在现有技术中,常用的最短路径搜索算法有深度优先和广度优先两种,它们的特点是在给定的空间中进行穷举,当空间非常大时,这两种方法的效率就非常低,需要花费很长时间。
网络游戏中常用的是A-Star算法,它对每一个搜索的节点进行评估,得到“最好的节点”,再从这个节点进行搜索直到目标。这样可以省略大量无用的搜索路径,提高了效率。A-Star算法的公式是:f(n)=g(n)+h(n),其中,f(n)是节点n从初始节点到目标节点的估价函数,g(n)是在状态空间中从初始节点到节点n的实际代价,h(n)是从节点n到目标节点最佳路径的估计代价。h(n)用权值来估算,若h(n)越小,f(n)就越小,则节点n越有可能是“最好节点”。
现有A-Atar算法仍然存在以下缺点:
1.灵活性差:该算法直接固化在游戏程序中,所以对游戏内所有地图的处理都是一样的。地图中所有节点的权值只有两种:连通(权值为0),阻挡(权值为1),0表示游戏角色行走时可以经过这些节点,1表示该节点有障碍,不能经过。
2.效率低:对于每一个权值为0的节点,A-Star算法根据程序内已经写好的固定的估价函数对他们进行评估,选择最好节点。这样要遍历搜索的节点仍然很多,效率不高。
发明内容
本发明实施例提供一种最优路径搜索方法及系统,以提高路径搜索的灵活性及效率。
为此,本发明实施例提供如下技术方案:
一种最优路径搜索方法,包括:
设置地图中角色可以通过的节点的权值;
在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价;
选取所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点。
优选地,所述设置地图中角色可以通过的节点的权值包括:
控制所述地图中角色移动到所述角色可以通过的节点的位置;
触发所述节点的位置进入编辑状态;
根据所述节点的位置设置所述节点的权值;
将所述节点的位置信息及权值信息映射到对应所述地图的阻挡图中。
优选地,所述触发所述节点的位置进入编辑状态包括:
通过快捷键触发所述节点的位置进入编辑状态。
优选地,所述阻挡图为像素图,所述地图中的每个节点与对应所述地图的像素图中的一个像素点对应,不同权值的节点对应的像素点的颜色不同。
可选地,所述根据所述节点的位置设置所述节点的权值包括:
如果所述节点的位置在最优路径上,则将所述节点的权值设置为小于0;否则,将所述节点的权值设置为0。
可选地,所述权值小于0;所述根据所述节点的位置设置所述节点的权值包括:
如果所述节点的位置在最优路径上,则将所述节点的权值设置为最小。
优选地,所述根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价包括:
根据所述初始节点到所述相邻节点的实际代价、所述相邻节点到所述目标节点最佳路径的估计代价、以及所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价。
一种最优路径搜索系统,包括:
设置单元,用于设置地图中角色可以通过的节点的权值;
搜索单元,用于在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价;
选取单元,用于选取所述搜索单元得到的所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点。
优选地,所述设置单元包括:
控制子单元,用于控制所述地图中角色移动到所述角色可以通过的节点的位置;
触发子单元,用于触发所述节点的位置进入编辑状态;
编辑子单元,用于根据所述节点的位置设置所述节点的权值;
映射子单元,用于将所述节点的位置信息及权值信息映射到对应所述地图的阻挡图中。
优选地,所述触发子单元,具体用于通过快捷键触发所述节点的位置进入编辑状态。
优选地,所述阻挡图为像素图,所述地图中的每个节点与对应所述地图的像素图中的一个像素点对应,不同权值的节点对应的像素点的颜色不同。
可选地,所述编辑子单元,具体用于在所述节点的位置在最优路径上时,将所述节点的权值设置为小于0;否则,将所述节点的权值设置为0。
可选地,所述权值小于0;编辑子单元,具体用于在所述节点的位置在最优路径上,将所述节点的权值设置为最小。
优选地,所述搜索单元,具体用于在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述初始节点到所述相邻节点的实际代价、所述相邻节点到所述目标节点最佳路径的估计代价、以及所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价。
本发明实施例最优路径搜索方法及系统,通过设置地图中角色可以通过的节点的权值,使计算机在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价,选取所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点,也就是说,使计算机能得到正确的引导,快速、高效地搜索到最优路径。
附图说明
图1是现有游戏中的一张地图的示意图;
图2是利用现有A-Star算法在图1所示地图中得到的路径示意图;
图3是本发明实施例最优路径搜索方法的流程图;
图4是本发明实施例最优路径搜索方法在图1所示地图中得到的路径示意图;
图5是本发明实施例中设置节点的权值的一种流程图;
图6是本发明实施例最优路径搜索系统的一种结构示意图;
图7是本发明实施例中设置单元的一种结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明实施例的方案,下面结合附图和实施方式对本发明实施例作进一步的详细说明。
首先,对现有的A-Star寻路原理做简单说明。
假设图1是游戏中的一张地图,其中空白部分是游戏中的道路,游戏角色可以自由通过,斜线填充的部分为游戏中的建筑物(即阻挡),游戏角色不可以自由通过。游戏角色需要从A点出发,向东行走,然后向南拐弯一次,最终到达目标节点D。
在现有的A-Star算法中,系统会根据A-Star算法遍历A点周围的八个节点,如图2中所示的节点s1~s8,选择接下来该走到哪一个节点。
A-Star算法公式如下:
f(n)=g(n)+h(n) (1)
其中,f(n)是节点n从初始节点到目标节点的估价函数,g(n)是在状态空间中从初始节点到节点n的实际代价,h(n)是从节点n到目标节点最佳路径的估计代价。
上述g(n)和h(n)可以是自定义函数,具体可以根据节点n与初始节点和目标节点的距离来计算,也可以根据节点n的权值来计算。
现有技术中,寻路过程如下:
如图2所示,根据上面的公式(1)。g(s1)~g(s8)都为1,即A点到达节点s1~s8的实际代价都为1,但是h(s1)~h(s8)中,显然节点s4距离D点的直线距离比其他7个节点都要短,所以节点s4是所有八个节点中代价最小的。节点s4从初始节点到目标节点的估价函数为:
f(s4)=g(s4)+h(s4)=1+h(s4)(2)
经过这样一轮的计算后,系统会选择节点s4作为下一步要到达的点。
同理,对于节点s4,系统同样需要遍历它周围的八个节点,按照上面的计算方式,最终会选择节点r1为下一步要到达的点。
以此类推,最终系统会得出A->s4->r1->...->r6->D这样的路径,如图2中带底色部分所示。
由图2中所示的路径可以看出,按照现有的A-Star算法,得到的路径是沿着道路的边缘,反映在游戏界面中,游戏角色是沿着道路的边缘在行走,这样不够美观,如果阻挡建筑物突出的棱角较多,会出现某节点计算各估价值出现相同值,或者应走的路径的f值过小的情况,这样会导致角色被卡死在棱角处,无法灵活地使游戏角色行走自如,比如沿着道路走。而且,现有的A-Star算法对所有节点的处理都是相同的,由于需要遍历的节点很多,不仅效率低,而且灵活性差。
为此,本发明实施例最优路径搜索方法及系统针对上述问题,在制作网络游戏中的地图时,通过在地图中插入一些权值更低的节点,在利用A-Star算法进行寻路时,可以得到正确的引导,优先选择这些权值更低的节点进行搜索,快速计算出最优路径。
如图3所示,是本发明实施例最优路径搜索方法的流程图,包括以下步骤:
步骤301,设置地图中角色可以通过的节点的权值。
该设置过程可以通过计算机预先完成,具体实现过程可根据所述地图所应用的环境来确定。
比如,对于网络游戏中的地图,可以在开发调试环境下,登录一个游戏角色,通过控制所述角色移动到相应的节点位置来设置所述节点的权值,当然,也可以通过其它方式来选择要设置权值的节点,比如,通过鼠标光标的点选;通过统计无阻挡区域的中轴线位置坐标,每张地图形成一个中轴线路径节点集合。
在本发明实施例中,可以将地图中角色不能通过的节点的权值设置为与现有技术相同,即权值为1,将地图中角色可以通过的节点的权值设置为小于或等于0。
比如,如果所述节点的位置在最优路径上,则将所述节点的权值设置为小于0;否则,将所述节点的权值设置为与现有技术相同,即权值为0。在这种情况下,角色可以通过的节点的权值可以只有两个值。
再比如,如果所述节点的位置在最优路径上,则将所述节点的权值设置为最小。在这种情况下,角色可以通过的节点的权值可以在一定范围内变化,比如权值的范围为(-7~-1)。设置不同权值,可以逐步引导角色寻路,使得角色选择路径更智能化。
当然,还可以采用其它设置方式,只要使最优路径上的节点的权值小于非最优路径上的节点的权值,即可保证在后续进行最优路径搜索时,能够快速地搜索到最优路径。
步骤302,在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价。
具体地,可以按照以下公式计算所述相邻节点中各节点n从初始节点到目标节点的估计代价f(n):
f(n)=g(n)+h(n)+v(n) (3)
其中,g(n)是所述初始节点到节点n的实际代价,h(n)是从节点n到所述目标节点最佳路径的估计代价,v(n)是节点n的权值。
上述g(n)、h(n)的计算与现有的A-Star算法中相同,具体可以根据节点n与初始节点和目标节点的距离来计算,在此不再详细描述。
当然,如果定义g(n)、h(n)的计算需要考虑节点的权值,则在本发明实施例中,在进行最优路径搜索时,也可以按照现有的估价函数即前面提到的公式(1)来计算所述相邻节点中各节点n从初始节点到目标节点的估计代价,对此本发明实施例不做限定。
步骤303,选取所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点。
下面同样以图1所示地图为例,举例说明利用本发明实施例最优路径搜索方法进行最优路径搜索的过程。
同样,假设游戏角色需要从A点出发,最终到达目标节点D。
为了使游戏角色在地图界面上能够沿着道路的中轴线移动,即按照S->s3->d1->d2->...->d8->D这样的路径来行走,则如图4所示,可以将路径S->s3->d1->d2->...->d8->D上各节点的权值设为-5,而游戏角色可以自由通过的其它节点的权值设为0。
在进行最优路径搜索时,系统遍历A点周围的八个节点,如图4中所示的节点s1~s8,选择接下来该走到哪一个节点。
由于g(s1)~g(s8)都为1,即A点到达节点s1~s8的实际代价都为1,而v(s3)=-5,v(s4)=0,因此,按照上述公式(3),可以得到:
f(s3)=g(s3)+h(s3)+v(s3)=1+h(s3)+(-5);
f(s4)=g(s4)+h(s4)+v(s4)=1+h(s4)+0。
由于h(s3)和h(s4)相差不大,因此f(s3)的值要比f(s4)的值小。因此,系统会优先选择节点s3点作为下一个点。
同理,对于节点s3,系统同样需要遍历它周围的八个点,按照上面的计算方式,最终会选择节点d1作为下一步要到达的点。
依此类推,最终系统会选择A->s3->d1->...d4->d6->d7->d8->D作为寻路的结果,从而达到期望的游戏角色走在道路中间的目的。
可见,本发明实施例最优路径搜索方法,通过设置地图中角色可以通过的节点的权值,使计算机在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价,选取所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点,也就是说,使计算机能得到正确的引导,快速、高效地搜索到最优路径。
需要说明的是,本发明实施例最优路径搜索方法可以应用于针对各种地图上路径的搜索,比如,网络游戏地图、导航电子地图、景区电子地图等。
比如,对于一款网络游戏,往往会有几十张地图,每张地图的地形都各不相同,因此,利用本发明实施例的方法,可以根据每一张地图的地形特点,将希望游戏角色通过的最优路径上的节点的权值设置为较低权值,可以保证每一张地图最优路径搜索的高效性。
再比如,对于导航电子地图,可以根据各路段实时拥堵信息,将拥堵路段上的节点的权值设置为较高权值,从而可以使导航系统自动、快速地计算出最优路径,避开拥堵路段。
再比如,对于景区电子地图,可以将各景点作为路径中的节点,根据不同景点的位置及游客选择的游览顺序设置不同节点的权值,从而为游客提供最优游览路径。
前面提到,在本发明实施例中,可以通过控制地图中角色的移动来设置节点的权值,下面对此详细说明。
如图5所示,是本发明实施例中设置节点的权值的一种流程图,包括以下步骤:
步骤501,控制所述地图中角色移动到所述角色可以通过的节点的位置。
步骤502,触发所述节点的位置进入编辑状态。
具体地,可以通过快捷键触发所述节点的位置进入编辑状态。比如,快捷键F1,也可以是其它快捷键。
当然,也可以通过鼠标点选的方式触发所述节点的位置进入编辑状态。比如,先将鼠标光标移动到相应的位置,然后,点击左键进入对所述位置的编辑状态。
在所述编辑状态下,可以通过不同的快捷键完成一系列的编辑操作,比如,可以有以下操作:
F1:关闭编辑节点;
F2:设置权值的大小;
F3:设置编辑的范围,比如设置范围为3,则和角色距离为3以内的所有节点都会被设置权值。可以编辑角色所在位置的权值,如果角色移动,则该角色所经过的所有节点都会设置上相应的权值;
F4:删除角色所在位置的权值;
F5:保存编辑过的节点;
F6:显示编辑的所有节点。
在具体应用时,还可以在触发所述节点的位置进入编辑状态后,在当前界面中(比如,窗口最下方等位置)显示上述各种操作的提示,以方便开发设计人员的设置操作。
步骤503,根据所述节点的位置设置所述节点的权值。
具体地,可以根据所述节点的位置是否在期望的最优路径上来设置该节点的权值。比如,如果所述节点的位置在最优路径上,则将所述节点的权值设置为小于0;否则,将所述节点的权值设置为0。或者,如果所述节点的位置在最优路径上,则将所述节点的权值设置为最小。
当然,期望的最优路径可以根据各地图中的实际地形及环境来确定,并不仅限于前面提到的设置在道路中间。
步骤504,将所述节点的位置信息及权值信息映射到对应所述地图的阻挡图中。
可以控制角色在地图中不同节点间移动,则通过上述过程,角色所经过的所有节点都可以设置上相应的权值。
在本发明实施例中,所述阻挡图可以是像素图,其中保存了对应的地图中所有节点的权值信息,所述地图中的每个节点与对应所述地图的像素图中的一个像素点对应。当然,所述阻挡图也可以是其它格式,比如,可以将txt文件格式,文件中记录每个点的坐标和权值。
为了使所述阻挡图中各权值的显示更清楚、直观,可以通过不同的颜色来表示不同的权值,也就是说,不同权值的节点对应的像素点的颜色不同。
比如,阻挡图中建筑物为红色,可行走区域为黑色,设置的节点有黄色、绿色、蓝色。其中,按照权值大小,降序排列为黄色、绿色、蓝色。
利用上述设置方式,可以使网络游戏的开发更灵活方便,比如,可以不需要程序开发人员,而是由策划或其他非专业人员就能完成节点权值的设置,而且,每一个节点权值的设置只需要通过简单的键盘快捷键的操作即可完成。另外,地图中每个节点权值的设置可根据地形及周围环境灵活设置,从而使系统在进行路径搜索计算时,能够快速、高效地搜索到期望的最优路径。
相应地,本发明实施例还提供一种最优路径搜索系统,如图6所示,是该系统的一种结构示意图。
在该实施例中,所述系统包括:
设置单元601,用于设置地图中角色可以通过的节点的权值;
搜索单元602,用于在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价;
选取单元603,用于选取所述搜索单元得到的所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点。
在本发明实施例中,设置单元601可以向用户提供设置接口,使用户通过该接口设置地图中角色可以通过的节点的权值。具体地,通过设置单元601,可以将地图中角色不能通过的节点的权值设置为与现有技术相同,即权值为1,将地图中角色可以通过的节点的权值设置为小于或等于0。
比如,如果所述节点的位置在最优路径上,则将所述节点的权值设置为小于0;否则,将所述节点的权值设置为与现有技术相同,即权值为0。在这种情况下,角色可以通过的节点的权值可以只有两个值。
再比如,如果所述节点的位置在最优路径上,则将所述节点的权值设置为最小。在这种情况下,角色可以通过的节点的权值可以在一定范围内变化,比如权值的范围为(-7~-1)。
当然,还可以采用其它设置方式,只要使最优路径上的节点的权值小于非最优路径上的节点的权值,即可保证在后续进行最优路径搜索时,能够快速地搜索到最优路径。
所述搜索单元602在进行最优路径搜索时,需要遍历当前节点周围的相邻节点,然后按照前面所述的公式(3)计算所述相邻节点中各节点n从初始节点到目标节点的估计代价,具体过程可参照前面的描述,在此不再赘述。
本发明实施例最优路径搜索系统,通过设置地图中角色可以通过的节点的权值,使计算机在进行最优路径搜索时,遍历当前节点周围的相邻节点,并根据所述相邻节点的权值计算所述相邻节点从初始节点到目标节点的估计代价,选取所述相邻节点中估计代价最小的一个节点作为所述最优路径的下一个节点,也就是说,使计算机能得到正确的引导,快速、高效地搜索到最优路径。
在本发明实施例中,所述设置单元可以通过多种方式实现,比如,通过控制地图中的一个角色移动到相应的节点位置来设置所述节点的权值,当然,也可以通过其它方式来选择要设置权值的节点,比如,通过鼠标光标的点选。
如图7所示,是本发明实施例中设置单元的一种结构示意图。
在该实施例,所述设置单元包括:
控制子单元701,用于控制所述地图中角色移动到所述角色可以通过的节点的位置;
触发子单元702,用于触发所述节点的位置进入编辑状态;
编辑子单元703,用于根据所述节点的位置设置所述节点的权值;
映射子单元704,用于将所述节点的位置信息及权值信息映射到对应所述地图的阻挡图中。
在该实施例中,所述触发子单元702可以通过快捷键触发所述节点的位置进入编辑状态。当然,也可以通过其它方式触发所述节点的位置进入编辑状态。
所述编辑子单元703可以在所述节点的位置在最优路径上时,将所述节点的权值设置为小于0;否则,将所述节点的权值设置为0。或者,在所述节点的位置在最优路径上,将所述节点的权值设置为最小。当然,地图中每个节点权值的设置可根据地形及周围环境灵活设置,从而使系统在进行路径搜索计算时,能够快速、高效地搜索到期望的最优路径。
在本发明实施例中,所述阻挡图可以是像素图,其中保存了对应的地图中所有节点的权值信息,所述地图中的每个节点与对应所述地图的像素图中的一个像素点对应。当然,所述阻挡图也可以是其它格式,比如,可以将txt文件格式,文件中记录每个点的坐标和权值。
为了使所述阻挡图中各权值的显示更清楚、直观,可以通过不同的颜色来表示不同的权值,也就是说,不同权值的节点对应的像素点的颜色不同。
利用本发明实施例最优路径搜索系统,可以简单、方便地设置地图中角色可以通过的节点的权值,将期望的最优路径上的节点设置较低的权值,从而使系统在计算最优路径时,可以得到正确的引导,快速计算出最优路径。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本发明实施例进行了详细介绍,本文中应用了具体实施方式对本发明进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及设备;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。