由于跑得快牌数量较少,可以考虑使用枚举所有组合,并获取其最大权值出牌
基本思路:
类似于多叉树,每一个数节点为一个出牌组合,例如 3445566778,这种情况下最好的组合为34567 45678 较次一点为 44 55 66 77 3 8
在考虑生成子节点时,考虑 对子 顺子 连对 三带 剩下的则为单张,单张不能与其它牌组合, 由于跑得快第一要点为手上的牌越少越好,因此拿到出牌权限时因该先出派最多的组合。因此如果能建立一颗树,其中树跟到其子节点为出牌组合,选取其中权值最大的组合(即能把牌出的最多),则为最优。
权值:按照跑得快规则 3 4 5 6 ... A 2其值越来越大,按照出牌思路,一般先出小牌,再出大牌。因此权值为 3 4 5 6 7 ... A 2 其权值越来越小,换句话说,如果有 33 55 77,33权值最大 77 权值最小,在相同情况下33优先出。
再将多叉树与权值组合,按照第一个例子 3445566778 ,34567 45678 其权值大于 44556677,在生成树时,单张牌不在生成子节点考虑范围内。
生成多叉树细节:
以3445566778考虑,多叉树至少有四个节点,拆出 对子 顺子 连对 三带 ,以其中顺子为例
首先抽取其中最大的顺子,345678,然后对其排列组合,可以分解成34567 45678 345678
然后再将其抽取的牌从手牌中删除,再对其对子 顺子 连对 三带判断,直至找不到牌为止。
然后再计算根节点到子节点这组合的权值,与全局最大值进行比较,取全局最优,那么理论上这个组合就为当前牌的最优解。
下面为34455667788的多叉树,由于树太大,所以选取其中一种路径
由于连对和对子其实为同一种,因此权值考虑时要给予奖励,例如权值(4455) =(权值(44)+权值(55))*1.1
其他也类似
缺点:
计算量较大,需要枚举所有可能性,当手牌数量增加,计算量成指数增长。
总结:
在接近一个月的测试中,三人对战前两名为胜利则平均胜率为65左右。