一种掼蛋扑克的机器博弈出牌方法、系统及存储介质

文档序号:25645405发布日期:2021-06-25 17:08阅读:605来源:国知局
一种掼蛋扑克的机器博弈出牌方法、系统及存储介质

1.本发明涉及深度学习和机器博弈技术领域,具体地说,涉及一 种掼蛋扑克的机器博弈出牌方法、系统及存储介质。


背景技术:

2.从上世纪40年代起,深蓝、alphago引起全民的关注,机器 博弈一直以来都是验证计算理论与人工智能理论的试金石。计算机 博弈是测试人工智能所达到水平的重要平台,是研究、开发用于模 拟、延伸和拓展人的智能理论的方法、技术及应用的一门学科(参 考文献:杨善林,倪志伟.机器学习与智能决策支持系统[m].ke xuechu ban she,2004.),机器博弈被誉为人工智能的果蝇(参考文献: 许燕红.人机博弈[j].艺术与设计,2016(4):150

151.),与果蝇在生物 遗传学中的作用相似,研究机器博弈产生的大量成果,可以应用在 下棋、扑克等更多领域中(参考文献:方园,赵姝颖,闻时光,等. 人机博弈技术展示——下棋机器人[j].机器人技术与应用, 2014(2):39

42.)。
[0003]
惯蛋是一种在淮安地区广为流传的扑克游戏,是由地方的扑克 牌局“跑的快”发展而来,牌局采用四人结对竞赛,使用两副牌、 输赢升级的方式进行,使牌局更富有创造性和娱乐性,
[0004]
牌型共有:两连对、炸弹、四王、同花顺、顺子、钢板、单牌、 对牌、三张牌、三带两等,其中牌型大小按照四个王>六张和六张 以上炸弹>同花顺>五张炸弹>四张炸弹>其他牌型,对于一般牌型 而言,只有点牌型相同和综述相同的牌,才可以比较大小,其中像 三带二、三顺等组合牌型,只要比较牌数最多牌值即可,只有当前 出的牌打的才能继续出牌。名次的先后顺序为头游、双下(就是和 对家最终为最后两名)、末游,扑克牌的顺序依次为大王、小王、 k、a、q、j、10、9、8、7、6、5、4、3,其中升级规则为最先出 牌结束的为头游,最后一个出牌结束的是末游。其中,如果是双下, 赢家升3级;对手一家是末游赢家升2级;赢家的对门是末游,赢 家升1级;单方三次头家,升1级;4次升2级以此类推;单方三 次末游,推一级;当达到a即为游戏结束。
[0005]
传统的扑克牌的计算方法存在:需要内存空间大,计算牌型不 够智能、配牌方式需要深度遍历和广度遍历结合的方式,每次出牌, 存在出牌时间久、缺乏通用型等问题。针对“淮安灌蛋”扑克的智 能博弈方法的研究较少,需要研究一种智能化、内存小、计算速度 快的出牌策略。


技术实现要素:

[0006]
本发明的目的是提供一种掼蛋扑克的机器博弈出牌方法、系统 及存储介质,计算方式简单,在每一个具体情境出现时进行推理, 实现更加接近人类玩家习惯的扑克策略。
[0007]
为了实现上述目的,第一方面,本发明提供的掼蛋扑克的机器 博弈出牌方法包括以下步骤:
[0008]
1)计算所持扑克牌中每种拆牌方式的拆牌损失e1及所拆牌型 对应的价值e2,计
算每种拆牌方式的能量值ea=e1+e2;
[0009]
2)比较每种拆牌方式的能量值,得到minea;
[0010]
3)计算价值k为常量;
[0011]
4)根据eb的值对应的牌型进行出牌。
[0012]
上述技术方案中,以淮安惯蛋扑克为研究对象,通过能量最小 化算法计算出牌方式,计算方式简单,通过计算拆牌损失和红心牌 加入后对整体的价值,选择最优的出牌方式,通过深度学习,训练 得到最优的k值,该方法更加注重出牌时的策略,在每一个具体情 境出现时进行推理,实现更加接近人类玩家习惯的扑克策略。
[0013]
作为优选,步骤1)中,所述的拆牌损失e1的值等于所持扑 克牌的个数。如“7、9、10、j、qqqq、k、红心5”的拆牌损失 为10。例如:当手中持有“8 10 j q k aaaa”,aaaa当作炸弹 出牌时,剩余单牌的损失整体变大,因为持有单牌数量过多。
[0014]
作为优选,步骤1)中,每种牌型对应的价值计算方式如下通 过以下方式确定:
[0015]
三张相同牌的value值:v3(i+1)=v3(i)+1;如v3(3)=v3(2)+1, 即3张3的值比3张2的value值大1。
[0016]
两张相同牌的value值:v2(i+1)=v2(i)+1;
[0017]
炸弹的value值:v4(2)=v3(a)+1,v4(3)=v4(2)+1;
[0018]
同花顺的value值:v5(2)=v4(a)+1,v5(i+1)=v5(i)+1;
[0019]
i为牌的数值;
[0020]
在抽到一手牌时,共有26张牌,从2

a共有13张牌,在灌蛋 扑克中会抽到一张牌,这张牌对应的红心就作为自由牌,可以替代 任何牌型;具体方式如下:
[0021]
当随机抽到本局打牌为红心5时,2~4对应value值分别是1~3, 6~a对应的value值分别是4~12,方块5、黑桃5、梅花5对应的value值为13,红心牌作为14以此类推;两个2小于两个3,五个 2大于4个a的定义进行牌的value值的定义。
[0022]
作为优选,步骤1)中,所持扑克牌分为以下三类:
[0023]
第一类有效牌c1:不拆牌的情况下,能够降低组数的牌;例 如,当手中持有“333 22”时,可以分两手出牌,当三带二把牌出了, 在不拆牌的情况下降低了牌的组数。
[0024]
第二类有效牌c2:不能降低组数,但可以增加价值;例如, 当手中持有“3333 45678”时,把原有的“333 345678”改出“3333 45678”,还是两手牌,把“3333”当作炸弹出牌,不降低整体出牌 组数,不降低出牌的组数,但是可以增加价值。
[0025]
第三类有效牌c3:不能提高c1、c2的效率,但可以帮助对家 压牌。例如,当手中持有“7 8 999910 j”出牌时,拆了9压了上家 的顺子,c3指会降低出牌组数或降低价值的出牌方式,为了帮助 对家上牌,拆掉手里的牌。
[0026]
第一类有效牌c1可以让组数降低,例如组数(z)降低的价值, 组数z表示一手牌,例如三个2是一组、两个3也是一组,拿到牌 不进行配牌,只要求组数最小ez=min(z)。
[0027]
作为优选,步骤3)中,常量k通过以下方法得到:
[0028]
预先给定k的值,当k=2,放大损失值进行计算,当k=1/2, 减少损失值战的比例进行计算,通过每次增加或减少0.5不断调整, 找到赢牌次数最多的k的值。首先通过把发到手中的一副牌,放入 深度学习神经网络中进行训练,通过改变参数:训练轮数 (epoch)、
归一化参数(min

max)、学习率(learning rate),获 得整副牌赢的概率最大的k的值。
[0029]
每个k值训练20次,计算当前k的赢牌概率,在程序中预先 设定增加0.5作为自动训练的方式,每增加0.5,测试一次赢牌的概 率,最终筛选出最容易赢牌的k的值。k的值会随着大牌的结果不 断进行调整。
[0030]
作为优选,所述的深度学习神经网络为基于蒙特卡洛树搜索的 神经网络。
[0031]
蒙特卡洛树搜索通过迭代一步步地扩展博弈树的规模,其中 uct算法(上限置信区间算法),是一种博弈术搜索算法,该算法 讲蒙特卡洛树搜索与ucb共识相结合,在超大规模博弈树的搜索 过程中发挥着时间和空间方面的优势。uct树是不对称生长的,其 生长顺序也是不可预知的,根据子节点的性能指标引导扩展的方向, 这一性能指标就是ucb的值,u在搜索过程中利用已有的知识, 给胜率高的节点更多机会,也要考虑搜索暂时胜率不高的的兄弟节 点。ucb的值按照如下公式计算:其中w
i
:子节点获胜的次数; n
i
:子节点参加模拟的次数;n:当前节点参与模拟的次数;c:加 权系数。蒙特卡洛的基本流程就是选择好的分支(selection)、在 叶子节点上扩展一层(expansion)、模拟对局(simulation)和结 果回馈(back propagation)四部分。
[0032][0033]
ucb计算公式
[0034]3‑
1)由目前所持有的牌型建立根节点,生成根节点的全部子 节点,每一手牌作为一个子节点,分别进行模拟对局;
[0035]3‑
2)从由所持牌构建的根节点开始,进行最佳优先搜索;
[0036]3‑
3)利用ucb公式计算每个子节点的ucb值,选择最大值 的子节点;
[0037]3‑
4)若此节点不是叶节点,则以此节点作为根节点,重复2;
[0038]3‑
5)直到遇到叶节点,如果叶节点未曾经被模拟对局过,对 这个叶节点模拟对局;否则为这个叶节点随机生成子节点,并进行 模拟对局;
[0039]3‑
6)将模拟对局的收益(一般胜为1负为0)按对应颜色更新 该节点及各级祖先节点,同时增加该节点以上所有节点的访问次数;
[0040]3‑
7)回到2,除非此轮搜索时间结束或者达到预设循环次数;
[0041]3‑
8)从当前局面的子节点中挑选平均收益最高的给出最佳着 法。
[0042]
作为优选,所述的网络结构结构包括:3个卷积层、一个 flatten层、4个dense全连接层和1个softmax层;在所述卷积层 中,卷机核大小为3*3,卷机步长为1;所述flatten层的作用是将 输入的多维数据一维化,也就是也就是把[height,width,channel] 的数据压缩成长度为height
×
width
×
channel的一维数组,然后 再与全连接层连接;在经过所述dense全连接层后,softmax层将 多个标量映射为一个概率分布,其输出的每一个值范围在(0,1); softmax函数经常用在神经网络的最后一层,作为输出层,进行多 分类。
[0043]
第二方面,本发明提供的掼蛋扑克的机器博弈出牌系统包括: 存储器、处理器以及存储在存储器上的计算机程序,计算机程序配 置为由处理器调用时实现上述掼蛋扑克的机器博弈出牌方法的步骤。
[0044]
第三方面,本发明提供的计算机可读存储介质存储有计算机程 序,计算机程序配
置为由处理器调用时实现上述掼蛋扑克的机器博 弈出牌方法的步骤。
[0045]
与现有技术相比,本发明的有益之处在于:
[0046]
本发明利用能量最小化算法和深度学习的方法,让机器学习打 牌的策略,通过调整参数快速实现最佳出牌方式。本发明的配牌方 式简单、耗时短、智能化运算,通过在训练中学习的方式,进行智 能化运算,实现一种高效且智能的出牌策略。算法上采用蒙特卡洛 算法,包含3个卷积层、一个flatten层、4个dense全连接层和1 个softmax层。最终找到最适合的出牌方式,并在人机扑克牌博弈 中取得胜利。
附图说明
[0047]
图1为本发明实施例的流程图。图2为如图1所示深度学习神经网络的网络结构图。图3为本发明实施例的四人参加惯蛋扑克游戏的竞赛规则示意 图。
具体实施方式
[0048]
为使本发明的目的、技术方案和优点更加清楚,以下结合实施 例及其附图对本发明作进一步说明。显然,所描述的实施例是本发 明的一部分实施例,而不是全部的实施例。基于所描述的实施例, 本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0049]
除非另外定义,本发明使用的技术术语或者科学术语应当为本 发明所属领域内具有一般技能的人士所理解的通常意义。本发明中 使用的“包括”或者“包含”等类似的词语意指出现该词前面的元件或 者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排 除其他元件或者物件。
[0050]
实施例
[0051]
本实施例中掼蛋扑克的机器博弈出牌方法基于蒙特卡罗树进行, 计算扑克牌的能量。首先计算所抽到牌面的能量,按照能量计算公 式进行计算,然后将牌分成三种基础有效牌形,进行配牌,对牌面 进行计算,通过深度学习训练参数,可以用一种最小的数据集获取 公式,并取得参数,算value值,按照value值实时调整出牌策略, 出牌的规则一共有三种类型,包括出牌、跟牌和冲刺。发明了一种 基于深度学习的计算策略,在扑克游戏中实现机器算法,对家的两 个角色采用相同的方法,两组算法进行扑克游戏竞赛,最终训练出 更加智能的扑克竞赛方法。参见图1,具体包括:
[0052]
步骤s100:计算所持扑克牌中每种拆牌方式的拆牌损失e1及 所拆牌型对应的价值e2,计算每种拆牌方式的能量值ea=e1+e2;
[0053]
拆牌损失根据所持扑克牌的个数来计算。
[0054]
每种牌型对应的价值计算方式如下:
[0055]
三张相同牌的value值:v3(3)=v3(2)+1;
[0056]
两张相同牌的value值:v2(3)=v2(2)+1;
[0057]
炸弹的value值:v4(2)=v3(a)+1,v4(3)=v4(2)+1;
[0058]
同花顺的value值:v5(2)=v4(a)+1,v5(3)=v5(2)+1。
[0059]
所持扑克牌分为以下三类:
[0060]
第一类有效牌c1:不拆牌的情况下,能够降低组数的牌;
[0061]
第二类有效牌c2:不能降低组数,但可以增加价值;
[0062]
第三类有效牌c3:不能提高c1、c2的效率,但可以帮助对家 压牌。
[0063]
例如牌型为2、2、3、4、5、5、6,如果不配顺子:
[0064]
e1=1(2,2)+1(3)+1(4)+1(5,5)+1(6)=5,
[0065]
e2=(1(2,2)+2(3)+3(4)+4(5,5)+5(6))/5=3;
[0066]
如果配顺子:
[0067]
e1=1(2)+1(2,3,4,5,6)+1(5)=3,
[0068]
e2=(1(2)+3(按4算)+4(5))/3=8/3。
[0069]
这里的value(5,5)=4是动态改变的,如果2,3,4的牌都已 经出完,那么value(5,5)=1。
[0070]
步骤s200:比较每种拆牌方式的能量值,得到minea;
[0071]
步骤s300:计算价值k为常量;k通 过以下方法得到:
[0072]
预先给定k的值,当k=2,放大损失值进行计算,当k=1/2, 减少损失值战的比例进行计算,通过每次增加或减少0.5不断调整, 找到赢牌次数最多的k的值;首先通过把发到手中的一副牌,放入 深度学习神经网络中进行训练,通过改变参数:训练轮数epoch、 归一化参数min

max、学习率learning rate,获得整副牌赢的概率最 大的k的值。每个k值训练20次,计算当前k的赢牌概率,在程 序中预先设定增加0.5作为自动训练的方式,每增加0.5,测试一次 赢牌的概率,最终筛选出最容易赢牌的k的值。
[0073]
参见图2,网络结构结构包括:3个卷积层、一个flatten层、4 个dense全连接层和1个softmax层;在所述卷积层中,卷机核大 小为3*3,卷机步长为1;所述flatten层的作用是将输入的多维数 据一维化,也就是也就是把[height,width,channel]的数据压缩成 长度为height
×
width
×
channel的一维数组,然后再与全连接层连 接;在经过所述dense全连接层后,softmax层将多个标量映射为 一个概率分布,其输出的每一个值范围在(0,1);softmax函数经常 用在神经网络的最后一层,作为输出层,进行多分类。
[0074]
步骤s400:根据eb的值对应的牌型进行出牌。
[0075]
如图3所示,面向惯蛋扑克游戏的算法,共四人参加游戏,通 过两个对家为一组的竞赛规则,两组采用不同的算法博弈,分别采 用两组算法,在竞赛中,首先配置竞赛的环境,实验包括计算机配 置,硬件配置包括计算机2080ti和电脑两台。
[0076]
例如在收到一副牌时,预先训练计算得出k=2.5,带入公式中, 首先计算ea=e1+e2,当手中持有“7、9、10、j、qqqq、k、红心 5”,其中红心5作为可以替换任意牌型的自由牌,具有以下出牌 方式:
[0077]
已知value(78910j)=30、value(910jqk)=32、value (78910jqk)=40、value(qqqqq)=55、value(qqqq)=45、 value(qqq)=35、value(7)=5、value(9)=7、value(10)=8、 value(j)=9、value(k)=11、value(红心5)=14。
[0078]
1.按照现有扑克牌进行计算e的值e=5+7+8+9+45+11+14=99
[0079]
2.出牌方法一:(顺子:7 8(红心5)9 10 j q k)(炸弹:
[0080]
qqq红心5)
[0081]
e2=40+35=75
[0082]
e1=10
[0083]
ea=10+75=85
[0084]
出牌方法二:(7、(9 10 j q k)、qqq、红心5)
[0085]
e2=5+32+14+35=86
[0086]
e1=10
[0087]
ea=e1+e2=96
[0088]
对比出牌方法一对应的能量值更小,通过通过把k=2.5带入得eb的值,找到最小的eb的出牌方式进 行出牌,每出一次牌,都重新计算一次ea和eb的值,找到最小的 eb出牌的方式进行出牌。最终将手里的牌出完。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1