棋牌游戏大全,棋牌游戏app,棋牌游戏平台,棋牌游戏赌博,棋牌娱乐,棋牌娱乐平台,棋牌论坛,棋牌,开元棋牌,棋牌游戏有哪些,斗地主,扑克游戏,麻将,德州扑克,牛牛,麻将糊了,掼蛋,炸金花,掼蛋技巧,掼蛋口诀,抢庄牛牛,十点半,龙虎斗,21点,贵阳捉鸡麻将,牌九
:为了利用历史经验知识提高德州扑克博弈水平,提出一种二人赌注无上限的德州扑克博弈系统架构:对于知识库模块,利用海量历史牌局训练得到基于CNN的深度学习网络模型并构建了一个专家经验库;在系统的搜索模块中,构建了一种分阶段的德州扑克博弈树,利用专家经验和历史经验引导德州扑克博弈树的展开;对于系统的估值核心模块,构建了一种基于哈希技术的牌型对照表,以提高系统判定胜负的效率。实验结果表明本文提出的博弈系统架构具有更高的对弈水平。
德州扑克属于一种典型且复杂的非完全信息动态博弈问题[1-2],它是近年来计算机博弈领域的学者们重点研究的热点问题。2006年,加拿大阿尔伯特大学(University of Alberta)作为主办方举办了首届国际计算机扑克大赛[3];2007年,德州扑克博弈系统Polaris首次战胜了职业扑克选手[4]。2015年1月,加拿大阿尔伯特大学在Science期刊上发表了一篇关于德州扑克博弈问题最新研究成果的文章[5],该研究小组开发了两人参与的有赌注上限的德州扑克博弈系统,并得到了该博弈问题的理论解。但是二人赌注无上限的德州扑克问题,由于具有更高的复杂度(文献[6]证明了此类问题属于NP-hard问题),一直没有实现求解。2017年1月30日,美国卡耐基梅隆大学开发的德州扑克博弈系统Libratus与4名人类顶尖德州扑克选手之间的“人机大战”在美国匹兹堡结束,最终人工智能取得胜利[7]。这是人工智能在各种棋牌博弈中对人类取得的又一个胜利。本文提出一种二人赌注无上限的德州扑克博弈系统架构,构建了一个专家经验库;利用海量历史牌局训练得到基于CNN的深度学习网络模型;在系统的搜索模块中,构建了一种分阶段的德州扑克博弈树,利用专家经验和历史经验引导德州扑克博弈树的展开;对于系统的估值核心模块,构建了一种基于哈希技术的牌型对照表,以提高系统判定胜负的效率。
德州扑克博弈系统主要由5个模块组成,其中数据表示,主要指德州扑克博弈问题中的扑克牌和走法(即下注行为)如何在计算机系统中表示,根据德州扑克的规则,共有52张牌,没有大、小王。本系统采用二维数组来表示52张扑克牌,即poker[4][13],第一维表示扑克牌的花色,下标0、1、2、3分别表示黑桃、红心、方块、梅花;对于走法,在德州扑克中就是两个玩家的下注行为,根据规则,玩家的下注行为包括下注、加注、看牌、跟注和弃牌,在系统中用5个整型常量(1~5)来表示。
走法生成模块是指对于某个德州扑克局面,用此模块产生具体的走法,德州扑克的牌局局面分为玩家下注时对应的局面和发公共牌的局面。对于下注时对应的局面,其走法就是玩家的下注行为,根据规则,每个发牌阶段先表态的玩家允许的下注行为包括下注、看牌和跟注,后表态的玩家允许的下注行为包括加注、跟注和弃牌;对于发公共牌的局面,其走法就是生成某个发牌阶段所有可能被发放的公共牌组合。搜索引擎、估值核心和知识库这3个模块的设计将在后面的章节详细阐述。
对于德州扑克问题,下注阶段包括Preflop、Flop、Turn、River共4个阶段。随着手牌及公共牌的发放,随机性和不确定性的逐渐降低,各个阶段的搜索策略并不相同。对于系统的搜索引擎模块,本文设计了一种分阶段的二人赌注无上限德州扑克博弈树(总体流程图见图2),由于对方手牌不可见,博弈树搜索模块首先要生成所有可能的对方手牌牌型,然后根据每两张具体牌型以及目前牌局所处的下注阶段展开一轮下注过程,以此类推,进而描述在该下注阶段之后,牌局的完整对弈过程。当博弈树展开到叶子节点(Showdown node),调用估值函数,判定胜负关系并计算输赢筹码量。
本文提出一种基于哈希技术[10]的牌型大小对照预置表。哈希技术在棋类博弈问题(比如中国象棋[11])启发式搜索及开局、残局库中经常用到,基于哈希技术的置换表是启发式搜索中最为重要的算法,在计算机博弈系统中起着十分重要的作用。作为混合博弈树搜索引擎中的一种启发式搜索算法,在搜索中如果有和置换表中相同的节点,不用再向下搜索,可以直接调用表中的记录,这样省去了很多时间,从而提高了搜索引擎的效率[12-14]。本文将哈希技术用于建立德州扑克牌型大小对照表,在程序启动时,将牌型大小对照表加载到内存中,采用查表的形式代替繁琐的牌型判断,缩短判断牌型大小所需的时间,以提高引擎的搜索效率。
牌型对照表由牌型种类、同类牌型中的排名、是否已有数据标志位及牌型识别码4个字段组成。表的每一行占16个字节,表的尺寸为2.6M×16B≈42MB(其中2.6 M为$C_{52}^5$=2 598 960),采用哈希技术,随机生成52张扑克牌的32位整数和64位整数(即两个4×13的二维数组),通过各个扑克牌对应的数组元素进行异或运算,其中运算得到的64位整数代表5张扑克牌牌型;32位整数&0x3FFFFFF得到26位地址作为该牌型在表的主键(即数组下标)。定义表结构的伪代码如下:
基于哈希技术的牌型对照表虽然可以提高查询效率,但是哈希技术存在一个缺陷,即哈希冲突。哈希冲突是指:关键字key1≠key2,但是H(key1)=H(key2),这里H表示哈希函数。无论哈希函数多么地散列,哈希表存在的冲突都无法避免[15]。对于博弈树搜索中的基于哈希技术的置换表来说,即使存在冲突,可以通过搜索代替查表,影响的只是搜索效率;而本文提出的牌型对照表,用于Showdown阶段比较双方牌型大小,包含了所有的5张扑克牌牌型,不允许存在冲突。
本文采用一种深度学习方法[17-18]——卷积神经网络[19](convolutional neural networks,CNN),以海量历史牌局作为学习样本,利用已有知识预测对手的决策习惯[20]。通过国际计算机扑克博弈大赛网站提供的历届若干位高水平德州扑克博弈系统的历史牌局(约2千万个牌局)作为学习样本,将历史牌局视为完全信息动态博弈,对每一场德州扑克牌局采用卷积神经网络学习这些历史数据,从而掌握对手的决策行为建议。
根据表4显示的对弈结果可知,EXP + CNN版本的系统对弈EXP+EXP版本时,赢得了比较多的筹码,说明利用深度学习模型预测对手行为更加准确;实验中的人类玩家就是专家库的开发者,从表4可看到,人类玩家与EXP+EXP版本的系统对弈水平十分接近。另外,EXP + CNN版本的德州扑克博弈系统在2018中国大学生计算机博弈大赛上获得季军。没有取得更好成绩的主要原因:作为深度学习神经网络的输入数据,历史牌局没有经过仔细的筛选,如果选择那些更高水平德州扑克博弈系统比赛的历史牌局作为输入数据,训练得到的深度学习网络模型一定能够给出更优的决策行为。
本文提出一种二人赌注无上限的德州扑克博弈系统架构,在系统的搜索模块中,构建了一种分阶段的德州扑克博弈树;在知识库模块中,构建了专家经验库,引导博弈树中本方玩家节点的决策分支展开;并通过学习海量历史牌局数据得到一个深度学习神经网络,利用历史经验引导德州扑克博弈树中对方玩家节点的决策分支展开;对于系统的估值核心模块,构建了一种基于哈希技术的牌型对照表,以提高系统判定胜负的效率。实验表明,该博弈系统具有较高的博弈水平。对于未来的研究工作,应该参考冷扑大师的算法架构,在博弈系统中加入虚拟遗憾最小化算法(counterfactual regret minimization,CFR),进一步提高德州扑克博弈系统的对弈水平。