Chapter 4 pbb 测号器的使用
4.1 为什么选择 pbb 测号器?
(可能并不)众所周知,魂魄妖梦 AKG1OENX@Squall
是八围不到 650 的“无表号”,但是它的强评高达 6595,一度在榜单上排名强评第一好几个月。而此号的测出,得益于由玩家【曙光】和【powerless】最初撰写,【Squall】和【曙光】进行进一步改良的 pbb 测号器。
在使用 pl 测号器的过程中,由于降低八围阈值意味着需要多测更多的虚评,进而会导致速度下降,很少有人会将八围阈值降得如此低,那么,是否就有可能错过这样的超级强号?
不如来使用 pbb 测号器,采用全新一代曙光筛 2.0,帮助你更好地进行筛号,提高过虚评的号的质量,节省时间成本,寻找超级强号!
pbb 和 pl 测号器相比的优势:
- 采用全新曙光筛,在几乎不损失速度的前提下更不容易漏号。
- 内置新版虚评(1015 版),虚评更准确,也不需要先设置低的旧版阈值然后再过一遍新版,一步到位。同时也能增加虚单阈值。
- 有单开多线程的功能,为不会自己手写一键多开的玩家提供便利,而且更加稳定。
- 可以测的格式和字符集更加丰富多彩。
- 可以测号的同时顺便收集属性稀有 ID(比如八围最高、华丽 ID 等等)。
- 多线程测号时输出全在一个文件中,方便查找和汇总。
- pl 测号器的名字有长度限制,而 pbb 测号几乎没有。
- 用每 1e6 个号制定 task 分配给线程的方案,使得测顺序的多开时变得方便(不需要预估需要多久才能测完,可以随时开随时关,从上一次的起点开始即可)。
- 可以随时改变开的线程数,在需要操作电脑时降低线程数,等操作完了再提升回去,比较方便。
4.2 pbb 测号器的配置
这个测号器称为 pbb 测号器的原因是它是在【早期 pbb 测号器】的基础上改造的,虽然实际上代码已经相差甚远,甚至有可能已经忒修斯之船了。
这里介绍一下 pbb 测号器的用法。
请尽量选择最新版本,截止这段教程最后更新(20250420)时最新版为 pbb5.2.1
直接去看资源文件下载页里面的 “pbb 测号器”压缩包。它应当包含这些东西:
- out 文件夹
- 三个 dll 文件
- 一个 exe 文件
除此之外(这是建议),由于 pbb 的输入比较繁琐,你应该再建一个 input.txt
或者其他文件名的文件,用于储存你的输入是怎样的,下次再输入的时候只需要打开 exe 再进行复制即可。
接下来并不简要地介绍一下 pbb 的输入参数。
hanzo_cnt_3=6400
hanzo_cnt_4=64287
首先前两行是调试信息,你不需要管。(甚至把 hanzi 打成了 hanzo)
是否开启 DEBUG 模式?是否关闭在线线程修改?(输入 0/1/2/3)
输入 0 表示关闭 DEBUG 模式,开启在线线程修改
输入 1 表示开启 DEBUG 模式,开启在线线程修改
输入 2 表示关闭 DEBUG 模式,关闭在线线程修改
输入 3 表示开启 DEBUG 模式,关闭在线线程修改
DEBUG 模式是在有人反馈测号器出 bug 的时候让他开启然后告诉开发者输出信息的东西,建议别开,只选择 0 或者 2。区别在于能否动态改变线程数。
输入 0 的话,作用是,比如说你接下来一段时间随时可能需要用电脑,这样的话用电脑的时候就把线程数调低甚至设为 0,不用的时候然后再重新修改线程数,比较方便。注意输入的线程数不能超过最开始开的线程数,否则会无效。
输入 2 就不能修改线程数了,但是速度会稍微快一点点(几乎可以忽略)。
使用说明:使用前现在同目录下建一个名为 out 的文件夹
假如显示缺少 dll 就把 pl 测号器的那几个复制过来
请输入队名:
输入一个 @ 表示自行输入编码转换后的结果
字面意思,输入队名。注意到测号器在终端打开,默认编码是 ANSI,也就是说有些奇怪的队名(比如某些 Unicode,如 emoji 字符),无法直接输入,所以才有 输入一个 @ 表示自行输入编码转换后的结果
的功能。如果队名比较正常直接输入即可,否则输入一个 @
。
输入 @
后会出现 输入转化编码后的长度
,这里的编码是 UTF-8 编码。如果你不知道怎么转化编码,那就不要搞这种东西了。比如黄瓜 emoji 字符的编码是 -16 -97 -91 -110
,那么你就应该输入 4。输入转化编码后的每个数字
,很多转换器会给出范围为 0~255 的一串数,这时需要你自己将每个数减去 256,变成 -128~127 内的数字后再输入(这是 unsigned char 和 int 之间转换的结果)。
随后会出现一行数字,表示你输入的战队名转换后的数字,后面如果有多余的 0 不用管,可以自行检验一下。
输入前缀数量(无前缀也要输入 1 )
为了方便一些人同时测多个前缀后缀的需求,开发了多前缀后缀模式。
意思是,在字符集和长度相同的情况下,你可以同时测多个前后缀。
比如你有几十个前缀想测(这些前缀可能是一些系列之类的)但是担心自己无法较为均匀地分配测号量,可以输入前缀的总数,并在后面一行一行地输入这些前缀。
输入第 1 个前缀(如果无前缀输入一个单独的加号):
输入一个 @ 表示自行输入编码转换后的结果
字面意思。如果前缀为空那么就输入一个单独的 +,其他和输入队名时的情况一样。
输入后缀数量(无后缀也要输入 1 )
后缀同理。目前不支持中缀。
注意!拉丁字母、盲文字母、扩展汉字在 GB2312 编码中不存在,只能使用直接 UTF-8 输出,有一定风险,谨慎使用!
注意!拉丁字母、盲文字母、扩展汉字在 GB2312 编码中不存在,只能使用直接 UTF-8 输出,有一定风险,谨慎使用!
注意!拉丁字母、盲文字母、扩展汉字在 GB2312 编码中不存在,只能使用直接 UTF-8 输出,有一定风险,谨慎使用!
注意!“全部汉字”也有部分在 GB2312 编码中不存在,也只能使用直接 UTF-8 输出!
注意!“全部汉字”也有部分在 GB2312 编码中不存在,也只能使用直接 UTF-8 输出!
注意!“全部汉字”也有部分在 GB2312 编码中不存在,也只能使用直接 UTF-8 输出!
这段话有点过时,但是开发者懒得改了。这段话的意思是,推荐只使用 UTF-8 编码输出。因为很多后续的工具是需要直接读入 UTF-8 编码的。
请输入字符集中单个字符的长度:
字面意思,普通的 ASCII 字符长度为 1,希腊字母之类的长度为 2,汉字之类的长度为 3,想要什么字符集自己去查。
当然也可以自定义一些奇奇怪怪的字符集,比如说所有大写字母后面加一个中文感叹号,这个字符集的单个字符长度就为 4。
目前不支持字符集里存在长度不一样的字符。
输入完之后,会跳出来一些东西,这里以希腊字母(长度为 2)为例。
有以下几种字符集供选择,可以进行任意组合
1. 小写希腊字母(24个)
2. 大写希腊字母(24个)
3. 小写俄文字母(33个)
4. 大写俄文字母(33个)
5. 小写拉丁字母(31个)
6. 大写拉丁字母(31个)
7. 自定义(自己输入编码转换后的结果)
8. Unicode 转码(自己输入区间)
请输入你选择几种进行组合
对于不同长度的字符集,分别预设了一些你可能会需要用到的字符集,当然如果没有的话你也可以自行输入。
首先你得输入以上的几种进行组合,比如说我想要大小写希腊字母作为字符集,那就输入 2,表示选了两种。
请输入你选择进行组合的字符集编号
输入那些编号即可。比如大小写希腊字母对应的输入为 1 2。
如果你需要的字符集并不在预设的范围内,你可以输入 7 或者 8。注意这两个不要同时输入,且如果和其他的一起输入的话,放在最后!
如果你输入 7 那就按指示做,不再赘述了。如果你输入 8:
你输入的区间应当为 10 进制而非 16 进制
例如 U+0080 到 U+07FF 你应当输入 128 2047
考虑到有可能不连续区间的可能,你需要先输入区间数量
接下来你需要输入区间数量,如果 Unicode 编码是一段连续的区间那就输入 1 即可,如果不是,那就有几段就输入几段。
请输入区间 [l,r],最大区间范围为 128 到 2047(U+0080 到 U+07FF)
自行查阅你想选的字符集的 Unicode 编码范围,这里不再赘述。这个 128 和 2047 会随你输入的字符集单个字符长度变化而变化。
是否需要检查字符集?
输入 0 表示不需要,输入 1 表示显示在屏幕上,输入 2 表示输出在一个名为 charset.txt 的文件里,输出 3 表示直接输出 UTF-8 编码到文件里
如果你不放心自己输入的字符集对不对,那你可以检查一下。如果字符集涉及到非 ANSI 的字符的话那只能选 3。否则的话选 1 ~ 3 都可以。
请选择枚举模式:
1. 顺序
2. 随机,随机方式是随机若干个长度为 1e6 的区间进行顺序
3. 随机,随机方式是按位随机
4. 随机,随机方式是随机若干个长度为 1e6 的区间进行顺序,且前缀和后缀一一对应
注意:多前缀的顺序模式将会枚举前缀测完顺序,后缀取模滚动
即测号数量为测号区间大小乘前缀数量,和后缀数量无关
不推荐选 3,如果看不懂所谓“随机若干个长度为 1e6 的区间”你就理解成和按位随机效果差不多就行了。2 会比 3 快一些。
这里说一下 2 和 4 之间的区别。在单前后缀的时候 2 和 4 没区别。多前后缀的话,2 会随机选一个前缀,然后随机选一个后缀,4 会随机选一个前缀,然后选编号和这个随机选的前缀相同的后缀。
意思就是,如果你的前缀和后缀是一一对应的,你应该选择 4,否则选择 2。
顺序模式也可以使用多前缀后缀。比如你有很多前后缀格式,但是每个格式需要的测号量相对较少,可以使用此功能。前缀和后缀也应该是一一匹配的。
输入可变长度:
字面意思。
- 如果你选择的是随机模式:
输入总数(如果输入 -1 表示 1e18):
如果不知道自己到底打算测多少可以输入 -1(永远测不完),等想停的时候直接关掉。但是无论如何你输入的值应当至少以亿作为单位(很多时候是万亿),不要输一个小不拉几的数。
- 如果你选择的是顺序模式:
输入区间方式说明:你输入的区间总数应当与输入的前缀数匹配。
为了简化输入,采用可以一次性输入多个前缀组的方式。
每一组区间 (n,[l,r)) 表示接下来 n 组区间都是 [l,r)
输入区间组的数量:
搞这种东西是为了方便之前所说的多前缀后缀的测号格式。正常来说你需要对每一个前后缀格式都输入一个区间,但是考虑这个区间有可能有大量重复,所以增加了一次性输入多个区间的功能。
比如你想要前 50 个都测 0~1000000000,后 50 个都测 0~30000000000,那你就输入
2
50 0 10000000000
50 0 30000000000
即可。
输入虚评阈值和虚单阈值,关系为或:
这里你需要输入两个数。
推荐阈值:xp 4900~5000 xd 5600~6000。
值得注意的是对于某些特殊类型的号(指分身护符魅惑苏生),在测号时会将 xp 阈值自动降低 300(这个东西写在代码内部了)。
是否收集特殊属性号(输入 0 表示否,输入 1 表示输出破纪录的号,输入 2 表示自己设定阈值):
是否在输出文件中显示虚评虚单:(0 表示否,1 表示是):
是否在将 UTF-8 编码直接输出:(0 表示转换为 GB2312 编码,1 表示是,建议不懂的人选 0):
是否将 task 完成情况的日志输出在文件中(0 表示输出在文件里,1 表示输出在屏幕上
是否将速度显示输出在文件中(0 表示输出在文件里,1 表示输出在屏幕上
推荐 1 0 1 1 1。
特殊属性号指的就是八围最高之类的,假如你输入 2 你自己看吧。
不建议在输出文件中显示虚评虚单,因为很多后续工具需要纯粹的号作为输入。
忽略“建议不懂的人选 0”这句话,只是忘记删了而已。后续很多工具需要 UTF-8 编码的原号文件。
后两个东西显示在屏幕上应该更好一些。
输出文件的文件名
输入 + 生成一个随机文件名,输入 - 生成一个关于时间戳的文件名
输出会以追加的形式写入到新的文件中,不需要担心被覆盖。
你可以输入想要的文件名,或者单纯地输入 +
或者 -
。
输入你要开的线程数:
自己查看自己电脑的 CPU 型号,看看有几个核,几个线程可以用。如果你在测号时不需要用电脑做别的事,可以“开满”,即输入 总线程数±2 范围之内的数字。不想开满的话也可以输入更小的数。
随后会输出几个号让你看一下格式大概是怎样的,即,看看你的格式有没有搞错。但是如果你的字符集包含非 ANSI 的字符可能会显示莫名其妙的东西。
最终输出号的结果在 out 文件夹内,文件名就是你在程序中输入的文件名。
前一章已经提到,测号器的输出应当直接喂给 ds 配队器,然后再开箱。
如果你想收藏官方评分较高的号(例如,统计队内 qp 榜、全能榜等),可以从测号器输出中挑出 xp/xd 较高的号,用开箱器测评。开箱器的用法将会在后续章节中介绍。
4.3 测号器读数方法
如果你按前面说的选择显示在屏幕上的话,开始测号之后大概会跳出来类似这样的东西。
task90 finished,task_mex=92,count:0.000100T
tot=14, (739,5348,4995),time: 11.29s, speed: 0.765482T/d,time left:6h32m39s
再等一点还会有类似这样的东西。
cur_speed:0.877264T/d,time left(?):4h1m0s
tot 就是目前过筛输出的号量。后面括号里的三个数字是,测到现在为止,八围/虚评/虚单的最高值。time 就是已经过去的时间,speed 就是估计速度(这个是从开始到现在的平均速度),time left 就是,根据你输入的测号量以这个速度估计还需要多久才能测完。
但是注意到 speed 是平均速度,可能你最开始的时候出了点什么事情导致速度很慢,现在调回正常了,但是平均速度依然会算之前的那段时间,这样会导致不太准确,所以有 cur_speed(表示最近 0.001T 内的平均速度),更接近所谓的瞬时速度。
这里顺便一提,假如你发现你的平均速度突然骤降,那么很可能是中间经过了很长一段时间都没有进行有效的测号,但是用的时间已经算在内了。
简要说一下 pbb 自动多开的原理。它创建了多个线程,将测号任务以 1e6 为单位分割成任务,然后每个线程会接收任务,当自己这边的任务执行完了之后会继续接收新的任务。所以这个 task90 finished 就是第几个任务被完成了。注意到完成任务的顺序并不一定完全就是布置任务的顺序。
然后 task_mex 就是最小的还没有被执行完成的任务,如果有强迫症认为必须每一个号都被枚举,那么测顺序的时候可以通过这个来计算最多从哪里开始就一定没有漏的。count 就是字面意思,你目前测了多少号。