您如何确定玩家在下棋吗?


40

很多在线网站上,玩家可以彼此实时下棋。大部分比赛时间为5-10分钟。借助国际象棋软件的使用,可以通过使用Fritz或Rybka为他提出建议来利用其优势。

例如,我可以输入对手的一举一动,看看有什么软件可以为我提供建议。

我在考虑一些可以暗示玩家作弊的功能:

  • 他切换屏幕的次数
  • 游戏速度(在容易和非常困难的位置)
  • 游戏的准确性

还有其他想法吗?

PS:对我而言,这并不重要,您是从服务器(或客户端)的角度考虑的。


今天优秀的问题和相关的问题!但是,您是要使用算法检测在线闪电战作弊还是在与对手对战时像人类玩家一样进行检测?
Rauan Sagit 2014年

作弊检测策略仅在作弊者“愚蠢”时起作用。采用更聪明的作弊策略(请参阅我对NoviceProgrammer答案的评论)将使作弊几乎无法猜测。
Andrea Mori 2014年

我认为这几乎不是问题。我在Chess.com上玩。我猜大概每10个人中就有1个人作弊。如果我怀疑我的对手得到了一些帮助,我只会阻止他们。
兰迪·敏德

Answers:


33

据我所知,这实际上是一个非常复杂的问题,而不是已经以令人满意的方式解决的问题。本质上,我们要求一种算法来执行一种反向图灵测试,以区分人类玩家和计算机。

首先,除非您完全控制客户端环境,否则客户端检查将始终存在弱点。让我们采用第一个想法-检查窗口之间的切换,听起来不错。不幸的是,通过在单独的计算机上运行国际象棋引擎,或将我的引擎与客户端集成在一起,以至于没有“窗口切换”发生,或者更改了客户端以报告窗口中的0更改,它还是无法解决的。真正的办法,以确保它是你的客户端上运行的代码,真的。

我们剩下的是物理上受严格控制的客户端环境(任何在线游戏都不会发生)或服务器端检查,即查看实际玩过的动作(也许是两次动作之间的时间,如您所说),并尝试演绎计算机或人的方面。

服务器端检查也可以分为两种方式。您可能可以尝试“自上而下”的方法,这类似于“从历史上的过去游戏来看,只有2%的人做出了动作,而50%的计算机做出了动作”。如果我们有足够的数据用于“任何给定位置”,那么这实际上将是一个很好的方法。国际象棋的搜索空间是如此之大,以至于一旦您通过了早期的中期游戏,即使是非常大的数据集也将不会有大量与您的位置相匹配的游戏。

假设我们在等式的人类方面没有任何可靠的统计信息,您仍然可以将位置显示在多个国际象棋引擎上(每个国际象棋都有许多不同的时间设置),并查看玩家的动作匹配程度如何一台计算机。就其本身而言,这也将导致许多假阳性,但是,对于相同的象棋引擎和时间设置重复进行肯定,将使玩家越来越有可能在作弊。为了进一步增强这一点,我可能会考虑采用“自下而上”的方法分析象棋位置。简而言之,试图弄清楚为什么人类和计算机的游戏方式不同。例如,人类倾向于识别常见的模式。在具有“奇数”模式或不太可能的情况的游戏中,人类不太可能能够非常准确地玩游戏。都不是,

为了向您的清单添加一些细节,我将遵循教授如何通过检测突然的变化来检测论文中的抄袭行为。在国际象棋中,这很难定义,但下棋风格或下棋强度的突然变化可能表示作弊。具体来说,我会寻找不具有特征的激进动作,这些动作往往只是“锻炼”,并且对玩家没有不利影响(过于准确)。强迫伙伴进行4次以上移动的球员通常将骑士放在板的边缘,依此类推(有可能……只是不太可能)。然而,听起来如何工作可能会占用整本书(或更多)。

编辑:最近有一篇有关顶级国际象棋中作弊和检测的文章。


3
人与计算机之间可能会在游戏开始时产生误报,很容易记住最好的比赛
ajax333221 2012年

@ ajax333221我完全同意。在某种程度上,类似的东西可能适用于残局,在此之前,人类可能仅基于先验知识就可以完美地玩它。就是说,如果我可以检测到游戏中可能存在的作弊行为,那么我可以肯定,通过其他信息和复杂的分析,计算机也可以做到。至少4次移动中的强迫队友是最近的在线游戏与1050级玩家的真实例子-至少可以说非常有启发性……
Daniel B

20

闪电战中,您可以分辨出他们正在使用多少时间。使用引擎的人为每步动作花费的时间是一致的,而不是像大多数普通玩家那样在开局中突飞猛进,并在中间游戏中放慢速度。特别是,他们不能快速玩游戏,因为他们每次打开动作后都必须更新计算机板。如果他们在进行第二次移动时花了五秒钟,而在进行第二十次移动时花了五秒钟,则可能是在使用引擎。


我不确定在发布时是否如此,但是stock鱼可以接受剩余时间作为输入,以便优先考虑花时间在
哪里。– OganM

15

屏幕切换次数和播放速度毫无意义。如果您使用这些内容向在线棋牌网站的组织者投诉,他们将嘲笑您。

有两种方法可以判断某人是否在作弊。首先是“吸烟枪”。考虑这个游戏部分-

Allwermann,Clemens(1900)-Kalinitschev,Sergey(2505)Boeblingen(9),30.12.1999
1. Qa7 Rg8 2. Qxb7 Be4 3. Nf4 Qf5 4. Qd7 Qe5 5. Kh1 g5 6. Nh3 g4 7. Nf2 Bf5 8. Nxg4 Be4 9. R7xf6 Bxg2 + 10. Kxg2 Qe4 + 11. Kh3

问题是你会在那个位置上扮演什么角色?情况是,在比赛的最后一轮中获胜,将使您在一系列大师级比赛之前赢得比赛。仅在1900年就不错了。我怀疑我们大多数人都会打出相当稳固的东西来保持胜利。像Rxb7或Rd7一样移动(对于像我这样的co夫;-)像Rxf6一样移动。Qa7是举动的心脏停药法,是一支吸烟枪。弗里茨(Fritz)认为是该位置的最佳动作,比第二最佳动作Rd7高出0.1。

比赛结束时,当黑人辞职时,吸烟枪#2比赛离开了1900级球员,成为比赛的直接冠军。您会在那个位置对Kalinitschev说什么?

对话是这样进行的:

Allwermann:“八人交配”

Kalinitschev:“我不这么认为”

Allwermann:““检查一下,您会发现我是对的”

当然,Allwermann是正确的。您能否在最终位置找到8位伴侣?没有硅协助?

这样,您就拥有了吸烟枪,并将其带到组织者那里。他们会怎么做?

好吧,接下来是第二种检测和证明作弊行为的方法。

他们将需要收集至少20个游戏,每个游戏至少进行20次非数据库移动,然后将它们输入引擎进行检查。基本上,他们要寻找的是犯罪嫌疑人选择与数据库的第一项,前两项中的一项,前三项中的一项相匹配的非数据库移动的时间百分比。“证明”阈值为-

前1名65%

前2名80%

前3名90%

最近的一个例子是对Borislav Ivanov表现狂热

这是他的统计数据-

扎达尔19日:胡迪尼1.5a x64哈希值:256时间:30s最大深度:20ply {Borislav Ivanov(游戏:9)}

{排名第一的比赛:210/314(66.9%)对手:150/313(47.9%)

{排名前2名的比赛:270/314(86.0%)对手:207/313(66.1%)

{前三场比赛:285/314(90.8%)对手:238/313(76.0%)

{排名前四的比赛:293/314(93.3%)对手:267/313(85.3%)

在第8轮中,现场直播失败了(怀疑这使他的外界帮助得以采取行动),他输给了GM Predojevic。如果删除此结果,则新的统计信息为:

Zadar 19th:Houdini 1.5a x64哈希值:256时间:30s最大深度:20ply {Borislav Ivanov(游戏:)}

{排名第一的比赛:197/287(68.6%)对手:135/286(47.2%)

{排名前2名的比赛:252/287(87.8%)对手:188/286(65.7%)

{排名前三的比赛:265/287(92.3%)对手:218/286(76.2%)

{排名前四的比赛:272/287(94.8%)对手:242/286(84.6%)

如您所见,这两组统计数据都会使他被扔下棋服务器。为了进行比较,下面是供稿下降时对游戏8的分析:

{白色:Borislav Ivanov}

{排名前1的比赛:13/27(48.1%)

{排名前2名的比赛:18/27(66.7%)

{排名前三的比赛:20/27(74.1%)

{排名前四的比赛:22/27(81.5%)

{黑色:Borki Predojevic}

{排名第一的比赛:15/27(55.6%)

{排名前2的比赛:19/27(70.4%)

{排名前三的比赛:20/27(74.1%)

{排名前四的比赛:25/27(92.6%)

请注意,FIDE已成立一个委员会,以研究检测和打击计算机欺诈的方法。他们的指南在这里。请注意本节:

E.基于FIDE Internet的游戏筛选工具

FIDE将提供基于Internet的游戏筛选工具,所有FIDE授权官员(IO,IA,ACC成员)和全国联合会均可使用。它应托管在FIDE专用的网页上,并使授权方能够以PGN格式上传游戏,以进行“快速测试”,以识别锦标赛中可能存在的异常值。通过“筛选”应理解为,这仅提供了没有判断价值的初步测试,只是在拒绝指控并拒绝进行手动全面测试的同时可以引用它。


1
很棒的分析!T3 / T4的结果令人信服,尤其是在报告其结果的可能性时。顺便说一句:我知道您的帖子是前一阵子发表的,但是您碰巧还被Kalinitschev和Allwermann之间的对话所引用吗?显然,没有1900能够可靠地在8中找到伴侣,尤其是当2500看不到它时。当它可能这听起来并不特别聪明的他已经提出了这个问题本身引起怀疑他的欺骗。
jaxter '16

1
顺便说一句:我不同意Qa7!是令人心动的。只是利用了以下两个事实:1)布莱克的后排身体虚弱,以及2)他很容易受到配偶的伤害。因此,将车队从后排转移到其他任何位置都将允许潜在的获胜战术。在这种情况下,怀特使用此举来攻击b-pawn,并在第七次攻击中协调他的女王/后卫,因此后卫得以保卫。白方在1 ... Qxf7 2.Qxa8 + Qg8 3.Qxb7之后赢得至少一个棋子。我认为任何一位总经理都应该看到Qa7的举动,而Kalinitschev错过了它,我感到非常惊讶。在Rxf6之后,这是板上最强迫的动作吗?
杰克斯特

1
@jaxter信息来自en.chessbase.com/post/a/history-of-cheating-in-che-3-。注意:“我不同意Qa7!是令人心动的终结者”-如果您阅读该文章,您将看到Vishy Anand与您不同意:-)。摘自文章-“那么我们的英雄扮演什么角色?31.Qa7?!! “ Fritzy!”当阿南德看到这一动作和随后的举动时尖叫起来,发出不可控制的笑声(我拍摄了他的笑容,并将其包含在《国际象棋杂志》第69期的多媒体报告中)。'
Brian Towers

感谢您的参考。我明白你的意思。我当然会愿意出手,但这部分是因为我会判断怀特可以在不计算所有局限的情况下在布莱克的反击中幸免。如果我尝试这样做,a)我确定我会犯一个致命的错误,b)我会得到“ heebie-jeebies”并选择其他举​​动。正是由于我凭直觉,我经常玩怪异的动作,例如Qa7!。毫无疑问,这也是为什么我的评分低于2000 ...
jaxter '16

最高的动作是您期望很多球员都能找到的声音动作,而您却不希望大多数球员看到出色的战术,两者之间有区别。怀特在上面的戏中有后者。
CashCow

9

为了给出我如何解决这个问题的答案,我将使用一个简单的想法:

  • 零假设检验

我们的想法是,公开的国际象棋引擎数量有限N。这种假设当然排除了作弊者编写自己的象棋引擎(或使用某些公共不可用的象棋引擎)的可能性,但是对于赶上临时作弊者来说,这应该是一个足够强的假设。

该应用零假设测试将是非常简单的:每个国际象棋引擎,X并为当前游戏的动作每个子序列计算概率p观测起到子的假设零假设玩家是使用国际象棋引擎X,使行动为他们。幼稚假设可以由该(从选定数量的顶部移动或随机地选择随机播放器移动d_i),则对于的长度的给定序列的概率k匹配移动一个国际象棋引擎X会使将被计算为(d_1)/(n_1) * (d_2)/(n_2) * (d_3)/(n_3) *...* (d_k)/(n_k),其中d_i是的数目可能的(顶部)动作ith转弯,由引擎评估Xn_i是转弯时玩家i(或某个合理子集)可用的总移动次数。

然后简单地计算

p* = minimum p over all chess engine X, all subsequences y.

如果p*小于某个阈值,则将玩家标记为作弊者,因为存在子序列y和象棋引擎X,该子序列和象棋引擎带来了玩家作弊的概率低于期望概率的可能性。


8

我认为赛后分析为您提供识别球员是否作弊的最佳机会。这可以使用所谓的T3 / T4分析来完成。

这基本上可以衡量玩家选择引擎建议的前3或前4动作之一的频率。这在很大程度上消除了识别正在使用的目标引擎的需要(因为即使偏好顺序不同,它们通常也会在前4/5个动作上达成一致)。

有可用的软件可以根据引擎的前n个动作来运行用户的一系列游戏。编辑:

我知道ChessAnalyse可用于进行此类分析。您可以尝试30天的试用版。


2
这可以通过拥有一些国际象棋知识的聪明作弊者来解决:棋手的动作不会使您的位置更糟,并且等待对手的失误会损害他/她的位置。如果您对不具备GM实力的人进行5至15分钟的闪电战,这肯定会迟早发生。此外,如果您偶尔犯下错误的举动和/或不坚持赢得每场比赛,我相信您的作弊行为不会被发现。
Andrea Mori

@AndreaMori:我同意您可以避免一些情况,但是随着他/她等级的提高,他将被迫抬头越来越多,最终将被发现。
sidprasher 2014年

谢谢,您已经提到有可用的软件。能给我举个例子吗?
萨尔瓦多·达利

6

如果您的网站在游戏运行时为用户提供一键获取FEN位置或PGN 的功能,则应考虑跟踪这些位置。

一些作弊者从一开始就作弊,但另一些作弊者则仅在遇到麻烦时才开始作弊,而且显然他们会使用FEN / PGN复制功能,因为手动设置位置非常耗时。

您应该以某种方式将其与他复制时的棋子一起存储,这样,您就可以将该点与接下来的棋子进行比较,看看他的力量是否借助棋牌引擎大大提高了。

但是非常重要的是,仅使用它来帮助您确定他是否在作弊,使用不使用人工干预的脚本是不公平的,例如,可能有很多错误的肯定答案,例如,我经常喜欢复制职位在我玩游戏时可以进行后续分析,而无需搜索我的游戏或从PGN中找到确切的动作。而且我并不总是将其留在剪贴板中,因为担心会覆盖它,因此我将其移至记事本(这意味着在复制后立即切换窗口)。


2
这似乎是在解决“如何管理服务器”的观点,而不是“我的对手是否作弊?”。一个(不是OP说什么案件对他很重要)。可能值得一提,因为我花了一些时间来理解您的意思,并从玩家的POV角度进行了思考。(好的答案……一旦理解就可以了^ _ ^')
Nikana Reklawyks

1
谢谢@ajax。我没有考虑过保存复制位置的移动并分析前后强度之间的差异。
Salvador Dali

骗子当然会发现并禁用该跟踪。或执行自己的复制功能,这并不难:codegolf.stackexchange.com/questions/89647/chess-conversion
Sarge Borsch

3

FWIW,虽然Lipton博客的指针描述Chess Life另一篇讨论他的工作的文章,但没人提到Ken Regan博士。

该文章非常有益于Regan的工作,2014年生效的检测技术状况以及FIDE的工作,即成立一个委员会来定义和发布标准,工具和技术,以帮助TD消除作弊行为。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.