通俗易懂的路径搜索之A-star算法
A-star算法
搜索技术
搜索技术是一种通用的问题求解技术,可以将待解决的问题转化为可搜索的问题空间,然后在该空间中搜索求解。搜索技术在人工智能领域有着非常广泛的应用.
盲目搜索
盲目搜索是最简单的搜索方法,如宽度优先搜索和深度优先搜索,这种搜索方法效率非常低,只适用于非常简单的问题求解。
骑士旅行问题: 我们在6×6的棋盘上用国际象棋中的骑士遍历整个棋盘并回到出发点,这个看似并不复杂的问题如果用盲目搜索求解,可能需要好几天的时间。
启发式搜索
启发式搜索: 通过问题的特征信息引导搜索过程,减小搜索范围,从而提高搜索效率。还以上面提到的骑士旅行问题为例,使用启发式搜索方法,普通笔记本求解只需要20分钟,计算效率得到了几百倍的提升。
A-star算法
A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。
简单例子看启发式搜索
题目
- 绿色方块是起点,红色方块是终点,蓝色的方块是障碍物,求起点到终点的最短路径。
- 规则:每次只能移动一格,可以往8个方向移动.
- 移动水平或竖直方向移动代价为10,斜向移动代价为14.
- 从起点到终点总的移动代价最小的路径即为最短路径。

分析
- 盲目搜索的思路是遍历每一种可能的路径,显然绝大部分路径都是无用的,比如在这个例子中首先往左侧移动是肯定无法得到最短路径的。
- A*算法的思路是在所有可能的下一步子结点中进行试探性的搜索,寻找最佳结点。
- 判断最佳结点的公式:
F = G + H
G表示起点到子结点的代价。
H表示子结点到终点的预估代价。
注意这里H是预估代价,我们可以使用曼哈顿距离来计算:H = 10( |x
1-x
2| + |y
1-y
2| )

上图计算了起点的所有子节点的F值(左上角)、G值(左下角)、H值(右下角).
- 显然右侧的子结点F值最小,我们把它作为最佳结点A.
- 继续下一步的搜索。对于当前节点来说,共有4个可能的子结点,右侧蓝色障碍物无法移动,左侧绿色结点为起点,不必走回头路。经过计算,上方(或下方)的结点的F值最小,可以当作最佳结点B.
- 此时我们发现:由结点A到结点B的F值要大于从起点到结点B的F值,我们需要重新选择从起点移动到结点B作为第一步,A*算法就是通过这种原理实现路径的不断优化。
通俗易懂的路径搜索之A-star算法的更多相关文章
- 使用A Star 算法实现自动寻路详解
@ 目录 1.什么是A Start算法 2.A Star算法的原理和流程 2.1 前提 2.1.1 从起点开始扩散的节点 2.1.2 最短距离计算公式:F = G + H 2.1.3 欧几里得距离计算 ...
- A Star算法笔记
回顾A*算法,偶得一源代码,略有瑕疵,改正之,并置于下. using System; using System.Collections.Generic; using System.Linq; usin ...
- 十大经典排序算法的JS版
前言 个人博客:Damonare的个人博客 如遇到问题或有更好的优化方法,可以: 提issue给我 或是pull requests 我都会看到并处理,欢迎Star. 这世界上总存在着那么一些看似相似但 ...
- 堪称最好的A*算法(转)
如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht 中文译文转自:http://blog.c ...
- 十大经典排序算法总结(JavaScript描述)
前言 读者自行尝试可以想看源码戳这,博主在github建了个库,读者可以Clone下来本地尝试.此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:十大经典算法总结 这世界 ...
- [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案
看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...
- <转载> 从算法上解读自动驾驶是如何实现的?
科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...
- 最短路问题(dijkstral 算法)(优化待续)
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向 ...
- hdu 1874 Dijkstra算法
先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...
- JavaScript十大经典排序算法
排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序: 输入:n个数:a1,a2,a3,…,an输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’ 再讲的形象点就是排排坐 ...
随机推荐
- MAUI 已知问题 PathFigureCollectionConverter 非线程安全
在 MAUI 里,可以使用 PathFigureCollectionConverter 将 Path 字符串转换为 PathFigureCollection 对象,从而实现从 Path 字符串转换为路 ...
- GitHub 的 Action 判断仅在主仓库才执行脚本
我有一个 GitHub 项目,这个项目配置了仅需要在源仓库才能执行的 Action 如推送 NuGet 等发布动作.如何在 Action 里面设置让 Fork 的仓库不执行 Action 的步骤 想要 ...
- RK 平台安装 ubuntu 系统
一.简介 之前有介绍到 ARM 平台移植 ubuntu 的操作流程,在 RK 系列的平台同样适用,所以这里就不介绍怎么一步步的去对 ubuntu 进行移植,而是怎么将移植的过程编写成脚本,这样便可以在 ...
- blazor中的PageTitle输出keywords和description,自定义组件
在blazor的PageTitle中不具备输出keywords和description的功能,而如果直接使用<mate>标签,输出中文时会变成乱码,所以我给大家推介下面的代码解君愁: 1 ...
- docker-compose 安装 mysql:5.7.31
目录 一.新建一个启动服务的目录 二.新建文件docker-compose.yml 三.新建角本文件 init-mysql.sh 四.实使化目录和配置文件 启动服务 登陆mysql 其它操作 参考文档 ...
- 一篇文章让你掌握99%的Python运算符。干货很多,建议收藏!!!
Python 中的运算符是编程中的基础概念,用于执行各种操作和数据计算.以下是一些 Python 中的主要运算符的概述: 运算符 1. 算术运算符 算术运算符语法规则 +:加法 -:减法 *:乘法 / ...
- C#.Net筑基-基础知识
01.C#基础概念 1.1.C#简介 C# (读作C Sharp)是由微软公司开发的一种面向对象.类型安全.高效且简单的编程语言,最初于 2000 年发布,并随后成为 .NET 框架的一部分.所以学习 ...
- Teamviewer 再次涨价,太贵了,有没有平替软件?
今天打开 Teamviewer 网站,吓一跳,商业版基础款价格直接翻倍. 作为行业龙头,又是德国产品,Teamviewer 一直保持着高价格的特色.这两年 Teamviewer 的价格还逐年上涨,从每 ...
- 服务器电源管理(Power Management States)
目录 文章目录 目录 EIST(智能降频技术) 硬件 固件 操作系统 EIST(智能降频技术) EIST 能够根据不同的 OS(操作系统)工作量自动调节 CPU 的电压和频率,以减少耗电量和发热量.它 ...
- AIRIOT物联网低代码平台如何配置OPC DA驱动?
AIRIOT物联网低代码平台提供了丰富的驱动,兼容了市面上95%以上的传感器.控制器及数据采集设备等,并且在持续增加中,能够快速.便捷地实现数据采集与控制功能. AIRIOT物联网低代码平台如何配置O ...