电脑鼠走迷宫死区排除算法
死路排除算法_渗透法_待翻译_华已改

电脑鼠走迷宫大赛探索过程算法优化研究——死路排除算法——死区域算法0摘要电脑鼠走迷宫大赛是由国际电工和电子工程学会(IEEE)举办的人工智能领域的一项国际性赛事,集机械、电子、控制、光学、程序设计和人工智能等多方面科技知识于一体[1],具有很高的知名度。
迷宫算法的优劣直接影响比赛的最终成绩。
本文从经典迷宫算法入手,先后提出了能排除单行当列死路的“死路排除算法”和能够排除任意形状死区域的“渗透法”,然后通过测试验证两种改进算法的优越性。
改进算法的核心思想是通过已经获得的迷宫信息排除不包含最短路径信息的死区域。
同时,文中创造性的将“渗透思想”用于迷宫算法当中,很好的实现了死区域的判定与排除。
与经典算法相比,改进算法在时间、空间方面都有良好的优化效果。
1背景简介电脑鼠走迷宫大赛是国际电工和电子工程学会(IEEE)每年都会举办的一项国际性赛事,于1972年由美国机械杂志发起。
比赛中的电脑鼠是一个小型的由微处理器控制的机器人车辆,在复杂迷宫中具有译码和导航功能。
该比赛自推出以来,受到了世界各国师生的青睐。
2007年和2008年,上海市计算机学会率先在中国主办了两次IEEE标准电脑鼠走迷宫邀请赛(长三角地区),有三十多所院校参加,反响强烈。
2009年比赛范围扩展到全国,共有9个赛区的52所高校参赛[2]。
1.1电脑鼠走迷宫大赛规则[3]电脑鼠的基本功能是从起点开始走到终点,这个过程称为一次“运行”,所花费的时间称为“运行时间”;电脑鼠从第一次激活到每次运行开始所花费的时间称为“迷宫时间”;电脑鼠在比赛时手动辅助的动作称为“碰触”。
竞赛使用这3个参数,从速度、求解迷宫的效率和电脑鼠的可靠性三个方面来进行评判。
电脑鼠的得分是通过计算每次运行的“排障时间”来衡量的,即将迷宫时间的1/30加一次运行时间;如果未被碰触过,则再减去10s(奖励时间),这样得到的就是排障时间。
电脑鼠在迷宫中停留或运行的总时间不可超过15min,在限时内允许运行多次。
C语言老鼠走迷宫(单路径)算法详细讲解

C语⾔⽼⿏⾛迷宫(单路径)算法详细讲解最近在学习C语⾔的⼀些经典算法,其中遇到了⼀点困难,导致卡进度了。
琢磨了很久,在绘制流程图时,突然灵感⼤开理解了,⽼⿏⾛迷宫算法的奇妙。
所以写了这个,⼀来是⽅便以后右和我类似的同学⾃学时,遇到这个问题可以找到解决的⽅法,⼆来是为了记录⼀下⾃⼰的思路,以免以后记不住。
俗话说得好,好记性不如烂笔头。
那么废话不多说,进⼊正题。
关于C语⾔⽼⿏⾛迷宫算法,⽹上有很多案例,CSDN上⾯也有很多。
⼤家都是能找到的。
基本上的思路都是利⽤数组模拟迷宫,利⽤函数的递归算法来实现的。
以下为⽼⿏⾛迷宫(单路径)的代码:1# include <stdio.h>2# include <Stdlib.h>3int vis(int, int);45int maze[7][7] = {{2, 2, 2, 2, 2, 2, 2},//绘制⼀个7x7的迷宫6 {2, 0, 0, 0, 0, 0, 2},7 {2, 0, 2, 0, 2, 0, 2},8 {2, 0, 0, 2, 0, 2, 2},9 {2, 2, 0, 2, 0, 2, 2},10 {2, 0, 0, 0, 0, 0, 2},11 {2, 2, 2, 2, 2, 2, 2}};12int startI = 1, startJ = 1;//定义起点13int endI = 5, endJ = 5;//定义终点14int success = 0;//定义终点变量1516int main (){17 int i, j;18 //显⽰迷宫19 printf("显⽰迷宫: \n");20 for(i = 0; i < 7; i++){21 for(j = 0; j < 7; j++){22 if(maze[i][j] == 2)//当数组内元素为2时就是墙23 printf("■ ");24 else printf("□ ");//否则就说明其余是路25 }26 printf("\n");27 }2829 if(vis(startI, startJ) == 0)//调⽤⾛迷宫函数vis,寻找从起点到终点的路径,若⽆法到达此处输出30 printf("\n没有找到出⼝ \n");31 else {32 //输出解密后的路径3334 printf("\n迷宫路径为:\n");35 for(i = 0; i < 7; i++){36 for(j = 0; j < 7; j++){37 if(maze[i][j] == 2)//同上,2代表墙38 printf("■ ");39 else if(maze[i][j] == 1)//在29⾏处调⽤vis函数后,就已经将迷宫的路径解答出来了. 1代表所⾛的路径及迷宫正确⾛法40 printf(" ");41 else printf("□ ");//否则就是不正确的路42 }43 printf("\n");44 }45 }4647 return 0;48}4950int vis(int i, int j){//迷宫解密函数51 maze[i][j] = 1;//将当前位置定义为152 if(i == endI && j == endJ) success = 1;//若到达终点,令终点为153 if(success != 1 && maze[i][j+1] == 0) vis(i, j+1);//向右探索路径,可以就执⾏,不⾏就执⾏下⼀条语句54 if(success != 1 && maze[i+1][j] == 0) vis(i+1, j);//向下探寻路径,可以就执⾏,不⾏就执⾏下⼀条语句55 if(success != 1 && maze[i][j-1] == 0) vis(i, j-1);//向左探索路径,可以就执⾏,不⾏就执⾏下⼀条语句56 if(success != 1) maze[i][j] = 0;//判断是否到达终点,没有就将路径清零57 return success;58}备注之类的我都写好了。
电脑鼠走迷宫竞赛ppt教材

– IRM8601S
• PSD器件
– GP2D12
• CCD • 超声波
电脑鼠的简介
电脑鼠 |基于LM3S615微控制器
• 电机
– 步进电机 – 直流电机
• 减速 • 速度反馈
电脑鼠的简介
电脑鼠 |基于LM3S615微控制器
电脑鼠的简介
电脑鼠迷宫竞赛的计分规则说明
• 迷宫用于检验电脑鼠的设计 电脑鼠 |基于LM3S615微控制器
c”文件里修改系统定时器中断和定时器0中断的入口地址 ,如图所示:
• 2 能正确判断环境的能力 MicroMouse615迷宫智能老鼠
——基于Cortex-M3
ARM cortex-M3内核
• 3 记忆路径的能力 电脑鼠 |基于LM3S615微控制器
电脑鼠的基本功能是从起点开始走到终点,这个过程称为一次“运行”,所花费的时间称为“运行时间”。
用途提示: 1、在开发过程中,或迷宫竞赛开始前用于显示
红外线传感器的灵敏度,以方便进行调试。
2、在验证自己迷宫算法的时候,用数码管显示 自己所处的迷宫坐标和采集的墙壁信息。
3、键盘可以设置为单步验证各个功能模块,并 在数码管上进行显示,比如步进电机的转速,方向 等等。
4、……
电脑鼠 |基于LM3S615微控制器
MicroMouse615迷宫电脑鼠
——基于Cortex-M3
1234567
电脑鼠 电脑鼠 电脑鼠 电脑鼠 简介 走迷宫竞赛 走迷宫演示 走迷宫算法
走迷宫 电脑鼠 电脑鼠 标准套件 调试例程 传感器校正
电脑鼠 |基于LM3S615微控制器
电脑鼠的简介
• 电脑鼠是一种具有人工智能的轮式机器人
老鼠走迷宫的算法分析

一种电脑鼠走迷宫的算法电脑鼠走迷宫的算法1探测策略电脑鼠走迷宫可以采用全迷宫探索策略,即将迷宫的所有单元均搜索一次,从中找出最佳的行走路径。
这种策略需要有足够的时间或探测次数,但在IEEE竞赛规则中每场竞赛只有15分钟的时间,因此是不可能的。
另一种方法是部分迷宫探索策略,即在有限的时间或探测次数下,只探测迷宫的一部分,从中找出次最佳的路径,显然只能采用这种策略。
电脑鼠在一巷道内行走,如果最后无路可走,则该巷为死巷。
电脑鼠在任一单元内,可能的行走方向最多只有三个(前、左、右),如果有二个或二个以上的可能行走方向,称为交叉,遇有交叉时,由于有多个可以行走的方向,在行走方向的选择上,可有下面的几种选择法则:•右手法则:遇有交叉时,以右边为优先的前进方向,然后是直线方向、左边方向。
•左手法则:遇有交叉时,以左边为优先的前进方向,然后是直线方向、右边方向。
•中左法则:遇有交叉时,以直线为优先的前进方向,然后是左边方向、右边方向。
与此类似的还有中右法则。
•乱数法则:遇有交叉时,取随机值作为前进方向。
•向心法则:由于终点在迷宫的中心,遇有交叉时,以向迷宫中心的方向为优先的前进方向。
2标记为了记忆迷宫的详细信息,需要对迷宫单元的位置进行线路标记。
全迷宫共有16×16个单元组成,可采用二维坐标方式标记,即用每个单元的XY坐标表示,如起点可标记为(0,0),终点为(7,7)。
此外,还需要对迷宫单元的可行进方向进行标记,可采用绝对方位或相对方位二种方式。
绝对方位:这是一种与电脑鼠行进方向无关的标记方式,以一个四位的二进制数,分别表示“东”﹑“西”﹑“南”和“北”四个方向。
以1表示允许行进(无墙壁),0表示不允许行进(有墙壁)。
相对方位:这是一种与电脑鼠行进方向有关的标记方式,以一个三位的二进制数即可实现标记,分别表示“前”“左”“右”,以1表示允许(无墙壁),0表示不允许(有墙壁)。
3阻断在电脑鼠试跑过程中或在最后冲刺时,需要对部分路径进行“阻断”,即在发现某条路径是死路(只有入口而无出口)时,在该路径的入口处(一般是交叉点)设置标记,即将入口的线路标记由1改为0。
电脑鼠走迷宫竞赛情况介绍

在纽约举行;
陕西科技大学电气与信息工程学院
电脑鼠走迷宫竞赛概述—起源
✓ 1991年以来,国际电工和电子工程学会 (IEEE)每年都要举办一次国际性的电脑鼠 走迷宫竞赛,自举办以来参加国踊跃,为此 许多大学还开设了“电脑鼠原理和制作”选 修课程。每年都有世界级的比赛。
△ 电脑鼠必须自成独立系统,不能使用可燃物为能 源;
△ 电脑鼠的长和宽限定在25cm×25cm。每次运行中 电脑鼠几何尺寸的变化不能超过25cm×25cm。对 电脑鼠的高度没有限制;
△ 电脑鼠穿越迷宫时不能在其身后留下任何东西; △ 电脑鼠不能跳越、攀爬、钻挖和损毁迷宫隔墙; △ 不能对电脑鼠进行遥控操作。
陕西科技大学电气与信息工程学院
电脑鼠走迷宫竞赛规则—比赛规则
竞赛中电脑鼠在迷宫中的总时间不可超过15分 钟,在该限时内,电脑鼠可以运行任意次。
电脑鼠到达迷宫中心的目的地后,可以使用手 动放回起点,或让电脑鼠自动回到起点,前者 被视为碰触,因此在以后的运行中,将失去减 10秒的奖励。
电脑鼠在启动过程中,操作员不可再选择策略。 一旦竞赛迷宫布局揭晓,操作员不能将任何有
陕西科技大学电气与信息工程学院
电脑鼠走迷宫竞赛概述—特点
电脑鼠是一个小型的由微处理器控制的机器 人车辆,在复杂迷宫中具有译码和导航的功 能,具有精确的定位能力,快速的行走能力 和优秀的避障能力等特点。
电脑鼠结合了机械、电机、电子、控制、光 学、程序设计和人工智能等多方面的科技知 识。
电脑鼠走迷宫竞赛具有一定难度,是一项富 有挑战性和趣味性的比赛。
迷宫隔墙的侧面为白色,顶部为红色。迷宫的 地面为木质,使用油漆漆成黑色。隔墙侧面和 顶部的涂料能够反射红外线,地板的涂料则能 够吸收红外线。
北京赛区补充规则细则

北京赛区2009全国“电脑鼠走迷宫”竞赛规则补充说明1.计时方法电脑鼠在规定的十五分钟内可运行任意次。
每一次的成绩都由迷宫时间、运行时间和碰触奖惩三部分组成,取多次运行中最短排障时间作为最终成绩。
根据《IEEE电脑鼠走迷宫竞赛规则》中对于迷宫时间的定义“从电脑鼠的第一次激活到每次运行开始,这段期间所花费的时间称为迷宫时间”,具体计时方法如下:例1:信息记录在《比赛计时表例1》并自动计算假设电脑鼠第一次启动后(计时员统一起表)经过100秒到达迷宫终点(计时员掐表记录第一个时间点),那么第一次运行时间Y1=100秒,运行过程中没有发生碰触,奖励10秒。
由于是第一次运行没有迷宫时间即M1=0,因此第一次排障时间是:P1=100 – 10 = 90(秒)电脑鼠离开终点后又花费了140秒时间用于搜索迷宫信息并回到起点自动180度回转(计时员掐表记录第二个时间点),后根据找出的最短路径以最快速度冲刺到终点(计时员掐表记录第三个时间点),耗时20秒,那么第二次运行时间Y2=20秒,迷宫时间是之前的运行时间100秒加上后续搜索迷宫的140秒,即M2=240秒。
没有发生碰触,那么第二次排障时间是:P2=240/30 + 20 – 10 = 18(秒)这只电脑鼠经过25秒回到起点,此时操作员将电脑鼠拿起除去车轮上的灰尘或是进行其他操作耗费30秒,记为第一次碰触。
再次放回迷宫(计时员掐表记录第四个时间点),后以最快速度从起点冲向终点(计时员掐表记录第五个时间点),此次耗费时间19秒,那么第三次的运行时间Y3=19秒,而此次的迷宫时间包括之前的所有时间,包括第二次的迷宫时间240秒,第二次的运行时间20秒,回到起点的25秒和除尘等操作耗去的30秒,此次的迷宫时间M3=315秒,碰触一次,没有奖惩,那么第三次运行成绩为:P3=315/30 + 19= 29.5(秒)如果此时向裁判请求结束比赛那么取三次最好成绩18秒作为最终成绩。
机器鼠走迷宫的优化路径算法及实践

我们总是希望机器 鼠在经过几次试探后能够 找出
最 短的路径 。
粗虚线示意将死胡同堵死。 22 完成“ . 左顺 墙” 右顺墙 ” 和“ 机 器 人可 以通过 “ 顺墙 ” “ 左 和 右顺墙 ” 的办法 找
到两 条路 径 ,显然 这两 条路 径长度 是不 同的 。图 l
2 算法 设计 . 无论是树 型迷 宫还 是 网孔 型迷 宫 ,要找到 一条
维普资讯
芜湖职业技术学院学报 20 0 7年第 9卷第 2期
机 器 鼠走 迷 宫 的优 化路 径 算 法 及 实践
邓延 安
( 芜湖职业技术学院电气系,安徽 芜湖,2 10来自) 401 0 . .
迷宫问题 是计算机数据结构和计 算方法经常
涉及 的 问题 , 目前 最 常 见 的方 法有 广 探 法 和 深探
宫,后 一类称 为 网孔 形迷 宫 ,显 然 网孔 型迷 宫要 复 杂得 多 。图 l 就是 一个树 形迷 宫 。
1 . 宫 问题 2迷
图 1树 型迷 宫示例
本文采用坐标描述迷宫的位置,如果向右 ( 或
左 )越过虚 线 ,则 X加 l( 或减 1, 向上 ( ) 或下 )
越过虚线 , y l 或减 1。 则 加 ( ) 为简化问题的分析, 假设机器人只能走直线。
息 (bt 6i )和方 向信息 (bt。这 里 ,规 定方 向位 2i )
为:‘0 :上 ;‘ l :右;‘ l:下 ;‘ 0 :左 。 ‘” 0 ‘” 0 ‘” l ‘” l
3 . 5程序流程 图 图 2是“ ( 左 或右)顺墙算法流程图,图 3 是
路 径优 化流程 图。 4 .结束 语 对 于不 太 复杂 的树型 迷 宫,如 一个 1x 6迷 6 1 宫 ,PC1F 7 I 6 8 7单片机 可 以胜 任 。但对 于复杂 的迷 宫,由于存储空间要求较大 ,需外接 EP O 2R M。如
电脑鼠走迷宫比赛规则

電腦鼠走迷宮比賽規則一、電腦鼠的規定1.電腦鼠必須以紅外線光感測器偵測迷宮路徑行走;不得以機械式的感測裝置(包含導輪)碰觸迷宮路徑的牆板行走。
2.電腦鼠必須為自立型,不得以無線電波遙控。
3.電腦鼠不得躍過、攀登、損傷或破壞迷宮壁面。
二、迷宮的規定1.電腦鼠迷宮,如[圖一]所示,單位方塊壁面的側面為白色,頂部為紅色,平面為黑色。
2.電腦鼠迷宮以一定大小的正方形單位方塊構成,整個迷宮的外圍也是正方形。
所有的迷宮方塊至少有一個方向被壁面擋住。
某些迷宮的路徑寬度為兩個迷宮方塊的寬度,如黃色部分所示。
3.電腦鼠迷宮的單位方塊為18cmX18cm,整個迷宮由16X16個迷宮方塊組成,面積為288cmX288cm。
電腦鼠迷宮的外圍全部相連接起來,壁面的高度為5cm,厚度為1.2cm。
4.迷宮是以一般的精度製作,有可能產生某種程度上的尺寸誤差(約1mm)。
三、比賽規則1.參加隊伍於比賽前由各隊選手(或選手代表)抽籤決定出賽次序。
每隊限一個操控手下場比賽。
2.比賽開始前,所有參賽的電腦鼠均須以大會提供的塑膠袋封起來,貼上裁判簽名的封條。
輪到下場比賽的隊伍,操控手須在裁判示意下打開塑膠袋,操控電腦鼠下場比賽。
當裁判發出哨聲後,操控手即可啟動電腦鼠。
3.電腦鼠由迷宮的一角出發,以達到終點(在迷宮的中心)時間短者為第一名,餘依次類推。
4.電腦鼠最多可擁有6分鐘,比賽期間最多可行進6次,以這段時間內最快到達迷宮終點的時間為比賽成績。
如在比賽時間內無法達到終點者,以比賽時間到時,電腦鼠距離終點的距離為比賽成績,此項距離越短者成績越高。
5.電腦鼠在比賽中碰觸迷宮牆壁達到3次或一次碰觸超過3秒卡住者即須退場,其成績依未到達終點者之方法計算,以退場時之位置為行走距離的量測點。
6.操控手不得在迷宮路徑公開之後,把迷宮的路徑資料輸入電腦鼠,即比賽中不得從事程式的置入(loading)及ROM的更換。
7.比賽場所的照明、溫度、濕度…等,均為普通的環境程度,操控手不得要求調節照明程度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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流程图初始化:迷宫边界被标记,所有迷宫格赋值ff,其他初始化右手法则探索迷宫,记录并按规则标记虚拟迷宫信息存于MapBlock[][]中,循环判断区域虚拟标记信息,若满足迷宫区域封闭条件则封闭判断是否满足加强右手法则中向右转、向前直行、向左转的条件:当前格对应方向右方、前方、左方既无传感器探测到的隔墙板信息,又无被标记的隔墙板信息Y回到已经记录的上一节点处,沿另外方向探索迷宫,判断已记录节点数N是否归0NN表明迷宫已探索完毕,回到起点准备冲刺Y冲刺完毕后回到起点,结束运行电脑鼠当前迷宫格P,某方向N无隔墙板迷宫格P的N方向迷宫格为Q未探索,将Q赋值ff,并不断无回流的扩散判断终点是否被赋值ffN对迷宫格Q相应方向进行预封闭,判断电脑鼠是否处于预封闭区域将预封闭迷宫格封闭N是否所有未探相邻迷宫格均已判断结束YYYN迷宫区域封闭子程序图53.2.3图解实例下面结合图6我们对渗透法做进一步解释:图6 渗透法实际效果图解图中未赋值迷宫格默认赋值为0,蓝色宽箭头表示“ff ”渗透的方向,红色虚线是预标记的虚拟隔板,绿色虚线为死区出口处标记的虚拟隔板:1、 初始化使迷宫边界均被标记虚拟隔板,电脑鼠从起点沿长虚线箭头方向运行,走过的迷宫格自动赋值为ff ,运动到图5-1中被圈的迷宫格时,先后进行上方右方的渗透,无红色虚拟隔板则不受阻碍,渗透后迷宫如图5-2所示,其中两蓝色箭头示意了终点被赋值ff 的一种渗透路径;2、 由于终点最终被渗透扩散后赋值ff ,则判定两个方向目前均不是死区的出口,不进行封闭,继续向前探索;3、 电脑鼠运动到图5-3中被圈位置时,下方区域A 的边界均已被预标记上虚拟隔板,此时判断出下方迷宫格的值为0,则将ff 渗入;4、 如图5-4, “ff ”在区域A 内不断扩散直至充满整个区域,由于整个区域只有一个出口且不能回流,ff 不能流出延伸到终点,所以可判定该区域是死区域;即将当前电脑鼠所在迷宫格的下方标记虚拟隔板; 5、 电脑选择左转,将减少探索整个区域A 的时间。
4 实测数据分析为验证上述两种算法的效率,本文针对以下3个不同的迷宫,对上述算法和经典算法进行了3组性能测试,从所用时间和搜索空间两方面进行比较,测试结果如表1所示。
迷宫1 迷宫2 迷宫3经典算法死路排除算法 死区域算法时间(秒)迷宫1 66 44 39 迷宫276 58 47 迷宫3 7851 42 平均值 73.3333333351 42.66666667 空间(探索区域/全迷宫×100%)迷宫1100% 64.06% 57.80% 迷宫2100% 81.25% 67.19% 迷宫3100% 73.43% 59.38% 平均值100% 72.91% 61.46%表1以上3个迷宫为人工随机摆放,但已经存在相当的普遍性。
从表1中可以看出: a) 探索时间上:经典算法>死路排除算法>死区域算法;死路排除算法、死区域算法所需时间仅为经典算法的69%和58%;b) 探索空间上:经典算法>死路排除算法>死区域算法;死路排除算法、死区域算法所探索的空间仅为经典算法的73%和61%; c) 死路排除算法、死区域算法在时间、空间上比经典算法都有相当的优化,优化程度前者在30%左右,后者在40%左右,效果非常理想。
为直观反映空间优化的效果,我们用迷宫3的三种算法做如下比较,其中蓝色为死路排除算法未探索区域,黄色为死区域算法未探索区域,显然优化效果明显。
5结论本文从已有经典迷宫算法引出对迷宫算法的优化,先是提出了排除单死路的“死路排除算法”,后来又进一步提出了排除死区域的“渗透法”。
“渗透法”的提出从一种更直观形象的角度对死区域进行了描述,降低了死区域判断时间、空间上的复杂度,减少了迷宫格信息预处理的计算量,最终完美的实现了死区域的排除。
改进算法的核心思想在于通过已经获得的迷宫信息排除死区域,只要迷宫存在死区域,就一定会在时间、空间上有所优化。