首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在networkx中使用自定义启发式算法计算A* star?

如何在networkx中使用自定义启发式算法计算A* star?
EN

Stack Overflow用户
提问于 2019-06-09 19:52:39
回答 1查看 1.4K关注 0票数 0

我正在尝试使用自定义启发式方法计算两个节点之间的最短路径长度。启发式方法测量两个节点之间的加权最短路径长度加上最短路径内的节点数。考虑一个交通问题,我需要在城市网络中找到两个城市之间的最短路径。最短路径是具有最小总距离(以天为单位)和城市最小中转次数(以天为单位)的路径。

我正在尝试使用带有a_star_path_length功能的networkx。下面是我已经尝试过的:

代码语言:javascript
复制
def distance(a,b):
    return ( nx.dijkstra_path_length(G,a,b, 'day') + len(nx.dijkstra_path(G, a, b)) )

nx.astar_path_length(G, 'A', 'F', heuristic=distance, weight='day')

假设有6个节点的图中每条边的权重如下:

代码语言:javascript
复制
A,B --> 1 day
B,C --> 1 day
C,D --> 1 day
D,F --> 1 day
A,E --> 4 day
E,F --> 1 day

对于每个被访问的节点,我需要花费1天的时间。

因此,城市A和城市F之间的最短路径如下:A --> E --> F

结果应该是(4 + 1) + (1 + 1) = 7。

路径A-B-C-D-F可以具有最短的距离。但由于中转次数较多,它们不再是最短路径。

我用a_star函数尝试了我的函数,但算法仍然首选A-B-C-D-F,而不是A-E-F。

请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2019-06-09 20:21:02

这里的问题是,您试图修改启发式,而不是实际的图形权重。重要的是,无论启发式是†,它仍然会找到一个权重最小的路径。

解决这个问题的方法是将运输号码并入权重中。

†通常,我认为某些启发式属性是有例外的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56514349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档