电脑鼠走迷宫死区排除算法

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

电脑鼠走迷宫大赛探索过程算法优化研究

——死路排除算法

——死区域算法1摘要

电脑鼠走迷宫大赛是由国际电工和电子工程学会(IEEE)举办的人工智能领域的一项国际性赛事,集机械、电子、控制、光学、程序设计和人工智能等多方面科技知识于一体[1],具有很高的知名度。迷宫算法的优劣直接影响比赛的最终成绩。本文从经典迷宫算法入手,先后提出了能排除单行当列死路的“死路排除算法”和能够排除任意形状死区域的“渗透法”,然后通过测试验证两种改进算法的优越性。改进算法的核心思想是通过已经获得的迷宫信息排除不包含最短路径信息的死区域。同时,文中创造性的将“渗透思想”用于迷宫算法当中,很好的实现了死区域的判定与排除。与经典算法相比,改进算法在时间、空间方面都有良好的优化效果。

2背景简介

电脑鼠走迷宫大赛是国际电工和电子工程学会(IEEE)每年都会举办的一项国际性赛事,于1972年由美国机械杂志发起。比赛中的电脑鼠是一个小型的由微处理器控制的机器人车辆,在复杂迷宫中具有译码和导航功能。该比赛自推出以来,受到了世界各国师生的青睐。2007年和2008年,上海市计算机学会率先在中国主办了两次IEEE标准电脑鼠走迷宫邀请赛(长三角地区),有三十多所院校参加,反响强烈。2009年比赛范围扩展到全国,共有9个赛区的52所高校参赛[2]。

2.1电脑鼠走迷宫大赛规则[3]

电脑鼠的基本功能是从起点开始走到终点,这个过程称为一次“运行”,所花费的时间称为“运行时间”;电脑鼠从第一次激活到每次运行开始所花费的时间称为“迷宫时间”;电脑鼠在比赛时手动辅助的动作称为“碰触”。竞赛使用这3个参数,从速度、求解迷宫的效率和电脑鼠的可靠性三个方面来进行评判。

电脑鼠的得分是通过计算每次运行的“排障时间”来衡量的,即将迷宫时间的1/30加一次运行时间;如果未被碰触过,则再减去10s(奖励时间),这样得到的就是排障时间。电脑鼠在迷宫中停留或运行的总时间不可超过15min,在限时内允许运行多次。如果进入迷宫是为了进行探测和记忆,则这次运行就称为“试跑”;如果进入迷宫是根据先前的记忆和经验,按照智能算法确定最佳路径,并以最快的速度到达目的地,则这次运行就称为“冲刺”。

2.2迷宫、电脑鼠规格

迷宫由256个方块组成,每个方块18 平方厘米,排成16行×16列。迷宫的隔板沿方块的四周布设,形成迷宫通道。如图1为迷宫照片。图2为电脑鼠样例照片,该电脑鼠采用ARM7处理器——LM3S615作为主控芯片。五组可测距的红外线传感器按照某固定频率对迷宫格周围障碍进行采样,获取迷宫隔板信息。

图1 迷宫照片图2 电脑鼠样例照片

2.3已有算法

迷宫最优路径是指从迷宫的入口到达迷宫出口的最短通路。经典求解迷宫路径问题的算法大多采用广度优先搜索(BFS)或深度优先搜索(DFS)[4]。由于需要全迷宫搜索,随着迷宫规模的增大和复杂性的增加,上述两种算法的空间和时间复杂性将呈指数增加。针对以上问题,本文对经典算法优化改进,核心思想是利用已经探索得知的迷宫信息排除不包含最短路径信息的迷宫格,不予探索。文章首先实现了能够排除单行、单列死路的死点路排除算法;随后实现了能够排除多行、多列死点的死区域算法。本文第2部分给出两种算法分别的设计思想和设计流程,第3部分通过实际测试验证了上述算法并对结果进行分析。文章的结论在第4部分呈现。

3算法介绍

3.1死点算法

3.1.1基本思想

该算法首先将迷宫等分成16×16的迷宫格,见图6。并将迷宫隔板两面分别进行标记,以示区别。可以对迷宫格进行虚拟隔板标记,这种标记在实际效果上等同于隔板,只是无法用传感器探测到而已;如果一个迷宫格三个方向有隔板(或者是标记),并且当该迷宫格不是终点时,那么电脑鼠进入该迷宫格后必然返回,这对于寻找最短路径信息无用;算法将该迷宫格第四个方向一同标记,亦即将迷宫格封闭,不让电脑鼠进入该迷宫格,以达到缩短探索时间的目的。

3.1.2流程图

图3 图解示例

为了进一步说明死点算法在实际探索过程中的工作过程,如图4做如下解释:

图4 死点算法实际效果图解

图中红色虚线是预标记的虚拟隔板,绿色虚线为封闭死点时标记的虚拟隔板,在初始化中将迷宫边界内壁预标记:

1、电脑鼠运动到P格时,会将迷宫格1的上方标记,而其左方已在出发时标记,这样迷宫格1三个方向被标记,满足封闭条件,则将其右方也标记上,即将迷宫格1封闭,同时可将迷宫格2的左方标记上;

2、电脑鼠继续沿图示虚线运动,迷宫格2同样三方被标记,将其封闭,如此循环可得迷宫格

3、

4、

5、

6、7将相继封闭,并将迷宫格8下方被标记;

3、电脑鼠运动到迷宫格8时,右方传感器没有检测到障碍,但由于右方被标记,因此向左转。减少了探索迷宫格1、2、3、

4、

5、

6、7的时间。

3.2死区算法——渗透法

3.2.1基本思想

A、新思路的探索

上述死点算法实现了利用已有信息排除单行、单列死点的功能,但无法排除多行、多列的死区域,而且在算法实现上隔板标记的循环语句较为繁琐,将会影响电脑鼠的信息处理速度和运动的稳定性。死区域排除也是通过已有信息将不包含最短路径信息的区域进行封闭,然而单纯依靠单格的连续封闭的方法从空间和时间上都较难实现,下面我们引入一种新的思想来解决这个问题。

B、渗透法

当一个区域只有一个出口与外面相连并且终点不在此区域内时,这个区域被称作死区域。渗透法排除死区域继承了死点算法的隔板标记的思想,在沿途对已获隔板信息进行分析和标记,并希望实现唯一出口处被标记一个虚拟隔板。渗透法的核心是判别死区域,要说明其原理我们从“渗透”一词说起,“渗透”在化学上的解释是低浓度溶液中的水或其他溶液通过半透性膜进入较高浓度溶液中的现象,而我们对死区域的判定也正是应用这种思想;做个比喻,设想单出口区域即死区域的出口处有一个“半透膜”,而整个迷宫内假设都充满了“高浓度的溶液”,电脑鼠从起点出发,每当遇到路口时,将“低浓度溶液”中的“水分”渗入路口相连的方向,水分渗入“高浓度溶液”后,则变为“低浓度溶液”,进而在逐步深入,如果“水分”不能最终扩散渗入终点,则说明此路口所连区域是个死区域,可以将路口标记上虚拟的隔板,进而排除该死区域。需要注意的是:进行封闭的区域是未探索区域,即仍为“高浓度的溶液”区域,以防将电脑鼠封死在已走的区间内。

C、渗透算法的实现

除了已经提到的隔板标记的算法,还需要实现溶液的渗透和扩散,在初始化中我们将未探索的迷宫格全部赋值为0,当“水分”渗入后该区域值变为0xff,这样来实现“低、高浓度溶液”模型的建立。“溶液的扩散”就是把与值为0xff的迷宫格之间无虚拟隔板相隔的相邻迷宫格同样赋值为0xff,再不断的这样赋值下去,直到整个区域内都赋了值0xff而无法继续扩散时结束。这样就实现了渗透的算法。

3.2.2流程图

相关文档
最新文档