电脑鼠算法

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

左上区域
左上区域 左上区域 左上区域 右上区域 右上区域 右上区域 右上区域
上方 0
下方 2 左方 3 右方 1 上方 0 下方 2 左方 3 右方 1
右手法则
中左法则 左手法则 中右法则 左手法则 中右法则 中左法则 右手法则
4)回溯
• 当电脑鼠的四个方向都为不 可行(有墙或已走过)时,
• 栈顶元素出栈 • 电脑鼠返回栈顶位置
• 演示栈
1) 栈思考题
• a)若栈的输入序列是a、b、c、d,则可能的输出序列 有哪几种类?
• b)判断一个输入字符串是否为中心对称。例如xyx、 xyyx都是中心对称。 • c)假设一个算术表达式中包含括号、方括号和花括号3 种类型的括号,编写一个算法来判别表达式中的括号是 否配对,以字符“\0”作为算术表达式的结束符。
• 迷宫二维数组,每个结点定义为FFFF表示上右下左都有 墙。
• 迷宫鼠方向:电脑鼠放入方向,一般默认为向上(1000)
• 栈,加入起点坐标
• 下面以起点为(0,0),终点为(7,7)为例讲解
3)电脑鼠寻路
• While(当前结点不是终点){
• 记录电脑鼠所在点迷宫信 息,电脑鼠方向 • 按向心法则寻路 • If(没有可行路径) 回溯
传感 器
软件 设计
关键 技术
机械 结构 处理 器
驱动 装置
二、电脑鼠迷宫竞赛
目的
电脑鼠走迷宫竞赛的目的是制作一个微型机器人, 它能在最短的时间内穿越迷宫到达终点。参赛的机器人 称为“电脑鼠”,将电脑鼠放入迷宫并启动操作的人称 为“操作员”。
迷宫的规范
1) 迷宫由16×16个﹑18cm×18cm大小的正方形单 元所组成。 2)迷宫的起始单元可选设在迷宫四个角落之中的 任何一个。起始单元必须三面有隔墙,只留一个出口。
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯
3) 回溯思考题——N皇后问题
• 在一个N*N的棋盘上 放置N个皇后,且使 得每两个之间不能 互相攻击,也就是 使得每两个不在同 一行,同一列和同 一斜角线上。
• 栈顶元素出栈 • 电脑鼠返回栈顶位置 • 从栈顶位置重新找路
• 当电脑鼠的四个方向都为不 可行(有墙或已走过)时,
• 栈顶元素出栈 • 电脑鼠返回栈顶位置
• 从栈顶位置重新找路
• 当电脑鼠的四个方向都为不 可行(有墙或已走过)时,
• 栈顶元素出栈 • 电脑鼠返回栈顶位置 • 从栈顶位置重新找路
迷宫电脑鼠算法
重庆理工大学 计算机科学与技术系
五大内容:

• 电脑鼠简介 • 电脑鼠走迷宫竞赛


• 电脑鼠走迷宫演示
• 电脑鼠走迷宫的设计与算法 • 电脑鼠走迷宫具体实现过程


一、电脑鼠简介
电脑鼠是一种具有人工智能的轮式机器人
它是多个学科交叉结合的结晶
软件
人工
智能
工程
运动
控制
电脑 鼠
电脑鼠走迷宫的关键技术
向心法策略表
小车当前所处区域 左下区域 左下区域 左下区域 左下区域 右下区域 右下区域 小车车头当前面向方向 上方 0 下方 2 左方 3 右方 1 上方 0 下方 2 应选择的策略 中右法则(中右左) 左手法则 右手法则 中左法则 中左法则 右手法则
右下区域
右下区域
左方 3
右方 1
中右法则
左手法则
• 当前结点入栈
• 电脑鼠进入下一结点
}
1、右手法则 小车在搜过程中有两个以上的搜索方向时,优先选择向右转 ,其次是向前行进,最后才考虑向左转弯。
2、左手法则
小车在搜过程中有两个以上的搜索方向时,优先选择向左转 ,其次是向前行进,最后才考虑向右转弯。
3、向心法则
把整个8 ×8的迷宫地图分解为左下,右下,左上,右上四个 均等的区域,在不同的区域中选择不同的转弯策略,使得小车 始终向着迷宫的中心靠近,这样就可以以最快的速度接近终点 ,总体上说,遍历迷宫时此方法更科学有效。
2) 队列思考题
• a) 入队顺序1、2、3、4,那么出队顺序是?
• b)某汽车轮渡口,过江渡船每次能载10辆车。车分客车类和 货车类,上渡船有如下规定:
• 客车先于货车上渡船,且每上4辆客车,才允许放一辆货车; • 若等待客车不足4辆,则以货车代替; • 若无货车等待,允许客车都上船。
• 试设计一个算法模拟渡口管理。
三、电脑鼠走迷宫演示
四、电脑鼠迷宫的设计与算法
电脑鼠走迷宫三个阶段 寻路:从给定起点走到给定终点 遍历:走遍整个迷宫,获得迷宫地图 寻优:获取最优路径进行最后冲刺
各阶段所用数据结构
寻路: 栈(存储走过的路径)、二维数组 遍历: 栈、二维数组(记录整个迷宫的墙信 息,每个数组元素为一个结构体结点包含一 个迷宫坐标点上右下左的墙信息) 寻优: 队列(建立等高表)、栈(记录最优路 径)
• 从栈顶位置重新找路
附:走过的迷宫记录中不为 FFFF
• 当电脑鼠的四个方向都为不 可行(有墙或已走过)时,
• 栈顶元素出栈
• 电脑鼠返回栈顶位置 • 从栈顶位置重新找路
• 当电脑鼠的四个方向都为不 可行(有墙或已走过)时,
• 栈顶元素出栈 • 电脑鼠返回栈顶位置 • 从栈顶位置重新找路
• 当电脑鼠的四个方向都为不 可行(有墙或已走过)时,
1) 栈
• 操作特点:先进后出(Last In First Out, LIFO)
• 结构特点:只允许一端插入、查看和删除,不允许对另 一端的操作
• 概念:
• 栈顶(入栈、出栈) • 栈底(固定,无操作) • 空栈
1) JAVA中栈的实现
• 类 Stack<E>实现
• 继承于Vector<E>, Object • 构造方法:Stack() • 方法: 创建一个空堆栈
6)电脑鼠遍历
• While(当前结点不是起点 || 起点处电脑鼠还有可行路经 ){
• 记录电脑鼠所在点迷宫信 息,电脑鼠方向
• 按某种法则寻路(此处选的 是左手法则) • If(没有可行路径) 回溯 • 当前结点入栈 • 电脑鼠进入下一结点
}
7)电脑鼠路径寻优
• 迷宫遍历结束后,电脑鼠 就会得到迷宫可到达的所 有结点墙信息。 • 此时电脑鼠不用动,在电 脑鼠机器内部计算得到( 通过计算等高表) 最优路 径。
各阶段所用的算法
寻路: 回溯 遍历: 回溯 寻优: 广度优先遍历
3) 回溯
• 算法思想:深度优先遍历
• 步骤一:先将根结点作为活结点; • 步骤二:向活结点的子结点扩展,若其存在,子结点作 为新的活结点,若不存在可扩展子结点,将当前活结点 设为不可扩展结点,其父节点作为当前的活结点; • 步骤三:重复步骤二,直至找到所求结点,输出路径, 或者到没有可扩展结点时结束,输出null。
2) 队列
• 操作特性:先进先出(First In First Out, FIFO)
• 结构特点:只允许一端入队,另一端查看和删除 • 概念:
• 队头(出队) • 队尾(入队) • 空队列
• 顺序队列(队列、循环队列) • 链式队列
• 两端队列
2) JAVA中队列的实现
• 接口Queue实现
• 继承了Collection接口 • LinkedList实现了Queue接口
• Queue接口窄化了对LinkedList的方法的访问权限(即在方法 中的参数类型如果是Queue时,就完全只能访问Queue接口所 定义的方法 了,而不能直接访问 LinkedList的非Queue的方法 )
2) JAVA中队列的实现
• remove、element、offer 、poll、peek 其实是属于Queue 接口 • 异常---提示---阻塞 • 队列演示
各阶段所用的算法
寻路: 回溯 遍历: 回溯 寻优: 广度优先遍历
4) 广度优先
• 特点:横向优先遍历
• 步骤一:先将跟结点入队列; • 步骤二:取队头元素,遍历队头元素的所有子结点,并 将所有子结点加入队列; • 步骤三:重复步骤二,直至找到所求结点,或者队列为 空。
4) 广度优先
4) 广度优先
竞赛主要规则
电脑鼠的基本功能是从起点开始走到终点,这个 过程称为一次“运行”,所花费的时间称为“运行时间 ”。从终点回到起点所花费的时间不计算在运行时间内 。从电脑鼠的第一次激活到每次运行开始,这段期间所 花费的时间称为“迷宫时间”。如果电脑鼠在比赛时需 要手动辅助,这个动作称为“碰触”。竞赛使用这三个 参数,从速度﹑求解迷宫的效率和电脑鼠的可靠性三个 方面来进行评分。
• 电脑鼠沿最优路径冲刺。
8)建立等高表
• 建立等高表要用到队列结构,使 用广度优先遍历算法 • 初始化队列,把起点加入队列, 并记起点路径长度为1 • While(队列不为空) { • 取队头元素 • 迷宫中当前结点可到达的结 点路径长度加1,且全部加入 队尾中 • } • 附:此处出队列的元素要记录下 来,可记录于线性表中
9)根据等高表查找最优路径
• 最优路径的查找要从终点开始
• 初始化栈,将终点坐标加入 • While(栈顶元素不是起点) {
• 查找栈顶元素可到达的,路径长度小于栈顶元素路径长 度的结点入栈
•}Leabharlann 10)路径寻优• 等高表建立与查 找最优路径的演 示如右图:
附加事项
• 节省内存空间
除边界,迷宫每个结点只记录up,left 栈和队列都用一个线性表实现
• 最优路径优化
此处的最优路径只是最短路径 电脑鼠转弯、掉头要耗时间 遍历时是否可以不遍历整个迷宫(利用分支限界法)
4) 广度优先
4) 广度优先
4) 广度优先
4) 回溯思考题
• 用java代码实现前面查找的例子(找7)。
五、电脑鼠走迷宫的具体实现过程
1)电脑鼠每一步记录的数据
当前坐标四周的墙信息
下一步所要走的方向 Format: (towards)(up,right,down,left)
2)电脑鼠初始化
相关文档
最新文档