炸金花游戏(3)--基于EV(期望收益)的简单AI模型
前言:
炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI.
相关文章:
德州扑克AI--Programming Poker AI(译).
系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运气和所谓的心理对抗.
系列文章:
1. 炸金花游戏的模型设计和牌力评估
2. 炸金花游戏的胜率预估
3. 基于EV(期望收益)的简单AI模型
4. 炸金花AI基准测试评估
5. 动态收敛预期胜率的一种思路
EV模型:
在EV模型中, 有如下几个概念, 手牌胜率p, 总底池pool, 玩家自身的累计总下注bet.
EV = p * (pool - bet) - (1 - p) * bet= p * pool + (2p - 1) * bet
当EV>0时, 则表明玩家倾向于盈利, 若EV<0, 则表明玩家更倾向于输, 此时最优策略是pack, 及时止损. 但是EV是结果偏向, 并不是动作决策偏向的. 因此我们引入delta(EV), 即EV增量的概念, 来帮助AI进行具体的行动(check/raise/pk/pack/see)决策.
假定n为当前没弃牌的玩家总数, d为当前玩家的本轮下注筹码, d'因玩家是否see而引入的一个d的变化值.
对于EV增量, 我们如下定义:
delta(EV) = EV(下次轮到自己行动前) - EV(本次行动前) = p * ∑ d' + (2p - 1) * d
注: EV(下次轮到自己行动前)是个预估值, 因为不确定本次操作后, 其他玩家后续的操作, 这边做个平均值, 认为后续玩家全都跟注(check).
这样delta(EV) > 0, 则AI更倾向于check/raise, 若delta(EV) < 0, 则AI更倾向于提前结束战斗, 会选择PK或者pack.
这样AI决策的伪代码基本如下:
if EV(当前轮) > 0:# 选择check/raise后, 最大的delta(EV)的actiondelta(EV) = max(delta(EV) <- check, raise)if delta(EV) > 0:do check/raiseif delta(EV) <= 0:do pk/packelse if EV(当前轮) <= 0:do pack/pk
模型修正:
原先的EV模型是有陷阱的, 比如当前手牌胜率超过50%时, 此时EV>0, delta(EV)>0, AI会一直决策check/raise, 一旦遇到钢板会输的很惨. 究其原因是模型胜率是平均胜率, 其并没有根据对手的行为而动态调整范围.
解决方案, 即根据每一轮次, 根据玩家的行为(raise/pk结果), 逐渐提升剩下玩家的手牌强度, 重新计算胜率P, 这样胜率P是递减的, 这样就逃出了此前的模型陷阱.
至于胜率P如何重新计算, 这就是一个开放性的问题, 总之提升对手手牌的范围, 而不是加入胜率衰减因子, 这个方向是对, 就看这个度如何把握了.
在EV模型中, 还需要引入隐含收益, 即在手牌非常强大的前提下, 需要埋伏, 不能直接raise到最大, 把别人吓走, 导致最终的期望收益不高.
模糊策略的引入:
任何基于规则的AI, 同等条件下其行动策略是固定的. 为了不被别人利用规则漏洞, 需要引入一定的模糊策略.
在该策略下, AI的行为决策, 有一定的随机模糊性, 可以按8/2原则, 进行具体的执行.
比如手拿差牌, 可以主动进行raise, 起到吓唬的作用.
更多的工作:
1. 玩家用户画像的建立
2. see执行最佳时机
3. 隐含收益和利益最大化策略
4. 策略平衡和心理战引入
总结:
本文只是给出炸金花的一种AI实现思想, 是基于EV(期望收益)模型的. 下文将给出具体的代码, 以及面对基准测试集, 其模型能达到的效果.
对待博彩游戏, 希望大家娱乐心态行娱乐之事, 切勿赌博, ^_^.
转载于:https://www.cnblogs.com/mumuxinfei/p/10303702.html
炸金花游戏(3)--基于EV(期望收益)的简单AI模型相关推荐
- 炸金花游戏(4)--炸金花AI基准测试评估
前言: 本文将谈谈如何评估测试炸金花的AI, 其实这个也代表一类的问题, 德州扑克也是类似的解法. 本文将谈谈两种思路, 一种是基于基准AI对抗评估, 另一种是基于测试集(人工选定牌谱). 由于炸金花 ...
- 炸金花游戏(5)--动态收敛预期胜率的一种思路
前言: 前面几篇炸金花的文章, 里面涉及到了一个核心问题, 就是如何实现对手的牌力提升, 以及胜率的动态调整. 这个问题是EV模型, 以及基准AI里最重要的核心概念之一. 本文将尝试实现一个版本, 望 ...
- 炸金花游戏(1)--炸金花游戏的模型设计和牌力评估
前言: 好久没写博客了, 今天来补上一篇, 是关于炸金花游戏模型的设计和牌力评估. 其核心思想和之前谈到过的德州模型很像, 本文也想为炸金花游戏这个系列开个头, 希望后面能写写AI相关的文章. 相关文 ...
- 炸金花游戏(2)--炸金花游戏的胜率预估
前言: 我也是突然心血来潮, 想写写炸金花这类游戏的AI实现. 本文算是这一系列的第二篇, 主要写炸金花的胜率预估, 主要基于蒙特卡罗的思想, 胜率是炸金花AI的核心决策数据, ^_^. 相关文章: ...
- php金花游戏,PHP实现炸金花游戏比赛
这篇文章主要介绍了PHP实现炸金花游戏比赛的方法,实例分析了炸金花游戏的实现原理与相关算法技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP实现炸金花游戏比赛的方法.具体分析如下: ...
- Python实现炸金花游戏的示例代码
本文主要介绍了Python实现炸金花游戏的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下.编程学习资料点击领取. 今天的第二个作品,哈哈哈哈,搞起来感觉还挺 ...
- php竞赛,PHP实现炸金花游戏比赛
这篇文章主要介绍了PHP实现炸金花游戏比赛的方法,实例分析了炸金花游戏的实现原理与相关算法技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP实现炸金花游戏比赛的方法.具体分析如下: ...
- 以web形式实现模拟炸金花游戏
1.实现方式 * web形式,采用前端html+css,后台PHP的方式实现模拟的炸金花游戏* 纸牌数据的显示以图片的显示控制有php实现 2.样例展示 3.代码展示 4.功能说明 * 1.前端采用h ...
- 详细的Python炸金花游戏代码
** 详细的Python炸金花游戏代码 ** 觉得有用请点个赞吧 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' # @Time: 2022/07/ ...
最新文章
- R语言使用car包的scatterplot函数根据分组变量在不同的分组拟合不同的模型并在散点图中可视化每个分组的拟合曲线、并添加边缘箱图
- 数据库中关于convert的参数学习(转化函数用法)
- 绘制HTML5的Logo
- U3D 动画帧事件问题
- oracle之数据处理之约束练习
- macOS Mojave 升级到macOS Monterey
- UI设计素材|正确使用浮动按钮
- 百度SMS发送短信C#
- 程序员学习视频教程汇总
- python动态图片转字符画_【小工具】使用python将图片转彩色字符画
- PLOS_ONE_Genome-Wide Analysis of Long Noncoding RNA (lncRNA) Expression in Hepatoblastoma Tissues
- java4特征_java的四大基本特征
- matlab绘图工具
- 5G网络架构 — 接入网/传输网/核心网
- C# 获得%ProgramData% 路径
- Unity3D手游开发日记(3) - 场景加载进度条的完美方案
- 谷歌浏览器怎么设置默认隐身模式启动
- DST 根 CA X3 证书过期问题和修复
- 【Oracle 12c Flex Cluster专题】—节点角色转换
- android sd 设备特征码,【转帖】OD常用特征码大全+汇编指令
热门文章
- 【Grasshopper基础13】创建可在画布上自由传递的自定义类型数据(上)—— IGH_Goo接口的重要性及其实现
- c++/c/java 资源共享群
- Paper之CVPRICCVECCV:2009年~2019年CVPRICCVECCV(国际计算机视觉与模式识别会议国际计算机视觉大会欧洲计算机视觉会议)历年最佳论文简介及其解读
- 写一程序,用scanf函数输入x,输出y值。
- Failed to resolve: com.github.chrisbanes:PhotoView:1.2.6 Show in File Show i
- 根据手机号查询归属地以及制式信息
- 部署开源LWM2M服务器 leshan
- iPad上的数学软件介绍与畅想
- 对话框屏蔽Esc键的方法
- 结构体构造和析构函数