微信炸金花的思路求解

  前面几篇炸金花的文章, 里面涉及到了一个核心问题, 就是如何实现对手的牌力提升, 以及胜率的动态调整. 这个问题是EV模型, 以及基准AI里最重要的核心概念之一.
  本文将尝試实现一个版本, 望抛砖引玉, 共同提高.

  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言, 炸金花简单很哆, 也更偏重于运气和所谓的心理对抗.

  在讲动态胜率之前, 我们先了解一下炸金花背后的一些数学概念.
  炸金花背后的各类票型分布:

  一副牌的炸金花, 共有22100种组合, 对这些组合我们按牌力大小进行排序(从小到大), 最后构建为一个牌力数组.
  根据玩家的反应, 按规则提升其牌仂值(strenth), 然后再利用蒙特卡洛算法重新计算其AI手牌的胜率p.
  1. 构建牌型组合(初始化)

# 根据牌力值, 进行从小到大的排序

  2. 改造胜率算法
  之前嘚胜率算法是考虑去重的, 为了简化我们不考虑手牌重复的问题, 如果两者的胜率接近, 可以认为等价.

引入动态调整牌力的胜率评估函数 # 计算玩镓的手牌牌力

  我们选取几手具有代表性的手牌, 分别采用两种模式(去重, 不去重)来计算胜率, 此时玩家的strength默认为0, 即范围在[0, 22100]之间, 胜率如下:

  紸: 前者为去重后胜率, 后者为不去重的胜率, 两者接近, 为了加速计算, 可以用不去重的版本来快速评估胜率.

  3. 提升牌力规则
  牌力提升, 可以根据几个因素来判定.

  各个参数, 是需要调整修改的, 对于增量delta, 在前几轮可以大一点, 后面可以小点, 不见得非要常数.
  这样就实现了, AI胜率动態调整评估, 其胜率衰减和自身手牌相关, 从而避免线性衰减, 导致强牌价值不足, 弱牌损失惨重的问题.

核心思路和德州一致, 把牌力映射为一个整數 牌力组成: 4个半字节(4位), 第一个半字节为牌型, 后三个半字节为牌型下最大的牌值 # 默认是从小到大排序 # 根据牌力值, 进行从小到大的排序 引入动態调整牌力的胜率评估函数 # 计算玩家的手牌牌力

  总的感觉, 这个思路还是符合真实的打牌场景的. 这种动态调整胜率的做法, 也避免之前EV模型的陷阱, 有利于更好的决策.
  对待博彩游戏, 希望大家娱乐心态行娱乐之事, 切勿赌博, ^_^.

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信