扫雷数据解析 - putianyi889/Minesweeper-makes-me-happy GitHub Wiki
扫雷数据是用来评价局面复杂度和玩家表现的指标。现有的各项数据可以大致分为单局数据和历史数据。
-
单局数据是每个录像特有的数据。单局数据又分为基础数据和导出数据。
- 基础数据是不依赖其他任何数据的数据。基础数据又分为局面数据和输入数据。
- 局面数据由雷的排布决定,包括bv, op, is, zini, cell。
- 输入数据由玩家输入的鼠标操作决定,包括time, path, cl, ce, bvdone, opdone。
- 导出数据是为了评估一局水准,结合若干基础数据计算得到的数据。
- 基于bv和time的有bvs, rqp, qg, ios, rv。
- 用于评估点击速度的有ces, cls。
- 用于评估操作效率的有corr, thrp, ioe。
- 用于评估处理op效率的有cpo, coo。
- 基于path的有mov, sao, iome。
- 基于zini的有zinis, znt, zne。
- 基于完成度的有completion, estime, stnb。
- 基于cell的有numbers, obg。
time、bvs、stnb是最被广为接受的评价实力的三个单局数据,称为三大参数。
- 基础数据是不依赖其他任何数据的数据。基础数据又分为局面数据和输入数据。
-
历史数据是一位固定玩家整个扫雷生涯所有单局数据中提炼出来的数据。目前较受欢迎的历史数据有梁山分系统、pb系统、玩家线系统三大类。
- 梁山分系统是根据全国顶尖玩家的数据评估一名玩家水平的标准。
- pb是一名玩家在某特定bv上获得的历史最好成绩。从pb可以导出战力、典型时、典型stnb、奖牌系统、互啄机制。
- 玩家线是一名玩家历史上的互不双杀的最强录像的集合。从玩家线可以导出粗分档、细分档、互磕机制。
基础数据
基础数据是每局录像特有的且不依赖其他任何数据的数据。再做细分,基础数据又可以包括一个图自身的特性(即局面数据)和玩家的输入数据。
图自身的特性包括bv、op、is、各种zini、cellx。玩家的输入数据包括各种cl、各种ce、path、time。严格来讲,雷的排布才是最基础的图自身特性,玩家的每次点击和鼠标轨迹才是最基础的玩家输入数据,但是这些过于繁琐,不便于总结归纳,一般不讨论。
局面数据
bv, op, is
bv是“3BV”的简写,3BV是“BBBV”的简写,而BBBV是“Bechtel's Board Benchmark Value”的缩写。bv由是衡量局面复杂度的最经典的参数。
op是“Opening”的缩写,中文为“空”。
is是“Island”的缩写,中文为“岛”。
武帝专栏对bv,op,is的概念以及它们在图的难度中起到的作用做了详细解释,这里不重复赘述。
zini
如果说bv是衡量一个图的nf操作数下限,zini就是衡量一个图的fl操作数下限。 zini的概念和算法由Elmar Zimmermann和Christoph Nikolaus2009年在国际网论坛提出并用他们的姓命名。因为寻找一张图的fl最优解是NP问题,即不可能以较小的代价计算,他们转而寻找快速的近似算法。他们提出了三种贪心算法。
贪心核心思路就是在每一步中找出收益最大的操作。在已知所有雷的位置的前提下,每个局面下对每个非雷格只有一种可以产生收益的操作:
- 在这格周围标雷并双击这格,收益是双击打开的bv-标雷数-1。如果这格是尚未打开的,则考虑到打开这格需要的操作,收益还要-1。之前已经打开的bv和已经标上的雷不计。直接双击相当于标雷数=0。
从开局开始每一步计算所有非雷格的收益,如果有收益非负的格子,选择收益最大的一格进行对应的操作;如果所有格子收益都为负,则把剩余bv用左键点完。用这种方式把一局扫完得到的操作数即为zini。三种zini算法仅在细节上有不同。
gzini是“Greedy ZiNi”的缩写,当存在多个收益最大且相等的格子时,它总是选择最上面的最左边的一格操作。rzini是“Random Zini”的缩写,当存在多个收益最大且相等的格子时,它随机取一格操作。用随机的方式反复扫这张图,直到连续n把没有刷新最低操作数纪录为止。hzini是“Human ZiNi”的缩写。它开局会首先把所有op用左键打开,然后和gzini一样。
显然rzini仍然是有运气成分,是不稳定的,所以一般不用这个数据。gzini和hzini不一定谁大谁小,也都不是不能战胜。目前初级和中级都有人打败过gzini和hzini(即使用更少的操作数完成),但是高级仍未有人达成这项成就。Arbiter中统计了gzini和hzini,其中gzini就写作zini。
cellx
cellx代表数字x的数量。x取值为0到8。
输入数据
time
time是完成一局所用的时间,是扫雷中最重要的数据。
历史上曾经出现过两种time。一种从1秒开始计时,代表是Clone。另一种从0秒开始计时,代表是Arbiter。目前主流的计时方式是从0秒开始计时,但是由于最早的Winmine是从1秒开始计时,仍有一些概念保持了从1秒开始计时的习惯。
- 中国扫雷网显示的数据是从1秒开始计时的。
- (非常重要,圈内人必读,对圈外人算匪夷所思的超冷知识)秒数和sub的概念是在从1秒开始计时的前提下定义的。比如中级10秒的意思是从1秒开始计时,整数部分是10,换算到rtime应该是从9.00到9.99。高级sub40的意思是高级秒数sub40,即高级秒数<=39,即rtime<=38.99。
无论使用何种计时习惯,rtime(Real Time)是没有歧义的,一律指从0秒开始计时的时间。本页面接下来提到的time均指rtime。
path
path是完成一局过程中光标经过的距离。path的单位是像素或格,1格=16像素。
cl, ce
cl是“Clicks”的缩写,意思是鼠标点击数。ce是“Efficient Cl”的缩写,意思是有效点击数。细分到不同的点击操作,又有lcl、rcl、dcl、lce、rce、dce,其中前缀l是Left缩写,表示左键;前缀r是Right缩写,表示右键;前缀d是Double缩写,表示双击。
cl和ce的区别是无效点击。左右双键产生无效点击的原因分别是:
- 左键点歪点到数字或旗子上;取消左键;连续操作时因反应不及点到刚打开的op上。
- 右键点歪点到数字上。
- 双击点歪;取消双击;试探双击不成功。
bvdone, opdone
bvdone意思是已完成bv,opdone意思是已完成op。
导出数据
bvs, rqp, qg, ios, rv
bvs是“bv/s”的简写,公式是bvs=bv/time
,意思是每秒解决的bv数,越大越好。bvs是最经典的速度指标,其重要程度仅次于time。一般来说bv越小time越好,而bv越大bvs越好,所以我们需要其他参数来平衡。
rqp是“Rapport Qualité Prix”的缩写,公式是rqp=(time+1)/bvs
。之所以要把时间+1,是因为这个参数产生时的计时习惯仍是从1秒开始。如果在time较大时忽略掉这1秒,则rqp近似于time^2/bv
。rqp非常看重time的作用, 但是在time很小的时候会有偏移,在time<60时偏移已经较为严重了。
qg是“Quality Grade”的缩写,是郭锦洋根据大量数据定义的实力参数,公式是qg=time^1.7/bv
。qg与rqp相比优势在于更加强调bvs,且削除了低时间下的数据偏移。
ios是“Index of Speed”的缩写,公式是ios=log(bv)/log(time)
。
rv是“Rirun Value”的缩写,公式是rv=sqrt(yybv*rqp+0.25)-0.5
。这里yybv表示意淫用的3bv,例如高级使用100,中级使用30。
ces, cls
和bvs类似,ces=ce/time
,cls=cl/time
。这两个参数代表玩家的操作速度,其中cls侧重于整体的操作频率,而ces表示有意识的操作频率。
corr, thrp, ioe
corr是“Correctness”的缩写,公式是corr=ce/cl
。因为产生无效点击的原因大多数情况下不是点歪(如果大量点歪则很难开一局),corr实际上一定程度可以反映操作的有脑程度。无脑的狂双和完全忽视潜在op的连击都会导致corr降低。
thrp是“ThroughPut”的缩写,公式是thrp=bv/ce
。对于fl,thrp可以体现整体标双效率。对于nf,thrp可以体现整体破空效率。
ioe是“Index of Efficiency”的缩写,公式是ioe=bv/cl
。ioe体现了整体操作效率。
很显然我们还有如下一些关系:
corr=ces/cls
thrp=bvs/ces
ioe=bvs/cls
ioe=corr*thrp
对nf而言,提升操作效率的唯一方式就是提升对op的意识,nf的ioe, thrp, corr意义都差不多,越高表示破空意识越强。对fl而言,corr体现的主要是操作精度和试探双击成功率,而thrp体现的是优化策略的效率。因为合理的试探双击是可以产生收益的,fler不应该过度追求corr。
cpo, coo
对于nf来说,单局的低thrp除了因为破空意识不够以外,还可能因为图不好。说人话就是,op越多thrp越低。为了抵消op的波动对thrp的影响,发明了两个参数。
cpo是“avg Ce wasted Per Opening”的缩写,公式是cpo=(ce-bv)/op
。coo是“avg Ce cost On each Opening”的缩写,公式是coo=cpo+1
。
mov, sao, iome
mov是“Movement”的缩写,公式是mov=path/time
,体现了整体鼠标移速。
iome是“Index of Movement Efficiency”的缩写,公式是iome=bv/path
,体现了扫法策略。iome偏低表示倾向于就近解决bv,而iome偏高表示倾向于在大范围内寻找最优解。
sao是“风骚度”的缩写,公式是sao=mov*ces
,体现了整体操作强度。
zinis, znt, zne
以bv作为衡量局面复杂度的标准里,bvs代表速度,thrp和ioe代表效率。bvs、thrp、ioe在以zini作为衡量局面复杂度得环境中对应zinis、znt、zne:
zinis=zini/s
znt=zini/ce
zne=zini/cl
对于不同的zini算法,改变相应的zini前缀即可,比如gzinis、rznt、hzne等。
completion, estime, stnb
completion意思是完成度,公式是completion=bvdone/bv
。
estime是“Estimated Time”的缩写,意思是预计时间,公式是estime=time/completion
。
stnb是“尸体牛逼”的缩写,用来衡量一个尸体的牛逼程度,公式是stnb=sqrt(completion)*常数/qg
。初级、中级、高级中的常数分别是36, 162, 435
,这个常数是为了让同水平下三级别的stnb大致相等。正是因为这个常数,stnb比qg更受欢迎,是最重要的“三大参数”之一。
常数也可以用
73.5*mode^2-94.5*mode+57
计算得到。
在2023年9月13日之前的常数是
47.299, 153.73, 435.001
,计算常数的公式是87.420*(mode^2)-155.829*mode+115.708
。
numbers, obg
numbers表示一张图所有数字的和,公式是numbers=0*cell0+1*cell1+2*cell2+3*cell3+4*cell4+5*cell5+6*cell6+7*cell7+8*cell8
。
obg衡量玩家对bv的反应速度,公式是obg=10000*bvs/numbers
,其中10000纯粹是为了让数值不至于过小。
梁山分系统
前端成绩
一名玩家在一段时间中排名靠前的成绩就是前端成绩。未限定这一段时间的前提下默认为是该玩家整个生涯的前端成绩。前端成绩又分为两种:
- 第n名成绩,加后缀
n
,比如time1
表示纪录,bvs5
表示第5高的bvs。第n名成绩又称为边缘成绩。 - 前n名成绩平均,加后缀
.n
,比如stnb.10
表示最高的10局stnb的平均值。根据上下文,有时.n
也可表示前n名成绩之和。
梁山分系统只考虑玩家的三级别time, bvs, stnb,共九个参数。三级别分别缩写为b, i, e。三参数分别缩写为t, b, s。例如eb.5表示生涯最强的5个高级bvs的平均。
NT20.5
NT是National Top的缩写,意思是全国最强。NT20表示全国最强20人。NT20.5表示全国.5
最强的20人的平均。因为梁山分一共计算9个.5
,每个项目对应的前20名可以是不同玩家,共有9个NT20.5。
NT20.5的作用是作为一个代表高水平玩家的锚点,定量地评估所有玩家的水准。最初的锚点是NT12.5,曾经使用过NT15.5,目前使用的是NT20.5。逐渐增加数据量受到了高水平玩家增多、电脑硬件算力增加的影响。未来还可能会继续增加数据量。数据量越高越有利于消除个别极端玩家的影响。
目前NT20.5不是即时更新的,而是在实时值和当前值整体偏差超过1%时更新。截至2022年4月20日的NT20.5标准:
time | bvs | qg | |
---|---|---|---|
beg | 1.477 | 8.428 | 0.182 |
int | 9.123 | 5.664 | 1.050 |
exp | 36.640 | 4.580 | 3.093 |
软实力、lsf
软实力通过将玩家的.5
和NT20.5作对比,得到对玩家实力的评价。软实力100相当于水平达到了NT20.5的水准。三参数的软实力分别是NT20.5/t.5*100
, b.5/NT20.5*100
, s.5/NT20.5*100
,其中NT20.5取的是对应项目的值。各级别的软实力是该级别三参数软实力的加权平均。三级别三参数的权重如下表。
t | b | s | |
---|---|---|---|
b | 31% | 44% | 25% |
i | 34% | 34% | 32% |
e | 33% | 33% | 34% |
这些权重是由郭锦洋、张晔、黄晓伟、胡雨涛、沈观福、许建宇等人共同讨论决定的。
三级别总的软实力由三级别软实力加权相加得到。软实力=5*初级软实力+12*中级软实力+16*高级软实力
。三级别权重最初是4,9,12
,之后通过各路雷友不懈的“积极”反馈逐渐调整为了现在的情况。NF软实力是用一名玩家的NF.5计算的软实力,但是所用的锚点仍是不限制NF的NT20.5。
郭锦洋回忆三级别权重的调整过程:有人希望是0 0 1,有人希望是1 1 1,有人希望是10 40 99。有人要加,我就加;有人要降,我就降。
lsf是“梁山分”的缩写,由软实力和NF软实力加权平均得到,公式是lsf=0.94*软实力+0.06*NF软实力
。NF权重是由NF玩家群体和FL玩家群体“和平谈判”决定的。
定阶
根据一名玩家的软实力,可以大致推算出该实力对应的高级time,并依据对应的高级time给玩家相应的头衔,即定阶。