路径搜索算法基础讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
距离
曼哈顿距离
h(n) = D * (abs ( n.x – goal.x ) + abs ( n.y – goal.y ) )
标准的启发式函数是曼哈顿距离
距离
对角线距离
若直线和对角线的代价都为D h(n) = D * max(abs(n.x - goal.x), abs(n.y - goal.y)) 若直线和对角线的代价不相等,如D2 = sqrt(2) * D h_diagonal(n) = min(abs(n.x - goal.x), abs(n.y - goal.y)) h_straight(n) = (abs(n.x - goal.x) + abs(n.y - goal.y)) h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
有凹型路障的情况对比
Dijkstra算法 最佳优先搜索算法(BFS)
成功找到最短路径
• 运行速度较慢
运行速度较快
• 未能找到最短路径
Dijkstra + BFS → ?
A*算法
f(n) = g(n) + h(n) g(n)表示从初始结点到任意结点n的实际代价 h(n)表示从结点n到目标点的启发式评估代价 每次检查f(n)最小的结点n
基于A*算法的路径搜索
路径搜索
栅格
Dijkstra算法与最佳优先搜索算法
Dijkstra算法
选择距起点最近的点
颜色越淡离初始点越远的 粉色是初始结点 紫色是目标结点 有色区为扫描过的区域
最佳优先搜索算法(BFS)
启发策略 贪心策略 选择距终点最近(启发值 最小)的点 颜色越深启发值越小 粉色是初始结点 紫色是目标结点 有色区为扫描过的区域
距离
欧几里得距离
h(n) = D * sqrt((n.x-goal.x)^2 + (n.y-goal.y)^2)
因为欧几里得距离比曼哈顿距离和对角线距离都短 你仍可以得到最短路径,不过A*将运行得更久一些
A*算法
Hale Waihona Puke Baidu色是初始结点 紫色是目标结点 有色区为扫描过的区域
越黄离目标结点越远,启发代价越高 越蓝离初始结点越远,实际代价越高
启发式函数h(n)扮演着重要的角色
启发式函数h(n)
h(n)越小,A*扩展的结点越多,运行就得越慢。 如果h(n)是0,则只有g(n)起作用,此时A*演变成Dijkstra算法,这保证能找到最短路径 如果h(n)比从n移动到目标的实际代价小(或者相等),则A*保证能找到一条最短路径。 如果h(n)精确地等于从n移动到目标的代价,则A*将会仅仅寻找最佳路径而不扩展别的任何结点。 如果h(n)比从n移动到目标的实际代价高,则A*不能保证找到一条最短路径,但它运行得更快。 如果h(n)比g(n)大很多,则只有h(n)起作用,A*演变成BFS算法。