东北大学人工智能大作业.docx

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

机器博弈(Machine Game Playing)注:维基百科和百度百科中对机器博弈的介绍较少,如有错误请多指教。01 关于机器博弈机器博弈的含义:机器博弈就字面意思理解,即机器参与到博弈的过程当中,这不仅包括机器与机器之间的博弈,也包括机器与人类之间的博弈。机器博弈的特征:智力竞技——机器博弈过程中机器与对手之间存在着智力上的比拼,并以此区分胜负。1.3 机器博弈的目标:击败对手——机器博弈涉及多个主体,其最后的结果为分出胜负,博弈双方的目标均为击败对手,02 博弈问题的描述(以棋类游戏为例)2.1 博弈问题的形式化定义:博弈被定义为一个四元组:G,O,s(o),s(g) 其中:(1) G ={c}:博弈空间 (棋局或博弈状态的集合)(2) O ={o}:算子空间 (操作或规则的集合)(3) c(o)G:当前棋局或博弈状态 (最初即开局)(4) c(g)G:胜局或博弈目标集合应用 O 中的算子 (操作或规则) 对 c(o) 进行操作,使其有利于转换为胜局 c(g)c(g)的过程称为博弈。2.2 博弈问题的三要素:c(o)和 c(g)以及O(1) 操作 (又称规则或算子):o: G G 或: c(j) = o(c(i)) (c(i),c(j)G ; oO)(2) 当前棋局 (最初是开局):c(o)G (机器当前面对的棋局)(3) k-步博弈树:基于 c(o) 的 k-步博弈规划图03 机器博弈举例3.1 一字棋与极大极小算法3.1.1 Max-Min 博弈:Step1. 生成k-步博弈树Max代表机器一方/ Min 代表敌方 设 Max 面对的当前棋局为 c(o),以 c(o)为根,生成 k-步博弈树Step2. 评估棋局(博弈状态)估价函数:为特定的博弈问题定义一个估价函数 est(c),用以评估 k-步博弈树叶节点对应的棋局 cG,est(c) 的值越大,意味着棋局 c 对 Max 越有利。Step3. 回溯评估极大极小运算:由叶节点向根节点方向回溯评估,在Max处取最大评估值(或运算),在Min处取最小评估值(与运算)。注:Max 按取最大评估值的方向行棋Step4. 递归循环Max 行棋后,等待 Min 行棋;Min 行棋后,即产生对于 Max 而言新的当前棋局 c(o);返回 Step1.,开始下一轮博弈 3.1.2 一字棋:设有 33 棋格,Max 与 Min 轮流行棋,黑先白后,先将 3 颗棋子连成一线的一方获胜。一字棋博弈空间 :共有 9! 种可能的博弈状态一字棋算子空间 :博弈规则集合O={*#!@^###+%$$$}一字棋博弈目标集合 (对 Max而言):定义估价函数:est(c)(1)对于非终局的博弈状态 c估价函数为:est(c)=(所有空格都放上黑色棋子之后,3 颗黑色棋子连成的直线总数)-(所有空格都放上白色棋子之后,3 颗白色棋子连成的直线总数)。例如:c= 则est(c)=3–2=1(2)若 c 是 Max 的胜局,则:est(c) = + 例如:c= (3)若 c 是 Min 的胜局,则:est(c) = – 例如:c= 3.1.3 Max-Min 博弈过程:step1.以 c(o) = 为根,生成 2-步博弈树:step2.评估博弈树叶节点对应的博弈状态step3.进行极大极小运算(Max-Min运算)Max 按取最大评估值的方向行棋step4.等待 Min 行棋,产生新的 c(o)返回 step1.3.2 五子棋机器博弈问题var maxmin = function(board, deep) { var best = MIN; var points = gen(board, deep); //这个函数的作用是生成待选的列表,就是可以下子的空位 for(var i=0;ipoints.length;i++) { var p = points[i]; board[p[0]][p[1]] = R.com; //尝试下一个子 var v = min(board, deep-1); //找最大值 //如果跟之前的一个好,则把当前位子加入待选位子 if(v == best) { bestPoints.push(p); } //找到一个更好的分,就把以前存的位子全部清除 if(v best) { best = v; bestPoints = []; bestPoints.push(p); } board[p[0]][p[1]] = R.empty; //记得把尝试下的子移除 } var result = bestPoints[Math.floor(bestPoints.length * Math.random())]; //在分数最高的几个位置中随机选择一个

文档评论(0)

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

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

1亿VIP精品文档

相关文档