击败扑克机器人

有一个新的开放源码扑克机器人叫做PokerPirate 。 我感兴趣的任何创造性的方式,在networking应用程序可以检测/挫败扑克机器人。 (这是一个纯粹的学术讨论,与PokerPirate的写法一样。)

从服务器angular度击败僵尸程序

  1. 许多在线扑克网站使用由可疑活动触发的popupCaptchainput。

  2. 一些扑克网站监视着玩的时间和模式(例如,最坏的情况是连续玩24×7和16桌的玩家,这是一个很小的机会,这是一个真正的人)(但是有些玩家可以玩很大的手对没有经验的眼睛来说,这些数据似乎是一个机器人)

  3. 扔它的毛刺。 如果你怀疑一个玩家是一个机器人,把他们所有的扑克牌的位置在屏幕上的几个像素,改变他们不同的颜色/devise/图案1/100手,看看它是否抛出。 如果它不能屏幕抓取,它会在所有的决定中超时,这是非常确凿的机器人证据。

  4. 时间表明,如果一个电脑玩家一次毫秒的响应选项,而没有在大的决定时暂停思考,这可能是可疑的

  5. 自我监控。 扑克网站pokertableratings.com数据挖掘了很多大型网站。 它已经遭遇了混合的接待,一些人喜欢透明度, 另一些人则讨厌它 。 然而,好处是有可疑的球员统计 (VPIP百分比,PFR百分比是可以logging的大量可量化的统计中的一小部分)已经导致作弊的结论

  6. 人工智能分类networking可以监测可量化的统计数据,对stream氓作弊或机器人玩家进行分类。

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

  8. 在多个地点之间分享重复犯罪者之间的信息将有利于行业, 只要他们是由有能力的负责人 所尊敬和经营

  9. 有些机器人的devise可能会很简单,如果你可以发现他们的玩法,看看他们在相同的情况下是如何行动的(注意这只能用简单的机器人玩非常基本的策略),你可以很快地发现它们。

  10. 节目function的不一致使用会偏向真正的玩家。 举例来说,游戏中的许多扑克网站都有一个“轮到我时候就折叠”button。 如果你得到了一个不好的牌,并且正在等待另一个玩家决定该怎么做,很多玩家会检查这个button。 机器人可以使用这些button。 不同的是,一个机器人将在使用频率的末端,他们可能会一直使用它们,或者根本不使用它们。 通常玩家可能会按“自动贩卖”,但即使在最有利的条件下,他们有时也会点击弃牌。 例如,一个真正的玩家通常会按自动折叠,但这次他们没有。 没有其他玩家的行为,它们被折叠在他们身上,现在他们已经被提供了最有利的条件。 现在,如果他们按下折叠键,他们就会从头开始倾向于自动打印。 这是不协调/不优化/随机行为,与人类一致。 计时告诉何时这些function被点击是其他指标。 认识到这些都是指标而不是确凿的证据是很重要的。 所有这些行为指标都可以很容易地模拟。

从玩家angular度击败僵尸程序

  1. 尝试使用像PokerTracker这样的软件logging和收集尽可能多的数据

  2. 尝试识别其演奏风格的模式

  3. 试图find下注大小成正比的锅/#球员和手的力量之间的关系

  4. 尝试计算其手部范围 。 一个低风险的机器人可能不会经常唬弄任何重大的战略问题,所以构build高精度的手动范围应该不是太棘手。

  5. 尝试通过数据分析和反复试验find游戏中的泄漏一旦发现泄漏/模式,尝试重复利用它们并避免任何其他情况。

如果一个人具有适应能力,机器人可能就不那么重要了,而且人类通过倾斜的链条加权, 结果导向思维和挫折 ,机器人不是。 你可以使用这个你的优势。

因此,如果机器人足够聪明,可以在决策过程中模拟实际的时间延迟,并且创build合理而真实的游戏模式,那么实质上就没有办法阻止它。 抛出一些随机条件和简单的回聊(扑克玩家的词汇通常相当有限 ),你有自己的AI玩家,这将是很难察觉。

什么机器人可以做,以避免检测

避免检测的关键是从尽可能多的angular度考虑问题。 你试图在一个非常小而有限的世界里模拟聪明的人类行为。 大部分你可以运行的行为模拟都是相当明显的,但是你的机器人越不可预测,越不可能被发现。

  1. 创造逼真的播放时间表(例如,每周3-5次,每个会话4个小时,在这里和那里的奇数周期间)。

  2. 运行程序在单独的计算机上做出决定,控制僵尸计算机以防万一网站屏幕截图。

  3. 随机动作的时机(不要立即行动,每动作等待0.5-2秒)

  4. 重大决策的时候了。 如果一个决定是临界的,计算决定,然后等待一段时间来模拟思想。

  5. 随机使用客户端软件function。 通过点击所有桌子上的“处理我的出门button”来模拟厕所rest,并且每隔一段时间rest5分钟。

  6. 模拟聊天,扑克聊天往往非常简单,从来没有经常讨论或辩论。 在适当的可检测时刻说“不幸”或“stfu”。 甚至让编码员监控他的机器人,并在执行过程中进行聊天。

  7. 确保鼠标移动是现实的。 如果表格平铺,则不要在左上angular的表格上作出决定,然后立即在右下angular的表格上作出决定。 大多数网站软件现在提供键盘快捷键,这可能会更好地使用鼠标移动。

  8. 做相当简单的AI分类器不会期待的事情。 例如,每年一次用简单的非复杂查询(“我今天无法login!”或“互联网已closures!”)给他们打电话。不太可能有所作为,但是如果工作人员扑克公司足够聪明,他们可能已经认识到这是一个可靠的指标。

  9. 零星的失去会议。 倾斜可以被模拟,并且机器人可以玩得很差,并且偶尔会损失一些钱。 每个人都倾向于某个点。

另外值得关注的是,扑克网站并不特别在乎networking上是否有玩家,每个玩家都值得大手笔揽利,理论上从纯粹的玩世不恭的商业angular度来看,唯一的缺点是如果被发现。

即使当公然的漏洞被发现(在谷歌searchnetworking丑闻或绝对扑克丑闻 ,这是相当令人震惊的),企业似乎生存和保持健康,只失去受过良好教育和获胜的球员(其中并不多)。 这增加了不太熟练的玩家对networking的比例,反过来又吸引了优秀的玩家。 这是一个很好的老式捕捉22.适当的市场监pipe的一个很好的理由。

值得注意的是,每一场比赛都存在纳什均衡 。 在线扑克有一个时间表,它现在运行的方式,它将不得不进入更多的社会(networking摄像头/ voip)任何人相信它在将来(如果人们相信它),因为机器人将最终以math方式接pipe优越,并且心理上免疫。 扑克AI社区非常活跃 ,受到学术界和/或资本利益的推动。

极限扑克等简单版本的扑克在小型search空间中已经基本解决了。 对于比较复杂的游戏版本(无限制变化/底池限制奥马哈等)来说,人造玩家可以打败它们只是时间问题。

结论

在行业转向更加社交的在线游戏环境之前,先进的机器人才能被发现。 这不会解决问题,但肯定会让机器人难以在较低的层面上取胜。 我们已经看到PKR , 3D的发布以及更多的交互式的 ,每小时更less的版本的其他网站,其中多路传输对于玩家来说相当棘手。

这个问题同样受到行业性质的影响,而且还有一个原因,就是要坚持更多更有信誉的网站,因为这些网站的声誉已经越来越被整合到他们的商业模式中。 缺乏透明度和假装超然性不利于事业。

目前僵尸程序开发者面临的真正挑战是编写一个成功的algorithm,这并不像看起来那么微不足道。 每个玩扑克的人都认为自己很好,赢了或者是一个破发的玩家,这根本就不是真的。 这就是为什么人们继续玩下去,即使他们在亏钱的情况下输钱,他们只是不吉利,或者他们的玩法被误解了。 人类心理上的这种傲慢和虚弱使得玩家花费大量金钱,这也是扑克仍然有利可图的根本原因。

扑克是一个非常复杂的游戏,需要数年时间才能掌握(古老的谚语依然如此,“十分钟学习,一辈子掌握”)。 运气元素长期来说是非常有限的。

像其他任何职业一样,为了取得好成绩,你需要在数百个数百小时的时间内学习,并且玩数千个。 你会理解那些经验较less的玩家不会理解的东西,找出那些经验不足的东西。 这种学习持续了很长一段时间,可能比我们所能生活的时间还长。 这是一个复杂的游戏。

你经常在电视上看到一个高风险的现金游戏,并听到有人喊:“这是一个简单的电话!” 从而推测业余爱好者实际上并不了解或认识到其中的复杂性,而真正相信这一级别的游戏依然是简单的。 事实并非如此。 那些高风险的玩家(很多时候)都在电视上,因为他们确实非常棒。 也有可能是一个复杂的元游戏,我们的amauer不能识别的存在。 这个行为者不会站在一个棋子大师的身边,向他们大喊,移动他们的骑士,但是由于扑克是不完整信息的dynamic,他们的心理学使他们真正相信他们正在说的话。 就像国际象棋一样,决策对于整个游戏来说可能是错综复杂,敏感和极其重要的。 随着游戏复杂性的增加,微不足道的决定已经不再那么微不足道了,因为你的对手期望他们。

一旦你移动你的机器人或你的游戏的水平,你不可避免地会遇到更多的技能更多的玩家。 然后,你的策略的复杂性将不得不上升到一个新的水平,考虑到表格图像 , 范围平衡 ,复杂和智能虚张声势(IE不只是虚弱,虚张声势,虚张声势等),更详细的手部范围分析。 当你向上移动时,它确实是一个不同的游戏。

一旦获胜的机器人编写完成,毫无疑问,编码人员将有足够的技能,知识和常识来以不可检测的方式应用机器人。 这对他们来说是微不足道的。

所以真的没有什么可以做的。 如果你想玩在线,了解风险。 不要冒险超出你的承受能力,并试图保持准确的支出logging,所以你没有误导,不切实际,并最终损害估计自己的能力。 如果你没有优势,或者如果你不确定自己是否有优势的话,那就停下来吧! 当然,如果每个人都这样做,没有人会赢,那就是游戏的掠夺性和剥削性,那就是竞争来自哪里,这就是它的乐趣所在。

有三个独立的领域要考虑。 机器人必须弄清楚桌子的状态,做出决定,并将决定发回主人。

如果通过电线以某种可识别的forms发送或者以标准文本的forms显示给用户,则查明表格的状态要容易得多。 首先,使图像识别成为唯一的select,然后尽可能地使其成为可能。 以3Dforms显示卡片,然后慢慢改变卡片的方向和位置。 animation卡片前面的小闪烁或烟花,所以任何给定的屏幕截图可能难以辨认,但需要一段时间才能确定。

做出这个决定是没有什么可做的。 试图决定一个人是否做出决定就像是一个几乎没有任何信息的图灵testing。

通过再次使用3D,发回决定可能变得困难。 使其难以直接发送数据包,或通过除鼠标点击button之外的其他方式提交决定。 轻轻地移动button,或者在等待决定的时候让它们缓慢地浮动在游戏区域周围。 禁用允许find或操纵button的任何辅助functiontypesfunction。

与几乎所有扑克机器人一样,PokerPirate通过在Windows扑克应用程序中的屏幕抓取和模拟鼠标点击来工作。 因此,对系统的l is针是能够识别游戏中的对象并在窗口中进行操作的能力。 像扑克一样聪明,这些基本操作可能仍然有困难。

因此,阻止这个机器人的明显方法将包括:

  1. 在游戏之前或其他因素显示玩家可能是机器人时,实施validation码。
  2. 使表格graphics更复杂,或在整个游戏中改变主题。
  3. 检测exception快速的和/或机器人的鼠标移动和点击(人类永远不会在math上完美的线条中移动鼠标)。

理想情况下,唯一有效的解决scheme是创build一个蜜jar逻辑,通过提供有利于机器人最理想的行为响应的更有利的逻辑条件的诱惑来引诱参与的机器人。 一旦机器人从事蜜jar,你必须不断地提供机器人的条件,它更喜欢假定机器人没有设置超时。 然后可以测量,logging和研究机器人。 除了机器人之外,如果机器人没有通过TOR连接,还可以将networking和会话数据隔离开以供学习。

在这种情况下,确定性考虑因素适合于区分bot和人类,因此不那么严重,但是确定bot的行为的确定性考虑变得更加严重。 不幸的是,机器人的所有者可以对机器人进行更改,以防止这样的身份识别,如果该机器人知道蜜jar状况或者其逻辑考虑。

击败扑克机器人可以有两种forms:你可以尝试识别他们并将他们从系统中禁用,或者你可以在扑克中打败他们。 打扑克是更有趣的学术问题。 🙂

有关打扑克机器人的一些论文见http://www.cs.cmu.edu/~sganzfri/

看看这个post

这篇文章也有一些关于如何挫败他们的好build议。

另一个想法搞乱屏幕,使其难以扫描:

把卡片摆出一大堆不同的颜色 – 用人眼closures,但不一样。 这将使挑选出的东西更难以阅读。 另一方面,用人眼不会从背景中分离的颜色,在卡上放假文字。

机器人的问题是他们打得比体面的​​人类球员还好,还是他们可以等待24/7,让坏球员出现,然后尝试把他们挤奶?

另外,在玩扑克的时候,有人在他旁边坐着一台电脑是否“合法”或“作弊”,向其他计算机咨询意见?

我不知道如何能够声称解决scheme的空间,极限扑克是“解决”,当一个球员的最佳战略将受到什么是对手知道的影响。 任何试图分析玩家的尝试都是如此完美以至于无法改进?

如果您可以访问大量匹配项,则可以采用数据挖掘方法。 人工智能的发挥力度应该是相当一致的,而人类可能有简单的模式 – 前几次热身时间较弱,玩了很长时间之后力量就会下降。 另外,如果有更多的金钱,人类的决策时间可能会增加。

如果您有权访问鼠标移动(或者至less点击即使对于networking应用程序也是如此),除了最复杂的程序之外,识别机器人应该相当简单。 人类不会将鼠标移动到一个确切的直线上,他们有加速和减速时间,可统计描述的点击位置分布等。

看看Ajax控件工具包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) 

一个100%的解决scheme是不可能的,我的目的是一个解决scheme,通过使用AI对自己来节省金钱。 有一个PokerPirate的人工智能在服务器端运行,并在每场比赛中扮演一个隐形球员的angular色。 如果任何玩家执行了太多相同的操作,那么他们可能正在运行一个PokerPirate实例。 这是攻击者可能陷入的一种蜜jar或陷阱。 攻击者可以通过让自己的机器人不太成功来防御这个蜜jar。 因此这就造成了“猫与老鼠”的来袭,攻击者总是可以偷一些钱,而防御者总是可以省下一些钱。

有更简单的方法。 是。 很多的build议是正确的,需要的。 但大约90%的欺诈行为过于简单。

如果有人让一个机器人为他工作,他会在一段时间后想要第二个机器人为他工作。 (另一台机器或任何其他),但他将使用相同的密码,因为它很难记住2(<—讽刺)

还剩下什么: 检查具有相同游戏行为和相同密码散列的帐户。