在写德州扑克AI的时候想到的一种实现模糊决策的方法

目前的AI决策方式是线性的,给定了一个条件X,代入一条曲线获得一个Y后直接作为决策值。略略灵活一点的,从两条曲线中取得两个值Y1,Y2,然后随机从两者中间的区域中取得一个值。

但是,这样做会使AI表现出非常明显的“边界”,与AI交流能够明显的感觉的AI的限度在哪里。感觉会比较“僵硬”。原因在于人类的决策过程并没有这种边界。当我们面对某一个条件X的时候,我们的决策“曲线”应该是这个样子的

如图,人类的决策没有明显的边界,所以看起来非常的模糊。模糊处理貌似是一个非常普遍的,在AI领域研究的比较多的内容。

我最近也一直在想如何能够实现这种模糊决策逻辑。最近忽然想到它既然能被表示成模糊的图像,为何不直接使用图像。

这种思路是从一张图片开始,为了简单,我们假设是一张32*32的图。

我们假设左下角为0点,横向为X纵向为Y。将这个图片读到计算机里面,读取每一个像素的红色色值,组成一个32*32的矩阵。矩阵横向表示条件参数X,纵向表示Y值可能的概率分布。

这样对应与每一个X值,我们都能够获得一个数列。在这个简单的例子里面,我们假设X=18,获得下面这样一条曲线。

这个曲线中,横坐标表示可能取到的Y值,纵坐标表示一个与Y值出现的概率成正比的数值,我们姑且称之为F(Y). 假设对图上这一系列离散的点进行求和得到的值为Σ,那么Y的概率分布函数P(Y)就可以表示为P(Y)=F(Y)/Σ。我们暂且不管他,就直接用这个F(Y)。我们把这些数值拼接在一起,并且记住每一个F(Y)所对应的Y值。

上面的饼图很好的说明了这种操作,这个饼一周的刻度是Σ即3009,右边的颜色表表明了饼上面每一个颜色区域表示的Y值。接下来的工作就所剩无几了。我们沿顺时针方向随机一个0~3009之间的数值,你会发现这个随机过程恰恰满足了我们所要追求的P(Y)概率分布函数。

这样,经过切片,排序,随机这三个过程,我们就从一个给定条件X获得了一个“模糊”的Y值。这种方式远远比用包络线来定义上下界要科学的多,我想如果用这种原理构建AI的决策系统,必然会让其非常的灵活,自然又不失规律性。

时间: 2024-08-26 13:44:31

在写德州扑克AI的时候想到的一种实现模糊决策的方法的相关文章

德州扑克AI简介——2015华为软件精英赛小结

2015华为软件精英挑战赛的比赛目的是设计德州扑克比赛的牌手程序,采用的是无限注的比赛规则.具体比赛规则见下面链接.在接到这个赛题之初,我们做的第一件事情是熟悉德州扑克的比赛规则,并尽可能去寻找现有的开源项目或者程序.具体来说,着手点主要有四点:维基.论文.比赛和开源项目. 首先阅读的是维基,这里参考的主要是英文的维基百科.通过维基百科,大致了解了德州扑克的发展历史和现状,并且得知在现在每年的都会有人与机器的德州扑克比赛和机器与机器之间的德州扑克比赛.此外,通过维基百科,还了解到当前主流学术界对

德州扑克AI实现 TexasHoldem Poker

参考了一下这篇文献,http://cowboyprogramming.com/2007/01/04/programming-poker-ai/ 自己用go实现了一个德州扑克AI,效果还可以. 正常和它玩耍的时候,互动性还不错.但是也有一点点问题,比如玩家乱来,把把都ALL IN(反正不是真的要钱),这其实就是在赌运气了,这种情况下测试AI丢牌的概率有点大,如何对付这种赖皮玩家,后期还要改进. 另外现在的实现其实是主要是概率运算,如何增加学习机制是一个努力方向,目前的想法是每一局结束以后,都去分析

德州扑克AI WEB版

继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信,这种全双工长连接更方便服务器及时的将整个游戏数据向客户端推送. 这篇随笔主要记录一下做前端界面的时候遇到的一些坑,至于德州扑克游戏的具体逻辑以及AI的逻辑可以查看我前两篇随笔 说道web服务器,go语言对这方面封装的非常好,用起来太爽了.而使用websocket,我们需要用到google提供的一个w

德州扑克AI(译)

前言: 最近在研究德州扑克的AI, 也想由浅入深的看下, 在网上找了一圈, 发现很多文章都提到了一篇文章: Programming Poker AI. 仔细拜读了一下, 觉得非常不错. 这里作下简单的翻译工作, 可能加些自己的一些理解, 权当做一回大自然的搬运工, ^_^. 扑克数据模型抽象(Poker Data Type): 本文的作者倾向于使用位/字节级别来描述牌的数据模型(Hand=玩家手牌+公共牌), 也算一种高阶的抽象. 花色(Suit), 其值范围为0..3, 并假定梅花(Clubs

德州扑克AI

德州扑克: 1:outs数,就是所听的牌的数量. 例子: 1:听顺子 4567 outs数就是8,能够成顺子的牌为3和8. 5689 outs数就是4,能够成顺子的牌只有7. 2:听同花     359J outs数就是9,能够成牌的是同一种花色的'A','2','4','6','7','8','10','Q','K'. 3:听同花顺 4567 outs数就是2,能够成牌的是同一种花色的'3','8'. 5689 outs数就是1,能够成牌的是同一种花色的'7'. 4:听同花或顺子 4567 o

德州扑克输赢判断-C#

首先讲一下思路吧. 德州扑克一把有7张牌,可能组成10种牌型,所以,在网络游戏中,不可能是两两比较,然后排序,最简单的做法就是对每个玩家的手牌计算一个权值,然后对最终玩家的权值进行排序即可得到最终的输赢顺序. 其实这个是我的毕业设计,在大三的时候,我曾在一位学长王总的带领下做过一个德州扑克的记录软件,那个软件比较简单,只是有记录员记录现实世界中正在进行的游戏,然后把玩家的牌,叫牌操作和游戏结果记录下来,以供将来重放时做教学使用.当时的项目并没有输赢判断的功能,而是由记录员自己输入输赢的玩家顺序.

德州扑克游戏

哇,好久好久没写东西啦... 这两天实现了一个简单的游戏引擎,可以发牌,可以比较两手牌的大小 由于最近都在倒腾Golang,所以用GO实现的.这阶段过后准备用这个引擎来实现一个简单的AI对战,现在先记录一下 接下来我假设你已经懂游戏规则和俗语了 首先是牌的储存,2~~A,一共13张牌,我用的是一个14位的二进制区间来储存的,比如2-A,将表示为:11111111111110,辣么第一位是干啥的呢,请继续看下面 这样的储存方式除了省空间外还有什么优势呢?我们顺子的判断为例:例如顺子10JQKA,在

模拟德州扑克对战游戏

================================================================ 注意:本文参考"巧妙的Python数据结构玩法|实战德州扑克"的相关内容,并在此基础之上完成模拟扑克对战游戏. 原文网址:http://mp.weixin.qq.com/s/JQ0zJGf7Tz49Xn78x7Z40g ================================================================ 我们写了两

一场改变你投资生涯的讨论:职业德州扑克手看交易

各位投友大家好. 校长今天花时间仔细读了一篇长文,叫做<职业德州扑克手看交易:没犯任何错误照样输个精光>,非常棒的文章. 可惜不知道作者是谁,但看得出来,文中讲到的他自己在德州扑克上的经验是真实的. 这篇文章提出了两个非常有价值的概念. 第一个叫盈亏同源.有一些亏损是你在追求盈利道路上必须要支付的成本,这是不可避免也是不应该避免的.因为你一旦避免了这些亏损,你同时也就失去了盈利的机会. 而另外一些亏损择时可以避免也是应该避免的.所谓高手就是在这个部分发挥功力. 第二个概念是把风险分成了三层:系