1. 算法简介
本文的麻将算法不是按人工智能的方式进行讲解,本人从事游戏服务器开发。所以该算法主要用于一般的麻将游戏机器人,主要是让机器人具有正常操作选择。算法无法与现实生活中的麻将高手进行对决,也没有经过严格的数学论证,但是为了应付麻将高手,会采取一些作弊的手段。所以本文除了讲述麻将算法,还将会提及麻将作弊的方式,以及该算法应用到实际机器人中对于机器人的等级划分方法。
该算法的核心宗旨是以权值驱动操作。所以本文将主要讲述从如何合理的精确的计算权值。以及在加入作弊因素情况下的权值计算方式。
2. 麻将算法
麻将算法的设计我们将采用贪心算法,即让机器人做出当前情况下最好的选择。
血战麻将:共108张. 万36张, 筒36, 条36张。
麻将过程中的操作:选缺牌,碰牌, 杠牌,胡牌, 出牌, 过。
2.1权值定义
权值设置说明:根据血战麻将规则定义相同花色相隔的牌为最小权值单元,定义权值为1.
手牌权值计算方法:基础权值+加成权值。
基础权值:相隔+1, 相邻+2, 2张相同+2, 3张相同+3, 4张相同+4,基础全职计算对象包括手牌和碰牌以及杠牌,但是杠牌和碰牌以及收必须进行分开计算。
加成权值:牌张数加成,风险加成
牌张数加成:根据当前花色牌的张数比,对当前花色权值进行加成。
定义万张数为x,定义万基础权值为y,则万牌张数加成权值z=y*(1+x/14);
风险加成:根据当前已知情况,出牌,碰牌,杠牌,胡牌所带来的风险对手牌权值和进行加成。定义:定义当前手牌牌张数加成后权值和为m,当前牌的风险系数为β,则风险系数加成后的权值n= m*(1+β);
2.2基础操作
本节根据玩家出牌动作对权值(不含风险加成)进行说明。
2.2.1 基础权值与张数加成
1.基础权值计算演示
2筒权值:与3筒相邻+2, 与4筒相隔+1, 共:2+1=3
3筒权值:与2筒相邻+2,与4筒相邻+2,与5筒相隔+1,共:2+2+1=5
4筒权值:与2筒相隔+1,与3筒相邻+2,与5筒相邻+2,共:1+2+2=5
5筒权值:与4筒相邻+2, 与3筒相隔+1, 共:2+1=3
4张牌权值和:3+5+5+3=16
3条权值:与3个3条4张相同+12,与5条相隔+1 共12+1=13
5条权值:与4个三条相隔+4 共:4
5张牌权值和:4*13 +4 = 56
2筒权值:无相邻,相同,相隔,权值为0
5筒权值:0
9筒:与1个2张相同+2;共2
总共权值:0+0+2*2 = 4
说明:权值为0的牌将在牌张数上面提升筒色整体权值。
条权值计算:
3条权值:与3个3条4张相同+12,共12
7天权值:与8条相邻+2
8条权值:与7条相邻+2
所有条的基础权值:4*12 + 2 + 2 =52
所有筒的权值:3(1筒)+3(1筒)+3(3筒)+ 3(4筒) +2(6筒) +3(8筒) +2(9筒) = 19
所有条的权值:2(1条) +3(2条)+ 4(4条) +5(5条) +5(6条) +3(7条)=17
筒基础权值:19
条基础权值:17
牌张数加成后权值:筒权值:19*(1+7/14)=28 条权值:17*(1+6/14)=24
所有手牌加成后的权值和:28+24=52
2.2.2 缺色操作
选择方式:分别计算法万筒条的权值A,B,C,
计算:
A=(2+2+1+1)*(1+4/14)=7
B=(2+2)*(1+4/14)=5
C=(13+13+13+13+5+1)*(1+6/14)=82
选择权值最低的花色进行定缺:B权值最小,所以选择缺筒。
选择缺牌后,手牌权值将不计算缺牌权值
2.2.3 有缺色出牌操作
直接出缺色牌。占时不考虑策略,直接按顺序出,或者随机出。
2.2.4 无却色出牌操作
选择方式:计算每张手牌X打出后,剩余牌的权值A。然后选择权最高的牌打出。
出2筒后权值和:(3+4+4+3+3+3)*(1+6/14)+ (12+12+12+12+1+3+2)*(1+8/14)=112
出1条后权值和:(3+5+5+4+3+3+3)*(1+7/14)+(12+12+12+12+1+3+2)*(1+7/14)=120
以此类推:计算法结束后, 选择A_max 对应的X牌打出。
2.2.5 碰牌操作
碰牌选择:计算现有权值A,计算法碰后最佳出牌的权值B,按照2.2.4中出牌方式计算即可。
如果A > B 则不碰,如果A <= B 碰,
A=(3+5+6+6+5+5+3+3)*(1+8/14) + (12+12+12+12+2+2)*(1+6/14)=130
B值计算:
2.2.6 杠牌操作
暗杠:
暗杠选择:计算暗杠后权值A,计算放弃杠后最佳出牌的权值B,如果A>=B则杠,否则放弃。
明杠:
明杠选择:计算明杠后权值A,计算现在有权值B,如果A>=B则杠,否则放弃。
补杠:
补杠选择:筒暗杠方式进行计算。
?:是否只有门派才能补杠,目前决豆麻将非门也能补杠。
2.2.7 胡牌操作
自摸:
自摸选择:计算胡牌权值A, 计算放弃胡牌后最佳出牌权值B, 如果A>=B,则胡,否则放弃。
炮牌:
炮牌选择:计算胡牌权值,计算当前权值B, 如果A>=B则选择胡,否则放弃。
2.2.8 多选择混合操作
同时可以进行出牌, 碰,杠,胡等操作组合。
选择方式:计算每种选择的权值以及放弃选择的最佳权值进行比较,选择权值最高的操作。
2.3风险加成
风险加成,麻将过程风险就是对输赢大小的预估。简单的来说输的番数和赢的番数。在血战麻将中输赢来源于两种情况:杠和胡。所以风险系数β将根据其输赢的番数进行定义。
风险系数由风险发生的概率和风险发生的结果决定。
定义
风险系数:β
定义当前手牌张数加成后权值和:m
定义当前手牌风险加成后的权值:n