A-star算法

搜索技术

搜索技术是一种通用的问题求解技术,可以将待解决的问题转化为可搜索的问题空间,然后在该空间中搜索求解。搜索技术在人工智能领域有着非常广泛的应用.

盲目搜索

盲目搜索是最简单的搜索方法,如宽度优先搜索和深度优先搜索,这种搜索方法效率非常低,只适用于非常简单的问题求解。

骑士旅行问题: 我们在6×6的棋盘上用国际象棋中的骑士遍历整个棋盘并回到出发点,这个看似并不复杂的问题如果用盲目搜索求解,可能需要好几天的时间。

启发式搜索

启发式搜索: 通过问题的特征信息引导搜索过程,减小搜索范围,从而提高搜索效率。还以上面提到的骑士旅行问题为例,使用启发式搜索方法,普通笔记本求解只需要20分钟,计算效率得到了几百倍的提升。

A-star算法

A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。

简单例子看启发式搜索

题目
  • 绿色方块是起点,红色方块是终点,蓝色的方块是障碍物,求起点到终点的最短路径。
  • 规则:每次只能移动一格,可以往8个方向移动.
  • 移动水平或竖直方向移动代价为10,斜向移动代价为14.
  • 从起点到终点总的移动代价最小的路径即为最短路径。

分析
  1. 盲目搜索的思路是遍历每一种可能的路径,显然绝大部分路径都是无用的,比如在这个例子中首先往左侧移动是肯定无法得到最短路径的。
  2. A*算法的思路是在所有可能的下一步子结点中进行试探性的搜索,寻找最佳结点。
  3. 判断最佳结点的公式:

    F = G + H
    G表示起点到子结点的代价。
    H表示子结点到终点的预估代价。
    注意这里H是预估代价,我们可以使用曼哈顿距离来计算:

    H = 10( |x
    1-x
    2| + |y
    1-y
    2| )

上图计算了起点的所有子节点的F值(左上角)、G值(左下角)、H值(右下角).

  1. 显然右侧的子结点F值最小,我们把它作为最佳结点A.
  2. 继续下一步的搜索。对于当前节点来说,共有4个可能的子结点,右侧蓝色障碍物无法移动,左侧绿色结点为起点,不必走回头路。经过计算,上方(或下方)的结点的F值最小,可以当作最佳结点B.
  3. 此时我们发现:由结点A到结点B的F值要大于从起点到结点B的F值,我们需要重新选择从起点移动到结点B作为第一步,A*算法就是通过这种原理实现路径的不断优化。

通俗易懂的路径搜索之A-star算法的更多相关文章

  1. 使用A Star 算法实现自动寻路详解

    @ 目录 1.什么是A Start算法 2.A Star算法的原理和流程 2.1 前提 2.1.1 从起点开始扩散的节点 2.1.2 最短距离计算公式:F = G + H 2.1.3 欧几里得距离计算 ...

  2. A Star算法笔记

    回顾A*算法,偶得一源代码,略有瑕疵,改正之,并置于下. using System; using System.Collections.Generic; using System.Linq; usin ...

  3. 十大经典排序算法的JS版

    前言 个人博客:Damonare的个人博客 如遇到问题或有更好的优化方法,可以: 提issue给我 或是pull requests 我都会看到并处理,欢迎Star. 这世界上总存在着那么一些看似相似但 ...

  4. 堪称最好的A*算法(转)

    如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht 中文译文转自:http://blog.c ...

  5. 十大经典排序算法总结(JavaScript描述)

    前言 读者自行尝试可以想看源码戳这,博主在github建了个库,读者可以Clone下来本地尝试.此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:十大经典算法总结 这世界 ...

  6. [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案

    看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...

  7. <转载> 从算法上解读自动驾驶是如何实现的?

     科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...

  8. 最短路问题(dijkstral 算法)(优化待续)

    迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向 ...

  9. hdu 1874 Dijkstra算法

    先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...

  10. JavaScript十大经典排序算法

    排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序: 输入:n个数:a1,a2,a3,…,an输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’ 再讲的形象点就是排排坐 ...

随机推荐

  1. dotnet 谨慎在静态构造函数里使用锁

    在 dotnet 的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用.最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑.本文来 ...

  2. CMDB开发(二)

    一.项目架构:目录规范 # 遵循软件开发架构目录规范 bin 启动文件 src 源文件(核心代码) config 配置文件 lib 公共方法 tests 测试文件 二.采集规范 # bin目录下新建s ...

  3. Oracle、达梦:生成32位字符串(ID)

    15.生成32位字符串 达梦.oracle 函数:sys_guid().newid() 转小写LOWER(char) select rawtohex(sys_guid()); -- 推荐使用newid ...

  4. SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别

    0.参考.业务需求 参考: https://www.cnblogs.com/java-chen-hao/p/11835120.html#_label1 https://zhuanlan.zhihu.c ...

  5. 15、数据库加固-redis 加固

    1.禁止网络访问 Redis 服务 更改配置文件,使服务监听本地回环地址 修改 redis 配置文件:vi 安装路径/redis.conf 确保:bind 127.0.0.1(::1:表示 ipv6 ...

  6. Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析

    内容脚本(Content Scripts) 指定在用户打开某些网页时要使用的 JavaScript 或 CSS 文件. 内容脚本是在网页环境中运行的文件.通过使用标准文档对象模型 (DOM),开发者能 ...

  7. 2022年windows的Visual Studio常用插件及使用手册

    前景提要 Viusual Studio 是一款很好用的C/C++集成开发工具,具有强大的扩展功能,好用的插件,但是,很多人都是只写了有什么插件,但是,没写怎么使用这种插件,使得使用的时候很是不方便,所 ...

  8. gpu机器没有开启ipv6

    参考: https://blog.csdn.net/asdfaa/article/details/137884414 检查系统是否支持 IPv6,查看被禁用了 在启用 IPv6 之前,首先要确保您的系 ...

  9. 13-flask博客项目之restful api详解1-概念

    一 传统的开发模式 前后端分类概念 前端只需要独立编写客户端代码,后端也只需要独立编写服务端代码提供数据接口即可前端通过AJAX请求来访问后端的数据接口,将Model展示到View中即可 前后端开发者 ...

  10. deeplearning4j训练MNIST数据集以及验证

    训练模型官方示例 MNIST数据下载地址: http://github.com/myleott/mnist_png/raw/master/mnist_png.tar.gz GitHub示例地址: ht ...