A* 启发式搜索,我正在尝试确定启发式
A* Search with heuristics, I am trying to determine the heuristics
我有一个搜索图 v1-v30,V=顶点(节点),我在道路网络旅行商问题上使用顶点之间的时间(以分钟为单位)。
如何确定这些顶点之间的试探法?
我已经起草了一个启发式 table 假设(有根据的猜测)在节点之间花费的时间。
例如:从 v1-v2 我有 20 分钟的时间从 google 地图获取我正在使用的位置。然后我根据纯粹的观察和有根据的猜测使用了 30 分钟的启发式 h(n) 值。
我按照我的方式假设启发式方法是否走在正确的道路上?
还有 A* 是如何处理死角的?
A* 可以很好地处理死胡同。不过,我认为您不应该将该策略用于您的启发式方法。如果你错了(如果由于某种原因你高估了所需的时间),你的 A* 不能保证找到最佳路径。如果您使用的是 Google 地图,则可以使用地图标记
的 lat/long 值从起点到终点的直线距离
关于死胡同,由于 A* 对它猜测需要很长时间才能完成的任何状态给予较低的优先级,具有 current_node = v22
和 prev_node = v20
的状态将具有较低的优先级优先于从未走那条路到死胡同的国家。通过这种方式,A* 算法将优雅地忽略这些死胡同状态。所以你甚至不需要担心自己手动递归备份路径。
我有一个搜索图 v1-v30,V=顶点(节点),我在道路网络旅行商问题上使用顶点之间的时间(以分钟为单位)。
如何确定这些顶点之间的试探法?
我已经起草了一个启发式 table 假设(有根据的猜测)在节点之间花费的时间。
例如:从 v1-v2 我有 20 分钟的时间从 google 地图获取我正在使用的位置。然后我根据纯粹的观察和有根据的猜测使用了 30 分钟的启发式 h(n) 值。
我按照我的方式假设启发式方法是否走在正确的道路上?
还有 A* 是如何处理死角的?
A* 可以很好地处理死胡同。不过,我认为您不应该将该策略用于您的启发式方法。如果你错了(如果由于某种原因你高估了所需的时间),你的 A* 不能保证找到最佳路径。如果您使用的是 Google 地图,则可以使用地图标记
的 lat/long 值从起点到终点的直线距离关于死胡同,由于 A* 对它猜测需要很长时间才能完成的任何状态给予较低的优先级,具有 current_node = v22
和 prev_node = v20
的状态将具有较低的优先级优先于从未走那条路到死胡同的国家。通过这种方式,A* 算法将优雅地忽略这些死胡同状态。所以你甚至不需要担心自己手动递归备份路径。