zoukankan      html  css  js  c++  java
  • AI之A*算法

    什么是寻径算法
    寻找当前点到目标点的一条路径。比如从A点到B点,其中要绕过这两点之间的障碍物(比如绕过山 / 河等不能移动的),我们就需要一个适合的路径规划的寻路算法。其中A*寻路已经是比较成熟的一种可以解决固定障碍的寻径算法。
    战术性寻路,相对比上一种寻路相对复杂,比如说避开敌人攻击区的路线,避开地面雷达的飞行路线等。
    避开动态的障碍,常用的算法有如Flocking算法,用合力的方式计算朝向与速度,可以将角色分为三个基本行为:聚集 / 分散 / 列队去解决,这一算法用的非常广。更加复杂的算法如RVO算法。
    AI的实现也是一个非常复杂的一个过程,不仅仅在算法上其中后期的各项数值的调试迭代磨合也是非常需要耐心的。

    A*算法实现
    开启列表:待检查的方格列表,寻找周围可达的点并加入此列表,并将此中心点保存为父节点。
    关闭列表:保存不需要再进行检查的方格的列表。

    路径评分
    G 与起始点的距离
    H  与目标点的距离
    F值是G和H的各,其中F / G 和 H 评分被写在每个方格中。
    (注:F被打印在中间,G在左上角,H则在右上角)
    等式:F=G+H

    添加起始点到开始集合中
    1,在开启列表最小的点为当前点,将当前点移出开启列表中,将当前点移入关闭列表中。
    2,如果当前点为目标点,则结束查询。
    3,否则遍历当前点的每一个相邻点,如果相邻点无法访问或者在关闭列表中,跳过此相邻点。
    4,如果新路径到相邻点的距离更短或者不在开启列表中则重新设置当前点并保存为父节点,如果相邻点不在开启列表中则添加到开启列表中。
    以上的步骤循环执行直到找到目标点。




  • 相关阅读:
    洛谷P4113 [HEOI2012]采花
    洛谷P5159 WD与矩阵
    洛谷P1262 间谍网络
    洛谷P3038 牧草种植Grass Planting
    洛谷P3258 [JLOI2014]松鼠的新家
    洛谷P2294 [HNOI2005]狡猾的商人
    洛谷P4878 [USACO05DEC]layout布局
    【CF1132F】Clear the String (DP)
    [AH2017/HNOI2017]大佬(动态规划 搜索)
    「NOI2018」屠龙勇士(CRT)
  • 原文地址:https://www.cnblogs.com/cathytong/p/6129757.html
Copyright © 2011-2022 走看看