打败扑克机器人

107

有一个名为PokerPirate的新开源扑克机器人。我对任何一种创造性的方法感兴趣,可以检测/挫败/打败扑克机器人。 (这是纯粹的学术讨论,与编写PokerPirate的精神相同。)


8
我猜你的意思是“任何更多的方式”,因为排名第一的答案是你自己的 :-) - David Johnstone
9
与每个玩家交谈。 - Lasse V. Karlsen
2
@Lasse:嗯,如果玩家是通过图灵测试的机器人,那就不够了。 - lornova
5
无论这个机器人是否能通过图灵测试,它都不能阻止机器人的创建者坐在桌前花费大量时间聊天。 - Tom Gullen
6
最好的方法就是效仿拉斯维加斯:调整游戏规则,以至于唯一的获胜策略是成为庄家,然后成为庄家。此时,所有机器人所做的就是更快地输钱,而你可以不必在意。 - BCS
显示剩余6条评论
12个回答

209

从服务器端的角度打败机器人

  1. 许多在线扑克网站使用弹出式验证码输入,这些输入是由可疑活动触发的。

  2. 一些扑克网站监控玩牌时间和模式(即最坏情况下是一个24小时不停地玩16张桌子的玩家,有极小的机会是真正的人类。 (然而有些玩家确实有能力玩很大的手牌量,对于没有经验的人来说,这似乎是一个机器人)

  3. 遇到故障。如果你怀疑一个玩家是机器人,可以将他们所有的打牌位置在屏幕上稍微调整几个像素,使它们变为不同的颜色/设计/图案,以便在1/100手中查看是否有异常。如果它无法截屏,则会超时进行所有决策,这是相当确定的机器人证据。

  4. 时间提示,如果电脑玩家在毫秒级别的时间内响应选项,在大决策上没有思考暂停,这可能是可疑的

  5. 自我监测。扑克网站pokertableratings.com挖掘了许多大型网站的数据。它的反响不一,有些人喜欢透明度,其他人讨厌它。然而,好处是,曾经有可疑玩家统计数据(VPIP百分比,PFR百分比是众多可量化的统计数据之一)已经导致了作弊结论

  6. 人工智能分类网络可以监控可量化的统计数据,以分类流氓作弊或机器人玩家。

  7. 当在线扑克还是一个相对新的实体时,有传言和谈话有限的证据表明,一些扑克客户端软件会截屏可疑玩家的桌面,以查看他们是否正在运行辅助程序。然而(即使这是真的)运行两台计算机以独立执行两个任务将规避此问题。

  8. 在多个网站之间的重复违规行为者之间共享信息对于该行业将是有益的,如果只有他们是诚实的并由有能力负责任的人运行

  9. 一些机器人可能设计得相当简单,如果您可以发现它们的打牌风格并查看它们在相同情况下的表现(请注意,这仅适用于玩基本策略的不成熟机器人),则可以相对快速地发现它们。

  10. 程序功能的不一致使用会倾向于真诚的玩家。例如,许多扑克网站在游戏中都有一个“轮到我时弃牌”按钮。如果你被发了一手糟糕的牌,并且正在等待另一个玩家决定如何做,很多玩家会点击这个按钮。机器人可能会使用这些按钮。区别在于,机

    从玩家角度击败机器人

    1. 尝试使用PokerTracker等软件记录和收集尽可能多的数据。

    2. 尝试识别其打牌风格中的模式。

    3. 尝试找出下注金额与底池/玩家数和手牌强度之间的关系。

    4. 尝试计算其手牌范围。低赌注机器人可能不会频繁地虚张声势,因此构建高度准确的手牌范围不应该太棘手。

    5. 通过数据分析和试错尝试找到其游戏中的漏洞/模式。一旦发现漏洞/模式,尝试反复利用它们并避免其他情况。

    如果说人类能够进行适应,那么机器人的能力可能会较弱,而人类受到倾斜结果导向思维挫败的束缚,而机器人则不会。您可以利用这一点。

    因此,如果机器人足够聪明,能够模拟实际决策过程中的真实时间延迟,并创建合理和现实的游戏模式,那么您将无法阻止它。加入一些随机条件和简单的回复(扑克玩家的词汇表通常相对有限),您就会得到一个非常难以检测的AI玩家。

    机器人可能采取的避免被检测的方法

    避免被检测的关键是尽可能多地从各个角度考虑问题。你正在尝试在一个非常小而受限的世界中模拟智能人类行为。你可以运行的大多数行为模拟都是相当明显的,但你的机器人越不一致和不可预测,就越不容易被发现。
    1. 创建逼真的游戏时间表(例如,每周3-5次,每次4小时,在一年中间隔一两个星期)。
    2. 运行程序以在另一台计算机上进行决策,控制僵尸计算机以防止被网站屏幕捕捉。
    3. 随机操作时间(不要立即操作,每个动作等待0.5-2秒)。
    4. 对于重大决策,需要花费时间。如果决策边界模糊,请先计算决策然后等待一段时间来模拟思考。
    5. 随机使用客户端软件功能。通过单击所有桌子上的“deal me out”按钮来模拟去洗手间,并且偶尔休息5分钟。
    6. 模拟聊天,扑克聊天通常非常简单,只有一到两句话,通常不会有讨论或辩论。在适当的时候说出类似“不幸”或“闭嘴”的话。甚至可以让编码人员在执行过程中监视他的机器人并参与聊天。
    7. 确保鼠标移动是逼真的。如果桌子tiled,不要在左上角的桌子上做出决定,然后立即在右下角的桌子上做出决定。大多数网站软件现在提供键盘快捷键,这可能更可取,而不是使用鼠标移动。
    8. 做一些人工智能分类器想象不到的事情。例如,每年打电话给他们,询问一个简单的非复杂问题(例如“帮助我今天无法登录!”或“网络出了问题!”)。这可能并不会有太大的影响,但如果扑克公司的员工足够聪明,他们可能已经认识到它是一个可靠的指标。
    9. 偶尔输掉一些场次。可以模拟倾斜,并且机器人可以玩得很糟糕,偶尔输钱。每个人都会有意外情况发生。
    关注的问题是扑克网站并不特别在意机器人是否在其网络上运行,每个玩家在抽水中都有很大价值,从纯粹的愤世嫉俗的商业角度来看,唯一的缺点将是坏的新闻曝光。即使发现了明显的漏洞(搜索Cereus network丑闻或Absolute Poker Scandal),该行业似乎仍能生存并保持健康,只失去受过良好教育和获胜的玩家(这样的玩家并不多)。这增加了网络上技能较低的玩家比例,反过来吸引了优秀的玩家。这是一个非常好的正面论据,支持适当的市场监管。
    重要的是要注意,每一场比赛都存在一个纳什均衡。在线扑克有一个时间轴,现在的运行方式将不得不转向更社交化的东西(网络摄像头/voip),以便未来任何人都能信任它(如果人们信任它),因为机器人最终会占据优势,具有数学上的优势和心理免疫力。扑克AI社区非常活跃,由学术界和/或资本效益推动。
    如极限扑克等简化版本的扑克已经在小的搜索空间中接近解决。更复杂的版本游戏(无限变体/底池奥马哈等)成为适合人工玩家的游戏只是时间问题。 结论 复杂的机器人在更社交化的在线游戏环境下才能被检测到。这并不能解决问题,但肯定会让机器人更难以在低级别中获胜。我们已经看到了一个微小的变化,就是PKR3D和更互动的版本释放,其他网站的手数每小时较少,玩家很难完成多重任务。
    该问题也受行业性质的影响,这是坚持使用更大更有声望的网站的另一个原因,声誉越来越融入他们的商业模式中。缺乏透明度和假装透明度不利于事业。
    目前机器人开发者面临的真正挑战是编写一个获胜算法,这并不像看起来那么简单。每个打扑克的人都认为自己很好,赢了或平局,这显然不是真的。这就是为什么人们继续玩,即使他们输钱,他们认为只是不走运,或者他们的玩法被误解。这种人类心理上的傲慢和弱点给失败的玩家带来了很多损失,也是扑克仍然能够盈利的根本原因。
    扑克是一个极其复杂的游戏,需要多年的学习才能掌握(老话仍然成立,“学十分钟,精通一生”)。在长期内,幸运元素非常有限。
    就像其他职业一样,要变得优秀,你需要学习数百个小时,并玩上数千个小时。你将理解到不那么有经验的玩家所不理解的事情,发现不那么有经验的人所没有发现的事情。学习需要很长很长时间,可能比我们能够活着的时间还要长。这是一个复杂的游戏。
    你有多少次看到电视上的高额现金游戏,听到有人对它喊道“这是个简单的决定!”从而证明业余爱好者真的不理解或认识到玩法的复杂性,而且真正相信在那个水平上游戏仍然是简单的。它不是。那些高额赌注的玩家(大部分时间)之所以出现在电视上,是因为他们真的非常非常非常好。此外,也可能正在进行复杂的元游戏,我们的业余爱好者无法意识到其存在。业余爱好者不会站在国际象棋大师身边喊着让他们移动马,但由于扑克的动态是不完美的信息,他们的心理使他们真正相信自己所说的话。就像在国际象棋中一样,决策可以是错综复杂、敏感且极其重要的,对于整个游戏来说至关重要。随着游戏的复杂性增加,琐碎的决定不再那么琐碎了,因为你的对手期望它们。
    一旦您将机器人或游戏提升到更高水平,就不可避免地会遇到更多技能更强的玩家。然后,您的策略复杂度将必须提升到下一个级别,考虑table imagesrange balancing、复杂和智能的吓唬(即不仅仅是以虚弱为借口,而是尝试利用范围和形象进行吓唬),以及更详细的手牌范围分析。随着您的提高,这确实是一种不同的游戏。
    一旦编写了获胜的机器人,毫无疑问,编写者将具备足够的技能、知识和常识,以不被察觉的方式应用机器人。对他们来说,这是微不足道的。
    因此,你真的无能为力。如果想在线上玩游戏,请了解风险。永远不要冒超过自己负担得起的风险,并尽量记录开支,以便您不会错误地高估自己的能力。设定止损点,在没有优势或者不确定是否有优势的情况下离开桌子!当然,如果每个人都那样做,就没有人会赢,这就是游戏的掠夺性和可利用性质,这也是竞争的来源,使其变得有趣。

3
至少在模拟监视器时代,可以在与播放游戏的计算机完全分离的计算机上运行屏幕捕捉程序。当然,在游戏软件中检测到这样的事情是完全不可能的。即使HDCP不允许使用现代计算机的视频输出进行此类操作,人们仍然可以使用精确瞄准的摄像头。如果卡片易于被人类读取,那么机器也不会有问题。 - supercat
现在,你甚至可以在虚拟机上运行游戏,并在外部运行机器人,捕获图像并发送键盘/鼠标事件。 - André Paramés
看看OpenHoldem吧。这个东西甚至有一些DLL扩展来模拟鼠标抖动和类人的鼠标加速度,以便点击按钮。如果你的代码生成Call或Check/Fold/Raise的概率三元组,要定位模式可能需要成千上万的手牌。 - rndapology

9
有三个独立的领域需要考虑。机器人必须确定桌子的状态,做出决定并将决定发送回主机。
如果以某种可识别的形式通过电线发送或以标准文本形式显示给用户,则更容易确定桌子的状态。首先,只使用图像识别作为选项,然后尽可能使之困难。在三维中显示卡片并缓慢改变卡片的方向和位置。在卡片前面播放小闪光或烟火动画,因此任何给定的屏幕截图可能无法辨认,但要花费一些时间才能确定。
决策方面没有什么可以做的。试图确定决策是否由人类做出就像是一个图灵测试,几乎没有信息。
通过再次使用三维技术可以使发送决策变得困难。除了用鼠标点击按钮外,通过任何其他方式提交决策都很困难。在每个操作时稍微移动按钮或让它们在玩耍区域内缓慢浮动等待决策。禁用任何允许找到或操作按钮的辅助功能。

3
通过难度实现安全。假设您被允许流式传输游戏的渲染视频,目标是使其成为一个动态验证码。 - drawnonward
3
@The Rook:你在问题中提到的PokerPirate与HTTP毫无关联。事实上,我怀疑有任何赌博扑克网站使用HTTP。你的问题、回答和评论都表明你对这个主题知之甚少。在给别人建议前,你应该尝试了解自己在谈论什么。 :) - RarrRarrRarr
2
如果完全不考虑可用性,您可以通过切断所有数据连接获得安全性,这可以说是一种创造性的防止作弊的方式。我不知道如何在不考虑可用性的情况下评估安全措施。 - David Thornley
1
@drawnonward:当然,但是(a)我没有密码就不能进入银行网站,(b)对于大多数人来说,银行业务比在线扑克更为必要,(c)这不是一个长期持续的烦恼。这个解决方案可能会比原问题更糟糕。 - David Thornley
2
最初的问题是确保只有人类在网页上玩扑克。对于银行网站,一旦输入密码,你就获得了主机的信任。但在这种情况下,你无法做任何事情来获得主机持续的信任,因此安全挑战必须是连续的。 - drawnonward
显示剩余6条评论

8
PokerPirate和几乎所有编写的扑克机器人一样,通过屏幕截取和模拟鼠标在Windows扑克应用程序中的点击来工作。因此,该系统的关键是其能够识别游戏中的对象并在窗口中执行操作的能力。尽管它在扑克方面可能很聪明,但它可能仍然难以处理这些基本操作。
因此,阻止这个机器人的明显方法包括:
  1. 在游戏之前或其他因素表明玩家可能是机器人时,实施CAPTCHA。
  2. 使桌子图形更加复杂,或在游戏中更改主题。
  3. 检测异常快速和/或机械化的鼠标移动和点击(一个人永远不会用数学上完美的线移动鼠标)。

2
大部分都是通过安全性来保密的。所有这些都可以被破解,包括验证码。虽然我承认这是最难破解的部分。(+1 没有100%的解决方案,其中许多描述可以与其他技术一起使用。) - rook
2
现在验证码机器人有多强?我告诉你吧:我从Google应用程序中得到的一半图像,甚至对于人类来说都是不可能阅读的。 - Isabelle Wedin
所有的计算机安全都是通过混淆来实现的。之所以有人无法阅读加密电子邮件,是因为他们很难找到私钥。但是,如果给予足够的时间和计算资源,这也可以被“破解”。大多数验证码都相当不错,并且可以筛选出99.99%的机器人。 - Cerin

5
理想情况下,唯一有效的解决方案是创建一个蜜罐逻辑,通过提供更有利的逻辑条件来诱使参与的机器人,以支持机器人最理想的行为响应。一旦机器人参与了蜜罐,您必须不断地提供它喜欢的条件,假设机器人没有设置超时时间。然后可以测量、记录和研究该机器人。除了机器人外,如果机器人没有通过TOR连接,则还可以隔离网络和会话数据进行研究。
在这种情况下,用于区分机器人和人类的确定性考虑较少,但是,在确定机器人行为后,确定性考虑变得更加严重。不幸的是,如果机器人的所有者意识到蜜罐条件或逻辑考虑,则机器人的所有者可以更改机器人以防止这种识别。

3
引用孙子的话:“知己知彼,百战不殆。”避开敌人的优势,发掘他们的弱点。 - jweyrich
这不是一个坏主意,我对这个软件的样子很感兴趣。你介意详细说明一下具体条件吗? - rook
1
Tor的出口节点相当有限。任何通过Tor出口节点连接的玩家都应该引起怀疑。 - Christian
创建蜜罐可能会让扑克网站的成本非常高。 - Tom Gullen
你可以让它认为它在赚钱。 - Jeff Davis
如果您对蜜罐进行虚假操作,那么误报将会让您失去客户。甚至可能导致诉讼。 - Tom Gullen

4

打败扑克机器人可以采取两种形式:您可以尝试识别它们并将其禁止使用系统,或者您可以在扑克游戏中击败它们。在扑克游戏中击败机器人是更有趣的学术问题。

有关击败扑克机器人的一些论文,请参见此处:http://www.cs.cmu.edu/~sganzfri/


3

2

关于干扰屏幕使其难以扫描的另一个想法:

使用许多不同颜色的卡片 - 在人眼术语中接近但不相同。这将使挑选要阅读的内容变得更加困难。另一方面,在卡片的另一面,使用人眼无法从背景中分离的颜色来写假字。


2
不幸的是,对于任何有能力的程序员来说,这将非常容易被打败,因为他们可以筛选颜色范围而不是精确值来绕过此解决方案。 - Tom Gullen
如果颜色范围是固定的,那么它们可以工作--但是如果您不断更改呢?这意味着您的爬虫必须被编程为理解人类视觉。这并非不可能,但会使事情变得更加困难。 - Loren Pechtel
这个想法看起来很有道理,但实际上它会显著地影响到软件的有效用户体验,这可能对业务不利。 - Tom Gullen
非常容易打败。我以前写过一个扑克机器人,通过计算边界框内的图像相似度来进行牌面识别。即使没有一个像素完全相同(因为每一手牌的卡片颜色或屏幕位置都可能略有不同),我仍然可以使用这些相似度测量来确定“最有可能”的牌面。 - benjismith
你认为为什么颜色必须保持相似?可以将它们循环显示为完全不同的颜色,并循环更改背景 - 我想象中的效果就像一波横扫卡片并改变颜色的波浪。保持足够的对比度,确保产生的颜色不会难看。 - Loren Pechtel

2
问题在于机器人是否比普通玩家更擅长游戏,或者它们可以等待24/7出现不好的玩家,然后试图从他们那里获取利益。
此外,当某人在打扑克牌时旁边有一台电脑提供咨询建议时,这是“合法”还是“作弊”?
我不确定如何声称限制扑克的解决方案已经“解决”,因为玩家的最佳策略将受到对手所知道的信息的影响。任何分析玩家的尝试都不能宣称完美无缺,因为它总有改进的空间。

这里有一个关于扑克是否可解的有趣讨论: http://forumserver.twoplustwo.com/29/news-views-gossip/view-can-poker-solved-792664/ 其中一些帖子的作者非常有声望。 问题在于,理论上,机器人将以无法战胜的方式表现。此外,你所描述的“帮助”你的软件是一个灰色地带,许多网站允许数据分析软件,如PokerTracker/PokerOffice,但在ICM计算器和其他数学决策工具(例如,在超级涡轮锦标赛结束时,这些工具非常有用)方面划定了界限。 - Tom Gullen

1

看一下Ajax Control Toolkit NoBot

NoBot采用了几种不同的反机器人技术:

* Forcing the client's browser to perform a configurable JavaScript calculation and verifying the result as part of the postback. (Ex: the calculation may be a simple numeric one, or may also involve the DOM for added assurance that a browser is involved)

* Enforcing a configurable delay between when a form is requested and when it can be posted back. (Ex: a human is unlikely to complete a form in less than two seconds)

* Enforcing a configurable limit to the number of acceptable requests per IP address per unit of time. (Ex: a human is unlikely to submit the same form more than five times in one minute)

1

如果您有大量比赛的访问权限,可以采用数据挖掘方法。人工智能的游戏实力应该相当稳定,而人类可能存在简单的模式——在前几个热身回合中较弱,在长时间游戏后实力会下降。此外,当涉及更多资金时,人类的决策时间可能会增加。

如果您可以访问鼠标移动(或至少是点击位置,即使是网络应用程序也是如此),那么识别机器人应该相当简单,除了最复杂的机器人之外。人类不会以精确的直线移动鼠标,他们有加速和减速周期,统计上可描述的点击位置分布等。


现在很多扑克网站都实现了多桌键盘快捷键,因此您可以完全不需要鼠标来操作。我也认为决策并不经常随着赌注的增加而增加,它主要与决策的难度相关。 - Tom Gullen

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