机器博弈游戏在单片机上实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表 1 传统二维数组结构和规则化的双映射表结构空间占用的比较 空间占用 (单位 : 字 ) RAM FLA SH 二维数组 0 17* 25 双映射结构 序号 /位置映射 0 9 * 14 棋子号 /序号映射 2月 20 日 0
2 具体的实践
中国跳棋的例子
下面用中国跳棋 博弈程序在单片机上的实现这个实例来 进行具体说明。 首先 , 选取的单片机芯片是凌 阳 SPCE061A, 它是一 款 16 位结构的微控 制器 , 内嵌 32K 字的 闪存 ( FLA SH ), 主 要的 性 能参 数 有 : CPU 时 钟 0. 32MH z ~ 49. 152MH z, 内 置 2K 字 SRAM、32K 字 FLASH。和 PC 机 的 CPU 芯 片相 比 , 单片机 芯 片在速度上和存储器 容量上 都显不 足 , 尤 其是在 运行较 大规 模计算和较大数据的 存储上 , 需要 设计一 种优化 时间和 空间 的解决方案。 其次 , 中国跳棋是一种规则较简 单的博弈游 戏 , 可 以有 2 个人到 6 个人同时进 行 , 棋 盘为六 星型 , 棋子分 为六 种颜色 , 每种颜色 10 个棋子 ( 3 个以 下玩 家每人 可用 15 个 棋子 ), 每 一位玩家只一个角 , 拥有一种颜色的棋子 , 该游戏最大的特点 是整个过程中所有棋 子都在不停被俘获或移动。 2. 1 棋盘和棋子存储结构的修改和优化 出于空间和时间 的考虑 , 跳棋棋 盘的表 示不能 采用传 统 的二维数组 , 因为单片机芯片是按字进行存储的 , 二维数组的 表示将占用不 少的 空 间 , 更糟 的 是单 片机 的 SRAM 只 有 2K 字 , 我们不可能将棋盘和棋 子的二 维数组 表示放入 RAM 中 , 只能放在 FLA SH 中 , 但是 FLASH 的写操作是很 消耗时间的。 如果采用二维数组表 示 , 那 么在每 一次棋 盘上的 变动都 会产 生 FLA SH 写操作 , 时间消耗很 大 , 另外 中国跳 棋只 有少量 的 棋子 ( 双人游戏时 , 只需要 20 个棋子 ) , 而 且棋子 之间是 没有 差别的。所以如果用 一个字的 空间表 示棋子 号 , 显 然有很 多 空间的浪费。所以设 计出一种 新的结 构 , 来优化二 维数组 的 存储结构。 棋盘 和棋 子 的表 示肯 定要 放到 FLA SH 中 的 , FLA SH 的 读操作与 ROM 的读操作的 时间差 别不 大 , 所 以对 FLA SH 中 棋盘只要求读操作。 棋盘上 共有 121 个 点 , 首 先将 所有的 点 编一个唯一的序号。 新的结构命名为序号 /位置映射结构 , 它就是将二维数组 的下标的位置信息用 一个结 构体表 示 , 该 结构体 包含行 号和 列号两部分。由于棋盘是不规 则的 , 所以需要将棋盘规则化 , 使它能节省大量的空间和方便 地使用坐标表示 , 图 2 所示 , 将 棋子重新排布后存入棋盘点的 序号 /位置映射表 , 这是一个结
I m ple m ent of adversarial game on the Single Chip M icyoco
YANG Jun , ZHANG Bo (College of Sof t w are, N ankai Un ivers ity, T ianjin 300071, China )
第 26 卷第 2期 2006 年 2 月
文章编号 : 1001- 9081( 2006) 02- 0462- 03
计算机应用 C ompu ter App lications
V o. l 26 No. 2 Feb. 2006
机器博弈游戏在单片机上实现
杨 军, 张 波 ( 南开大学 软件学院, 天津 300071) ( Jy820314 @ eyou. com ) 摘 要: 介绍了博弈程序在单片机环境下的实现方法, 讨论了单片机运行速度和空间容量与博弈 程序匹配问题的解决方案 。通过对程序及数据占用空间的优化以及提高程序执行效率, 达到适应单 片机的运行环境的目的。 结果显示 , 经过优化的博弈程序在单片机环境下可以达到相当的智能水平。 关键词: 单片机 ; 机器博弈 ; 人工智能; 搜索技术 中图分类号: TP18 文献标识码 : A
图 1 九格棋的游戏树表示
1 博弈游戏的主要组成部分
1. 1 搜索技术 棋盘和棋子的表 示主要是指用数据结构表示棋盘上的信 息 , 通常用一个二维数组 表示棋 盘和棋 子的信 息。在人机 博 弈时 , 机器需要找到一个 合理有 效的动 作 , 即 走步 , 这种寻 找 的过程称为搜索 , 在搜索的 过程中 需要用 数据结 构表示 整个 过程。一般来说 , 用游戏树表示这个过程。以九格棋为例 , 游 戏树如图 1 所示。
463
源自文库
度的最后一层是不能分出胜负 的 , 这就需要估值函数 , 对当前 的局面进行评估 , 根据值的大小表示对哪方有利。 估值函数的设计 与特定的 游戏规 则紧密 相关 , 而且主 观 性强 , 很难做到对局面精 确地估 值 , 但 一般来 说 , 可 以通过 以 下几个方面考虑局面 的优劣 : 1) 棋子的数量和价值 , 对于不同的棋子价值肯定有 所不 同 , 以中国象棋为例两个马要优于一个马 , 一个车要优于一个 马或一个炮。 2) 棋子的位置 , 除了棋子 的价 值外 , 棋子 所在 的位置 也 至关重要 , 例如处于边角的马与处于中央位置的马 , 肯定价值 不同。 3) 棋子对棋盘的控制能力 , 加入棋子对整个棋盘上 的关 键位置都具有控制能 力 , 那 么相应 的对方 的棋子 就处于 被动 局面。 4) 棋子之间的协调 , 明显地 , 如果各个棋子 的搭配得当 , 那么会产生很强的攻 击力或者很坚稳的防守。 5) 其他特殊的优势 ( 劣势 ), 这部分与 具体的游戏有关。
象棋里 , 走法的产生就要复 杂一些 , 马走 日、 象走田等 等复 杂 规则都需要考虑。 1 . 3 估值函数 先回到图 1 的游戏树 , 对于 九格棋 的游戏 树所有 叶子 节 点的个数是 9 8 7 6 5 4 3 2 1= 362 880, 对这 种 简单的 游 戏 , 如 果 不 加 任 何 的 搜 索 优 化 技 术 , 需 要 搜 索 362 880个节点。对于较 复杂 的棋 , 以中 国象 棋 为例 , 每 一 个 局面可有 20~ 60 种走法 , 以平 均 40 步走法计 , 一 般双方各 走 50 步就可以分出胜负 , 那么 这棵 游戏树 将有 10160 个节 点 , 这 将远远超出计算机的处 理能力 , 所以 我们不 可能搜 索到游 戏 的结束。为此我们在搜 索时需要 指定搜 索的深 度 , 在 指定 深
Abstract : An i m p le m ent of adversa rial g a m e on the sing le ch ip m icyoco w as presented , and the so lu tions about the m atch be t w een SCM s speed w as discussed, space and adversar ia l progra m. To adapt the adve rsarial prog ra m to SCM env ironm ent , the so lution opti m ized the space that occup ied by progra m and data , m ade the ex ecution m ore effic ient . T he experi m enta l results suggested tha t the opti m ized adv ersaria l prog ram under SCM env ironm ent can ach ieve a good intelligence . K ey words : SCM; m achine adve rsaria; l artific ial inte lligence ; adversa rial sea rch 机器最有利 , 同时 也要考虑到 对手走 出对机 器最不 利的一 个 走步的可能性 , 从 游戏树中看 , 也就是找到最底层叶子节点 所 对应局面的估值情况 , 若最底层处于根节点下的奇数层 , 则 搜 索该层的最大值 , 即找到使得 产生的 局面对 机器最 有利的 一 个走步 , 若最底层 处于根节点下的偶数层 , 则搜索该层的最 小 值 , 即考 虑到对手 走出 对机 器最 不利 的一 个走 步的 可 能性。 不管是奇数层还是偶数 层 , 两 种搜索 都将找 到的最 值返回 到 上一层 , 再依次向上递推 , 当返回 到根节 点的下 一层时 , 取 该 层所有局面评估值的最 大值所 对应的 局面为最 优的局 面 , 那 么机器将选择产生该局面的走步 , 作为最优的走步。 1 . 2 可走步的产生 在讨论搜索技术的过 程中 , 机器要 搜索所 有可能 产生 的 局面 , 所 以不可避 免的 要涉 及到 当前 局面 下可 走步 的 产生。 各种机器博弈游戏的规 则不同 , 走法 产生的 复杂程 度也有 较 大的区别。例如 , 五子棋的棋 盘上的 任意空 白都是合 法的 下 一步 , 这 样五子棋的走法产 生模块 里 , 只 要扫描 棋盘 , 寻找 到 所有的空白 , 就可 以罗列出所有符合规则的下一步 ; 而在中 国
收稿日期 : 2005- 08- 29 ; 修订日期 : 2005- 10- 31 作者简介 : 杨军 ( 1982- ) , 男 , 天津人 , 硕士研究生, 主要研究方向 : 人工智能博弈算法、 语音信号处理 ; 教授 , 主要研究方向 : 语音信号处理 .
第 2期
杨军等 : 机器博弈游戏在单片机上实现
构体数组 , 每一个 元素包含该位置所在的行号和列号 , 它的 长 度是 121 。
图 2 中国跳棋棋盘表示的规则化
由图 2 可以看出该数组 可以 定义 成 9 行 14 列。简单 地 说 , 就是将位置坐 标信息放入数组的存储空间 , 而位置序号 信 息放入数组的下标 , 如果需要对棋盘上的棋子位置进行更新 , 只需要更改放在 RAM 中的棋子号 /序号映 射表 , 这样一来 , 就 不需要对放在 FLASH 中 的棋 盘进 行 写操 作 , 节 省了 FLASH 写操作与 RAM 写操作的 时间差。因 为博弈 程序包 含搜索 过 程 , 棋盘 必然会多次更改 , 所以节省的时间是很可观的。 进一步 , 对放在 RAM 中的 棋子号 /序号映 射表可 以进 行 优化。单片机芯片 是按字 进行 存储的 , 棋 子号 的空间 是 0 ~ 19( 双人游戏 时 , 只 需要 20 个棋 子 ) , 序号 的 空间 是 0 ~ 120 ( 棋盘上共 有 121 个点 ), 每个字的占 16位 。所以我 们可以建 立 20 个空间的一维数 组 , 数组的每 个元素 表示两 个序 号 , 用 高 8 位和低 8 位分别表示。 综上所述 , 传统二维数组 结构和规 则化的 双映射 表结 构 空间占用的比较如表 1 所示。
张波 ( 1972- ) , 男 , 陕西安康 人, 副
在机器准备搜索时 , 当前棋盘的状态用树的根节点表示。 在根节点下机器可能 有很多 可以选 择的走步 , 并 由此产 生新 的棋盘状态 , 这些棋盘的状态用根节点的子节点表示 , 然后对 于每一个节 点 , 机器 的对 手也 将有 很多 种选 择 , 依次 延伸 下 去 , 可以得到如图 1 所示的游戏树。 游戏树中的每一 个节点都可以用估值函数对局面进行评 估 , 返回整数值 , 数值 越大表示 对机器 越有利 , 反之 对机器 越 不利。 搜索技术就是找 到这样的 一个走 步 , 由 它产生 的局面 对
相关文档
最新文档