丘成桐中学数学奖参赛论文

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

丘成桐中学数学奖参赛论文

圆明园迷宫设障游戏中的迷宫算法研究

参赛队员:申靓博,谭侃然

指导老师:纪荣强

参赛学校:北京四中

圆明园迷宫设障游戏中的迷宫算法研究

摘要

现在的游戏为了玩家的方便,都开始提供迷宫的自动导航功能。对于大规模的迷宫,要提供实时的导航,必须要有高效的迷宫算法。本文着重描述了A*算法的思想,然后从理论上证明了算法的可接纳性和一致性,最后对几种算法的运行效率进行了比较,并在算法实现过程中提出了改进算法。

关键词:迷宫算法,A*算法,迪杰斯特拉算法

Abstract

Now the game for players convenience, are beginning to offer a maze of automatic navigation function. For the large-scale maze, to provide real-time navigation of the maze algorithm must be efficient. In this paper, describes the A * algorithm, and then theoretically proved that the algorithm is the admissibility and consistency, the last of the operational efficiency of several algorithms were compared and proposed algorithm of the improvements.

Keywords: maze algorithm, A star algorithm, Dijkstra algorithm

1 问题背景

随着现代科技的发展,计算机开始普及,计算机游戏也达到了空前的繁荣。提到游戏,不得不提到游戏中的迷宫。国内游戏中最早出现的最有名的迷宫当数仙剑奇侠传1中的迷宫,曾令多少玩家为之痴迷。随着网络的普及,网络游戏正如火如荼的发展,当然,网络游戏中也少不了迷宫地图,但现在大部分游戏为方便玩家的操作,都提供了一种称为自动导航、自动寻路的功能,只要在当前地图中确定出发点与目的点,系统就能自动找出一条可行的、最优(局部最优)的路径并使玩家自动移动到目的地。

本文研究的就是如何能够在迷宫地图中更快地找到一条路径满足当前的移动需求,并且考虑到游戏中有多个玩家同时进行时,会相互构成动态障碍,从而产生了一种动态设障迷宫算法改进的需求。

本文以圆明园迷宫为例来探索迷宫路径搜索算法的一种改进。

圆明园迷宫相传是由意大利传教士郎士宁、法国传教士蒋友仁、艾启蒙等为中国皇帝设计修建。迷宫由宫墙和凉亭组成。宫墙高1.60米,总长1660米,占地6000平方米。墙身由特别烧制有“万”字不到头的图案的灰砖砌成。凉亭位于迷宫中心,高11米,汉白玉建筑,亭柱上雕镂着精美的花纹图案,半圆形的亭顶突出欧式建筑风格,站在亭中俯首四望,迷阵一览无遗。

清代,每当中秋之夜,皇帝在此举行盛大灯火晚会,嫔妃宫女们手持黄色宫灯,由四门而入,为争先到达阵中凉亭,嫔妃们追逐嬉戏,各选捷径,此时皇帝居于凉亭中,四面望去,只见无数黄花灯在阵内游动,甚为壮观。所以,迷宫又称为黄花阵、万花阵。

2 算法理论分析

传统的迷宫算法主要有两种,深度优先搜索算法和DIJKSTRA(迪杰斯特拉)算法。

2.1 深度优先搜索算法

深度优先搜索算法是最基本的一种搜索算法,这种算法能保证只要迷宫中有通路,算法一定能返回一条通路,但当迷宫中有多条通路可走时,这种算法一般情况下给不出最优结果。而且,同样的搜索条件可能给出不同的路径。

深度优先搜索算法是把最近刚产生的结点优先扩展,直到达到一定的深度限制。若未找到目标或无法再扩展时,再回朔到另一个结点继续扩展。

从初始状态S开始,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态G。若未出现,以此状态利用规则生成再下一层任一个结点,再检查是否为目标状态G,若不是,继续以上操作过程,一直进行到叶结点(即不能再生成新状态结点)。当没有发现目标状态G时,回溯到上一层结果,取另一可能扩展搜索的分支,生成新状态结点;若仍不足目标状态,就按该分支一直扩展到叶结点。若仍没有发现目标状态,采用相同的回溯办法回退到上层结点,扩展可能的分支生成新状态;如此一直进行下去,直到找到目标状态G为止。

2.2 DIJKSTRA(迪杰斯特拉)算法

对于黄花阵迷宫,其内的很多通路是多条的,我们的目的就是要找到最优的路径,因此,可以考虑使用DIJKSTRA算法。

该算法是由迪杰斯特拉(Dijkstra,1959)提出的,其想法是:设已知图中最接近于顶点s的m个顶点以及从顶点s到这些顶点中每一个顶点的最短路(从s 到其本身的最短路是零路,即没有弧的路,其长度为0)。对顶点s和这m个顶点着色。然后,最接近于s的第m+1个顶点可如下求之:

对于每一个未着色的顶点y,考虑所有已着色顶点x,把弧(x,y)接在从s 到x的最短路后面,这样就得到从s到y的m条不同路。从这m条路中选出最短的路,它就是从s到y的最短路。相应的y点就是最接近于s的第m+1个顶点。因为所有弧的长度都是非负值,所以从s到最接近于s的第m+1个顶点的最短路必然只使用已着色的顶点作为中间顶点。

从m=0开始,将这个过程重复进行下去,直至求得从s到t的最短路为止。

算法步骤:

第1步开始,所有弧和顶点都未着色。对每个顶点x指定一个数d(x),d(x)表示从s到x的最短路的长度(中间顶点均已着色)。开始时,令d(s)=0,d(x)=∞(对所有x≠s)。y表示已着色的最后一个顶点。对始点s着色,令y=s。

第2步对于每个未着色顶点x,重新定义d(x)如下:

d(x)=min{ d(x),d(y)+a(y,x)}

对于所有未着色顶点x,如d(x)=∞,则算法终止。因为此时从s到任一未着色的顶点都没有路。否则,对具有d(x)最小值的未着色顶点x进行着色。同时把弧(y,x)着色(指向顶点x的弧只有一条被着色)。令y=x。

第3步如果顶点t已着色,则算法终止。这时已找到一条从s到t的最短路。如果t未着色,则转第2步。

注意:已着色的弧不能构成一个圈,而是构成一个根在s的树形图,此树形图称为最短路树形图。若x是最短路树形图中的任一顶点,则从s到x的唯一的一条路是从s到x的最短路。

这个算法可以看成是根在顶点s的树形图的生长过程。一旦到达顶点t,生长过程就停止。

2.3 A*算法

DIJKSTRA算法能保证最后输出一条最优路径,但相对于A*算法,它要搜索的节点数要明显多于A*算法,搜索的效率不如A*算法。

下面着重介绍下A*算法的思想,并对A*算法给出相关的证明。

A*算法最早是在1968年由Peter Hart, Nils Nilsson 和Bertram Raphael等人提出的,这是一种启发式的算法,利用人工智能的思想,按照某种启发方式来重排要搜索的节点的顺序,从而完成高效的搜索。

为了更准确地解释启发式搜索的过程,这里提出一个通用的图搜索算法,它允许各种用户进行定制。这里把这个算法叫做图搜索(GRAPHSEARCH)。下面是它的定义。

GRAPHSEACH

(1)生成一个仅包含开始节点n0搜索树Tr。把n0放在一个称为OPEN的有序列表中。

相关文档
最新文档