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. vue使用echart(地图,弹窗展示多条数据,option定义)

    第二次用echart,第一次做地图, <template> <div class="echarts" style="background:#3bafde ...

  2. Process-与操作系统中的进程进行交互

    1.Process介绍 在Java中,Process类是一个抽象类,它提供了与操作系统中的进程进行交互的方法.当你在Java程序中启动一个新的进程(例如,运行一个外部程序或脚本)时,JVM会创建一个P ...

  3. Codeforces Round 927 (Div. 3) EFG

    E:Link 题意:给定长度小于 \(4 \times 10^5\) 的整数 \(n\),求从 \(0\) 到 \(n\) 各数位变化次数之和. 如:\(n = 12345\) 个位变化 \(1234 ...

  4. 一个在线下载地图XYZ瓦片的网站实现

    1. 什么是XYZ瓦片 XYZ瓦片是一种在线地图数据格式,常见的地图底图如Google.OpenStreetMap 等互联网的瓦片地图服务,都是XYZ瓦片,严格来说是ZXY规范的地图瓦片 ZXY规范的 ...

  5. ruby 常用代码片段

    # 文件的当前目录 puts __FILE__ # string.rb # 文件的当前行 puts __LINE__ # 6 #文件的当前目录 puts __dir__ #/media/haima/3 ...

  6. java8用Stream一行代码实现数据分组统计、排序、最大值、最小值、平均值、总数、合计

    getAverage(): 它返回所有接受值的平均值. getCount(): 它计算所有元素的总数. getMax(): 它返回最大值. getMin(): 它返回最小值. getSum(): 它返 ...

  7. UE4 InstancedStaticMesh使用

    在绘制大批量近似模型时,Unity有GPU Instancing(https://www.cnblogs.com/hont/p/7143626.html),而UE中有 HISM和ISM(Instanc ...

  8. 计算机网络基础 — Linux 虚拟路由器

    目录 文章目录 目录 前文列表 前言 Neutron L3 agent 概述 L3 agent的配置 虚拟路由器实现原理 总结 前文列表 <计算机网络基础 - 以太网> <计算机网络 ...

  9. 你知道 Java 有哪些引用吗?

    前言 判断对象是否要回收有引用计数法和可达性算法两种方式,无论哪种都离不开引用,本文将介绍Java的四种引用. 一.概述 二.详解 1. 强引用 概述 在Java程序中,强引用是最常见的也是默认的.n ...

  10. XML Schema 复杂元素类型详解:定义及示例解析

    在XML Schema(XSD)中,复杂元素是指包含其他元素和/或属性的XML元素.复杂元素可以分为四种类型: 空元素: 仅包含其他元素和/或属性的元素. 仅包含其他元素的元素: 不包含文本内容,只包 ...