很多在线网站上,玩家可以彼此实时下棋。大部分比赛时间为5-10分钟。借助国际象棋软件的使用,可以通过使用Fritz或Rybka为他提出建议来利用其优势。
例如,我可以输入对手的一举一动,看看有什么软件可以为我提供建议。
我在考虑一些可以暗示玩家作弊的功能:
- 他切换屏幕的次数
- 游戏速度(在容易和非常困难的位置)
- 游戏的准确性
还有其他想法吗?
PS:对我而言,这并不重要,您是从服务器(或客户端)的角度考虑的。
很多在线网站上,玩家可以彼此实时下棋。大部分比赛时间为5-10分钟。借助国际象棋软件的使用,可以通过使用Fritz或Rybka为他提出建议来利用其优势。
例如,我可以输入对手的一举一动,看看有什么软件可以为我提供建议。
我在考虑一些可以暗示玩家作弊的功能:
还有其他想法吗?
PS:对我而言,这并不重要,您是从服务器(或客户端)的角度考虑的。
Answers:
据我所知,这实际上是一个非常复杂的问题,而不是已经以令人满意的方式解决的问题。本质上,我们要求一种算法来执行一种反向图灵测试,以区分人类玩家和计算机。
首先,除非您完全控制客户端环境,否则客户端检查将始终存在弱点。让我们采用第一个想法-检查窗口之间的切换,听起来不错。不幸的是,通过在单独的计算机上运行国际象棋引擎,或将我的引擎与客户端集成在一起,以至于没有“窗口切换”发生,或者更改了客户端以报告窗口中的0更改,它还是无法解决的。真正的办法,以确保它是你的客户端上运行的代码,真的。
我们剩下的是物理上受严格控制的客户端环境(任何在线游戏都不会发生)或服务器端检查,即查看实际玩过的动作(也许是两次动作之间的时间,如您所说),并尝试演绎计算机或人的方面。
服务器端检查也可以分为两种方式。您可能可以尝试“自上而下”的方法,这类似于“从历史上的过去游戏来看,只有2%的人做出了动作,而50%的计算机做出了动作”。如果我们有足够的数据用于“任何给定位置”,那么这实际上将是一个很好的方法。国际象棋的搜索空间是如此之大,以至于一旦您通过了早期的中期游戏,即使是非常大的数据集也将不会有大量与您的位置相匹配的游戏。
假设我们在等式的人类方面没有任何可靠的统计信息,您仍然可以将位置显示在多个国际象棋引擎上(每个国际象棋都有许多不同的时间设置),并查看玩家的动作匹配程度如何一台计算机。就其本身而言,这也将导致许多假阳性,但是,对于相同的象棋引擎和时间设置重复进行肯定,将使玩家越来越有可能在作弊。为了进一步增强这一点,我可能会考虑采用“自下而上”的方法分析象棋位置。简而言之,试图弄清楚为什么人类和计算机的游戏方式不同。例如,人类倾向于识别常见的模式。在具有“奇数”模式或不太可能的情况的游戏中,人类不太可能能够非常准确地玩游戏。都不是,
为了向您的清单添加一些细节,我将遵循教授如何通过检测突然的变化来检测论文中的抄袭行为。在国际象棋中,这很难定义,但下棋风格或下棋强度的突然变化可能表示作弊。具体来说,我会寻找不具有特征的激进动作,这些动作往往只是“锻炼”,并且对玩家没有不利影响(过于准确)。强迫伙伴进行4次以上移动的球员通常将骑士放在板的边缘,依此类推(有可能……只是不太可能)。然而,听起来如何工作可能会占用整本书(或更多)。
编辑:最近有一篇有关顶级国际象棋中作弊和检测的文章。
闪电战中,您可以分辨出他们正在使用多少时间。使用引擎的人为每步动作花费的时间是一致的,而不是像大多数普通玩家那样在开局中突飞猛进,并在中间游戏中放慢速度。特别是,他们不能快速玩游戏,因为他们每次打开动作后都必须更新计算机板。如果他们在进行第二次移动时花了五秒钟,而在进行第二十次移动时花了五秒钟,则可能是在使用引擎。
屏幕切换次数和播放速度毫无意义。如果您使用这些内容向在线棋牌网站的组织者投诉,他们将嘲笑您。
有两种方法可以判断某人是否在作弊。首先是“吸烟枪”。考虑这个游戏部分-
问题是你会在那个位置上扮演什么角色?情况是,在比赛的最后一轮中获胜,将使您在一系列大师级比赛之前赢得比赛。仅在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格式上传游戏,以进行“快速测试”,以识别锦标赛中可能存在的异常值。通过“筛选”应理解为,这仅提供了没有判断价值的初步测试,只是在拒绝指控并拒绝进行手动全面测试的同时可以引用它。
为了给出我如何解决这个问题的答案,我将使用一个简单的想法:
我们的想法是,公开的国际象棋引擎数量有限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
转弯,由引擎评估X
,n_i
是转弯时玩家i
(或某个合理子集)可用的总移动次数。
然后简单地计算
p* = minimum p over all chess engine X, all subsequences y.
如果p*
小于某个阈值,则将玩家标记为作弊者,因为存在子序列y
和象棋引擎X
,该子序列和象棋引擎带来了玩家未作弊的概率低于期望概率的可能性。
我认为赛后分析为您提供识别球员是否作弊的最佳机会。这可以使用所谓的T3 / T4分析来完成。
这基本上可以衡量玩家选择引擎建议的前3或前4动作之一的频率。这在很大程度上消除了识别正在使用的目标引擎的需要(因为即使偏好顺序不同,它们通常也会在前4/5个动作上达成一致)。
有可用的软件可以根据引擎的前n个动作来运行用户的一系列游戏。编辑:
我知道ChessAnalyse可用于进行此类分析。您可以尝试30天的试用版。
如果您的网站在游戏运行时为用户提供一键获取FEN位置或PGN 的功能,则应考虑跟踪这些位置。
一些作弊者从一开始就作弊,但另一些作弊者则仅在遇到麻烦时才开始作弊,而且显然他们会使用FEN / PGN复制功能,因为手动设置位置非常耗时。
您应该以某种方式将其与他复制时的棋子一起存储,这样,您就可以将该点与接下来的棋子进行比较,看看他的力量是否借助棋牌引擎大大提高了。
但是非常重要的是,仅使用它来帮助您确定他是否在作弊,使用不使用人工干预的脚本是不公平的,例如,可能有很多错误的肯定答案,例如,我经常喜欢复制职位在我玩游戏时可以进行后续分析,而无需搜索我的游戏或从PGN中找到确切的动作。而且我并不总是将其留在剪贴板中,因为担心会覆盖它,因此我将其移至记事本(这意味着在复制后立即切换窗口)。