牛角棋最简单的机器博弈项目-Read.PPT

  1. 1、本文档共69页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
牛角棋最简单的机器博弈项目-Read

第二讲 牛角棋博弈程序分析与设计 徐心和 徐长明 东北大学机器博弈研究室 2009.5 主要内容 民间棋类计算机博弈 计算机该如何实现博弈过程的? —如何存储思维信息? —如何判断局面的胜负? —如何展开博弈树? —如何选择当前的着法? 从极大极小搜索到负极大值Alpha-bete搜索 计算机引擎程序的编写(C) 用C++编写牛角棋程序 算法优化 民间棋类计算机博弈 民间棋类的特点 规则简单,很容易入门; 不受专业知识限制; 棋盘小,棋子少,复杂度不高; 输赢容易识别,局面容易判断; 完全信息,编程相对简单; 人工智能的“果蝇”。 麻雀虽小,五脏俱全 从一个实例出发——牛角棋 最简单的机器博弈项目——机器博弈入门课 牛角棋 牛角棋广泛见于各地,别名较多,如憋死牛、憋死井、娃娃下山、娘子下山等。 棋盘形状及棋位数目也稍有差异。但是棋子、棋规都相同。 牛角棋棋规 红子可上可下,可左可右,一次一步,只能走向空位,不得重合与跳跃; 蓝子只上不下,可左可右,一次一步,只能走向空位,不得重合与跳跃; 胜负判断:憋死憋不死? 现在要考虑的就是 计算机该如何实现这个博弈过程? 如何存储思维信息?棋盘、棋子、棋局、博弈树 如何判断局面的胜负? 如何展开博弈树? 如何选择当前的着法? 如何存储思维信息? 编码 —— 数据结构 棋盘编码(棋位编码) 棋子编码 初始局面的表示 棋位向量:(100000023) 棋子向量:(089) 棋局演化的形式化描述 状态变量 棋子向量表示 初始状态 状态演化方程 其中 为棋子i 第n+1步的着法(算子) 着法规则: 红子可上可下,可左可右,一次一步,只能走向空位,不得重合与跳跃; 蓝子只上不下,可左可右,一次一步,只能走向空位,不得重合与跳跃; 着法的形式化描述 如何判断局面的胜负? 红胜:“逃出”—— 蓝胜:“憋死” —— 和棋—— 局面的无限次重复 如何展开博弈树? 如何表示博弈树? 两种不同的展开方式 两种不同的展开方式 牛角棋搜索引擎程序设计 深度优先搜索 选择深度优先搜索方法,可以在搜索过程中的任何时候仅仅生成(Make move)整棵树的一小部分,搜索过的部分被立即删去(Unmake move)。显然,这个算法对内存的要求极低,往往在内存只有几千字节的机器上也可以实现。并且同其他的选择相比,速度上也并不逊色。 如何选择当前的着法? 在展开的博弈树中搜索——博弈搜索引擎 基本原则:考虑到对手的存在 我们想到的内容,对手也一样能想到 对手会阻止我们达到目的 而且,对手会想尽方法使其利益最大化 如果是我方(红方)走棋,那总要找到博弈树中最好的棋局,而在考虑对方(蓝方)走棋时,就要考虑最坏的局面,因为双方都是理智的博弈者,不应该抱有任何侥幸的心理。 如果给每个棋局打分,那红方可以称得上是MAX方,蓝方便是MIN方。 基本方法:博弈树搜索(Max-Min, α-β, 负极大值α-β) 深度为3的博弈树 负极大值形式的Alpha-beta搜索 Alpha的含义:当前方已经存在某个着法,其估值至少为Alpha。 Alpha为最佳着法的下界; Beta的含义:对手存在某个着法,令当前方的着法的估值无论如何也超不过Beta。 Beta为最佳着法的上界; 负极大值形式的Alpha-beta剪枝只有Beta剪枝。 (alpha,beta)窗口 (alpha,beta)窗口 (alpha,beta)窗口 博弈树搜索过程 计算引擎程序的编写 首先需要解决的算法分析与设计 然后考虑算法的实现与编程 (编程语言,设计,编码,调试) 遵照软件工程学的思想 在程序设计方法学上下功夫 学习人工智能的先进理论与技术 —— 这是所有专业所必需的! 棋子的表示 #define REDSTONE 0 #define BLUESTONE1 1 #define BLUESTONE2 2 局面的表示(一) 初始局面的表示 int board[10] = { REDSTONE, 0, 0, 0, 0, 0, 0, 0, BLUESTONE1, BLUESTONE2, }; 局面的表示(二) 初始局面的表

您可能关注的文档

文档评论(0)

zhuwo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档