最短路径算法比较常用的是Dijkstra,A*,Floyd算法,对比一下。
首先,需要构造权重矩阵,每个点到每个点之间的路的权重,可以是距离,或者是时间。这和我们的目标函数对应,时间最短或者路径最短。要找最短路径,初始想法类似穷举,启发函数相当于是导向作用,简单来说,可以用曼哈顿距离之类的。【https://blog.csdn.net/AdamShan/article/details/79945175】
def heuristic(a, b):
# 这种距离叫做曼哈顿距离(Manhattan)
return abs(a.x - b.x) + abs(a.y - b.y)
当然,这种方法存在的问题就是,假如有堵墙呢,导致中间某个时刻的最优解其实是离目标点更远的地方
为了改进单纯的启发式算法,便引进了A*算法。本质上就是对启发函数的改进。
这种A*算法用公式表示为: f(n)=g(n)+h(n),
也就指代这句代码: priority = new_cost + heuristic(goal, next)
其中, f(n) 指当前n点的总代价(也就是priority