计算机博弈基本原理
来源:互联网 发布:淘宝被管控处理怎么办 编辑:程序博客网 时间:2024/05/12 16:32
弈棋过程分析
为了深入探讨计算机博弈的原理与方法学问题,有必要分析二人对弈的演化过程,建立 相应的数学模型。图 2-1 给出了博弈状态演化过程图[5]。图中表明棋局状态是在着法算子作 用下进行演化的,其对应的状态转移方程可以写成 ) 0(, 011 S SqSS nnn = ⋅= ++ (2-1)
式中 0 S 为棋局的初始局面, 1 +nq 为第 n+1 步的着法算子,而 1 +nS 为下完第 n+1 步后的棋局。 于是,不难写出 QSqqqSS FF ⋅ =⋅⋅⋅⋅= 0 210 ... (2-2)
式中 F S 为终局,或红胜,或黑胜,或和棋。显然,着法序列 { } FqqqqQ ....321= 便是记载博弈过程的棋谱。其中奇数项序列Qodd={q q1 3....}为红方系列着法,而偶数项序列Qevn={q q2 4....}便是黑方的系列着法。
弈棋的过程是双方轮流给出着法,使棋局向着本方有利的方向发展,直至后的胜利。而弈棋的核心是如何给出着法。这是一个复杂的思维过程,简单说来就是:用着法推演局面,从有利的局面中选择当前的着法。显然如何正确地评估推演出来的局面则是选手棋力的重要体现。
为了让计算机能够下棋,首要的任务就是通过恰当的数据结构使棋类要素数字化,这里包括:棋盘、棋子、棋规(着法规则,胜负规则)等。
为了用着法推演局面和展开博弈树,就需要具有着法生成器,用以生成该局面下全部(或部分感兴趣)的着法。图 2-2 给出了博弈者思维过程的机器实现过程框图。从而可以产生如图 2-3所示的博弈树(Game Tree)。节点为局面,树枝为着法,根节点为当前局面,叶节点为展开相应深度的终点局面。双方轮流出手,偶数层为本方(方块表示),奇数层为对方(圆圈表示)。如果叶节点还不是能够给出胜-负-和的 终局面,则要对叶节点进行评估
(Evaluation)。以便从有利局面选择当前着法。这便是博弈搜索的职能。
搜索引擎根据极大-极小的搜索算法,找到对于本方而言 好的结局。然后找到佳路径(Principal Variation – 主要变例),从而找到相应的根着法(RootMove),即是本轮搜索所要给出的当前着法[5]。不难看出,评估和搜索将成为博弈软件的重要部分。根据以上的分析,可以给出计算机博弈软件的结构图。如图2-4所示。
棋局要素的数据结构
在采用宽度优先的搜索算法中,新被扩展的节点应该采用队列结构;而在深度优先的搜索算法中,则应该采用栈结构。
在博弈过程中是经常需要比较两个局面是否相同。如果是比较每个棋子的位置,或许不需要花很多时间,但是实战中常常需要比较的局面多得惊人(数以十万百万计),如在开局库中寻找对应的局面,于是这一操作的时间和空间开销便成为博弈搜索的瓶颈。
众多棋类的成功经验表明,棋局的存储 好是采用 Zobrist 哈希技术加以实现[7],即将棋局转换为哈希数(Hash Number)。哈希技术的基本原理是将棋盘上双方棋子的代码和坐标位置转换为对应的 64位随机数,将棋盘上全部棋子所对应的随机数异或求和,这个 64位的哈希数便作为给定棋局的索引值(Zobrist键值),用作棋局的存储与查询。
哈希数的 大优点就在于它求的是 64 位数的异或和,当在着法的作用下,棋局发生了变化,只要将相应变化棋子的哈希数再异或一次,便可以转变成新局面所对应的哈希数。
哈希表(HashTables)亦称散列表,除了用作开局库查询和重复局面检测之外,为重要的用途就是用作置换表(Transposition Table)。在博弈树中存在大量的因不同着法顺序(路线)而导致相同的局面。如果在搜索过程中将引起剪枝的局面和所对应的佳着法存放在置换表(TT)中,这样就可以节省大量重复局面的搜索。- 计算机博弈基本原理
- 计算机基本原理
- 计算机串口基本原理
- 计算机的基本原理
- 计算机工作基本原理
- 计算机基本原理之内存编址
- 计算机的基本原理
- 计算机基本原理总结
- 程序员应该知道计算机基本原理
- 计算机博弈教程 连载【一. 计算机博弈简史】
- Retina与计算机图形的基本原理
- 计算机博弈大赛参赛程序算法总结
- 两台计算机实现通讯的基本原理0分
- 计算机程序的思维逻辑- 函数调用的基本原理
- 学习C语言需要了解的计算机的基本原理知识
- 汇编中计算机基本原理部分名词缩写解析
- 基本原理
- 基本原理
- 批量修改超链接,单元格设置为变量修改
- 用RxJava实现RxBus
- 关于setTimeout
- 自定义实现广告自动轮播效果
- ng-repeat其中一列不被触发
- 计算机博弈基本原理
- iOS自动打包并发布脚本
- 修改shape的文字
- 每天学CUDA(一): cuda的julia集运行错误解决办法
- java nio
- python数据结构
- 最简单的 mysql for windows 绿色版配置,一键搞定
- 从fit文件中提取lick指数的matlab程序
- jq 生成缩略图