从头开始构建德州扑克AI玩家

34

我想在Java中构建一个Texas Hold 'Em AI引擎。这是一个长期的项目,我计划至少投资两年时间。我还在上大学,在编写任何雄心勃勃的东西之前,想要解决一个长期感兴趣的问题。我对AI领域还很新。从我在大学的数据结构课程中,我了解基本的构建块,如BFS和DFS,回溯,DP,树,图等。我正在学习正则表达式,为SCJP和SCJD学习,并将很快参加一门(密集的)统计学课程。

问题:

-我应该从哪里开始?我应该选择什么书?扑克程序运行在什么类型的AI上?有哪些开源项目可以借鉴?有没有好的Java AI资源?我也有兴趣学习Lisp,Jatha好吗?


12
你成功开发出任何东西了吗?已经过去两年多了…… - Radu Murzea
9个回答


6
扑克AI因人类的不可预测性而极难做到完美。通常分为两个部分。
1)计算您手牌获胜的几率。
2)制定基于1的下注策略。
我建议首先大量阅读有关第1部分的统计学知识。乍一看似乎很容易,但实际上非常复杂(如果出错会导致AI失败)。然后,再开始研究第2部分的遗传算法。下注策略主要是遗传算法,它们根据过去的成功和失败进行自我调整,并加入一些随机性,以免变得可预测。

3

2
如已建议的那样,《扑克理论》这本书对于玩游戏以及构建人工智能都是非常宝贵的信息源。你可能应该买它,因为它的价格不会太高。
目前,阿尔伯塔大学的研究小组处于最先进的水平,尽管他们时不时地会遇到激烈的竞争。(由于诱惑使用自己在网络扑克中的结果,因此该领域的所有扑克机器人和人工智能研究并不是公开的。)
首先,您应该决定您要先解决什么样的扑克问题。两个玩家的德州扑克几乎是可以解决的,尽管最好的人类仍然与现有的最佳人工智能进行了一场真正的较量。AI比人类具有更大的优势,因为它们拥有过去手牌无限无缺的记忆,基于这些记忆进行无瑕疵的模式分析,并且它们是机器,不像几乎所有人类偶尔会倾斜。
固定德州扑克可能是最容易破解的,因此您可能希望从1-1固定德州扑克开始,然后再决定您想做什么。
以下是一些影响正确策略(和您的AI)的因素:
- 现金游戏与锦标赛不同 - 玩家数量使决策不同。 - 德州扑克并不是唯一的扑克。奥马哈、斯塔德等也存在并且广泛玩耍。 - 固定限制不同于底池限制,底池限制又不同于无限制。 - 要击败最好的人,您需要涵盖许多最好的玩家在玩时考虑的非常微妙的事情。要击败低注业余比赛,这些事情都不重要。
如果您决定去尝试无限制德州扑克,您可能会想看看三本书系列《哈林顿关于德州扑克》和一本书《无限制扑克-理论与实践》。我已经读了很多关于扑克的书,可以说这些书加上《扑克理论》就足够了。

2
此外,遗传算法可以调整神经网络的权重,从而确定决策逻辑。这种方法非常适合扑克AI。
我自己也制作了这样的AI。起初,我创建了约1000个完全不知道如何玩游戏的玩家。根据他们在游戏中初始的运气,对他们的适应度进行加权并创建新一代。新的“大脑”比前一代表现更好。
最终,最优秀的个体表现得非常出色。

4
你有在任何地方公布你的研究结果吗? - Jonas Elfström
当你说最好的表现非常出色时,你是指与其他AI还是与人类对战?我认为遗传算法表现不佳。扑克是关于了解你的对手,而不是概率。除非你的遗传算法包括有关下注时距离按钮的信息,否则我会怀疑你的结果。 - jmucchiello
1
你没有理解。遗传算法根本没有起作用,神经网络才是主要运行的部分。遗传算法只是为了根据它们的成功来进化网络(调整权重)。我与最好的个体进行了比赛,表现得相当不错。它的逻辑中没有可检测的模式。我还从一个扑克客户端挖掘了500k手数据,并从其中几位最好的玩家(使用神经网络)制作了模型。最好的个体也击败了这些模型。在一百万手后,平均每100个大小盲注能够获得1.5个大小盲注。 - nhaa123
2
你有关于这个的更多细节吗? - f0ster

2
我不确定您感兴趣的是哪个具体游戏,但通常的方法是创建一个更小的抽象版本的游戏,解决这个较小的游戏,然后将真实的游戏情况映射回抽象游戏以生成建议。大多数学术论文都会省略这个过程的细节,而是提供有关收敛、利用和竞争结果的结果。
然而,有一些公开可用的代码库提供了完整的实现。其中最好的一个是Fell Omen:

http://www.deducer.org/pmwiki/pmwiki.php?n=Main.ArtificialIntelligencePoker

这是一个基本的完整策略机器人,它使用虚构游戏来优化抽象游戏的策略。它是一个很好的起点,因为它相当简单明了,完整,并代表了抽象游戏方法的良好展示。
如果您有兴趣开发扑克牌AI,我建议阅读UA扑克小组和Tuomas Sandholm的学生从2007年开始的所有内容。

http://www.cs.cmu.edu/~sandholm/

http://poker.cs.ualberta.ca/publications.html


1
我在本科时写了一个Hold'Em AI。它并不是特别先进,我使用了一个Q-Value机器来遍历多个状态,并更新每个状态的Q值。
我发现Alberta大学的AI扑克项目是避免陷阱的宝贵信息来源。
如上面某位作者所述,第一步是确定几个可确定的扑克规则——一对一的扑克可以通过程序开发。
我掉进的一个陷阱是没有早期建立可重构性。例如,能够在学习/玩耍的级别之间进行切换。
我很想听听你们的进展,请给我发邮件:stevekeogh@gmail.com

0

只是为了补充上面的链接,其中一个重要的实现事项是http://en.wikipedia.org/wiki/Kelly_criterion,它将帮助确定在一系列赌注中给定期望赔率的最优赌注大小。 对于人类来说,可能会存在对赔率判断的错误,但是如果您的AI程序可以基于算法吐出一些预期的标准化赔率,那么这种同时平衡风险和回报的投注大小技术就是有优势的赌徒的一个好的廉价解决方案。


-1

我听说一个有趣的结果是,如果你将投注选项限制为弃牌、检查和全押,你可以编写一个AI,在一对一的情况下至少以49%的概率获胜,并且如果它不是(如果我没记错)先手,则获胜概率为49.5%。

我不知道这个AI是否比知道下注金额的AI更容易编写,但这值得思考:选择下注金额仅占获胜概率的1.5%。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接