基于A*算法的复杂权值自寻路贪吃蛇(伪)

来源:互联网 发布:电魂网络新游戏 编辑:程序博客网 时间:2024/05/13 09:25

! 没写完,先别看T.T

贪吃蛇的寻路问题是最简单的一类路径搜索问题, 在我之前的博客中,对于单一路径权值、单一目标、且目标未知的贪吃蛇寻路问题我已经用BFS解决了。但是,我们的终极目标是让蛇可以根据自己的喜好寻找食物,这个时候,就该A*出马了。

算法思路是先使用广度优先搜索将地图中所有的“可能的食物”搜索出来后,使用A*算法进行路径权值评估,最后与所得到的食物权值进行性价比排序,最后得到一个获取最佳食物的最佳路径。

注:本文偏新手向,如有错漏请多指教


1. 基础知识与世界观设定 :)

1. A*算法

在使用A*算法解决问题之前,我们得知道大名鼎鼎的A*算法是啥。其实网上关于A*的教程已经很多了,我这里不再具体细致的说,读者只需要了解以下几点A*的特点即可:

  • A*的核心在于设计权重判断函数,合理选择nextstep,这也为我们的多权重自搜索提供了算法基础;
  • 相较于BFS来说,A*是一种DFS算法;
  • A*是一种已知目标的路径搜索算法,在目标未知时,其算法效率与BFS、DFS等算法近似;

2. 世界观设定

在本文标题中,贪吃蛇的后边有个(伪)字,意思是我们的主角并不仅仅是可爱的蛇,而可以是任何的动物。举个栗子,在一个森林里,有爱吃萝卜的兔子,爱吃青草的羊,还有爱吃兔子的狐狸,和爱吃羊的老虎。对于不同的动物来说,每一种食物的吸引力是不一样的,我们通过权值来对吸引力作出量化。因此,有可能会出现以下情况:森林里没有萝卜的时候,兔子也会选择去吃草,或者森林里没有羊的时候,老虎也会吃兔子,因为这是当前状态下兔子和老虎维持生存的最佳选择。对于我们的算法而言,就可以抽象为一个权重选择的问题,一方面是路径的权重选择(路径行走的难度),另一方面就是得到的食物与路径难度之间的性价比问题,解决了这两个问题,动物们就可以选择最佳的食物,并以最短最优的路径抵达食物了。
那么,我们的世界架构就很清晰了。我把这个世界称作

2. 系统配置

0 0
原创粉丝点击