Arbiter评测系统指北
dingyuxiao99 · · 科技·工程
0x00 前言
NOIP又要到了,你还在为比赛后批量评测代码而发愁吗?你还在为校内组织模拟赛没法统一评测而苦恼吗?Cena用户当我什么都没说你还在对着没有任何文档的Arbiter评测系统发愁吗?现在好了,有了这篇教程,让你轻松完成大量代码评测顺带偷瞄一眼其他大佬的成绩.
Arbiter预装于NOI Linux,可以用于比赛代码的批量离线评测,适用于希望完全重现NOIP评测机的比赛评测,以及希望组织比赛时断网后统一评测,是非常优秀的解决方案(虽然不提供独立安装包不跨平台不提供文档).当然你也可以选择替代品Project Lemon和Cena,使用起来也很得心应手.
0x01 准备工作
- 实体机(对于代码评测来说,如果有条件的尽量将NOI Linux安装在实体机上,因为虚拟机运行的时候会产生一定的时间误差,但是如果要求不那么严谨,安装在虚拟机上也是OK的)
- 待评测选手代码和输入输出数据(后文会讲到正确的存放要求)
- 选手信息(后文会讲到如何格式化选手信息等相关操作)
0x02 创建比赛
- 点击New,新建比赛;(此处以NOIP 2017为例)
- 右击试题概要下的空白,新建考试;(我们为了偷懒,就把day1和day2合并到一个考试里面了) 完成后就像下图这样。
- 编辑题目信息.按照题目要求设置包括名称、分值、测试点数量、比较方式、编译器等等,请按照实际情况配置,难度不大,不再赘述,直接上一个配置好的截图吧;
Hint:在比较方式的选择上,建议采用字符串比较-多行单字符串,这种比较方式通常可以应对绝大多数OI题目,如果题目有特殊要求可以选择其他方式,当然Arbiter也提供自己编写比较方式的功能,大家可以自行造轮子百度了解比较方式.以及编译选项中一定要跟上-lm
以保证和NOIP完全一致.下图以phalanx
为例,介绍如何配置一个可以正常评测的题目:
到这里,我们已经完成了Arbiter题目的配置了,保存一下比赛后,开始将评测数据、选手代码以及选手信息放在正确的地方.
这里图片有点模糊我自己差点都看不清楚了,介绍一下目录下所有文件/文件夹的功能:
- data:评测过程中数据的临时存放;
- evaldata:此文件夹下存放所有的评测数据;
- filter:所有比较方式的源码和编译后的可执行文件,Arbiter可直接调用;
- final:暂未发现作用;
- players:存放选手代码;
- result:存放评测过程中的详细日志以及得分;
- tmp:顾名思义用于存放临时文件
那么突然好奇前面的data文件夹是拿来干嘛的,但是必须强调文件夹权限,一定要保证可读可写当然直接给777最省事了 - day*.info:每场考试信息;
- player.info:存放选手信息;
- setup.cfg:整个比赛的配置信息,Arbiter通过这个文件管理整个比赛;
- taska_b.info:存储每个题目的所有配置信息;
- team.info:暂未发现作用;
0x03 处理数据
- 处理评测数据:此处要求评测数据都放在
evaldata
文件夹中,不能包含任何子文件夹,且保证输入数据的扩展名为problemX.in,输出数据的扩展名为problemX.ans; - 处理选手代码:将代码按照选手分文件夹,文件夹名称即为学生编号(如TEST-001),文件夹下又必须包含以题目命名的子文件夹(如math,park,cheese等),每个文件夹下的源代码也必须以题目命名,其实和NOIP考场要求一致,目录结构如图所示(长条形的图的排版真让人头疼):
- 处理评测数据:此处要求评测数据都放在
- 配置选手信息并写入player.info文件中:建议不要在文件中包括中文,格式为username@ID,如为了省事可以保存为ID@ID,最后导出csv的时候可以直接使用
vlookup()
完成合并.
切记,完成以上操作前后都必须保证Arbiter已经关闭,否则可能带来一些不可预料的后果
再次打开Arbiter,打开比赛,会让你去选择setup.cfg文件,Arbiter自动读取所有配置,以及你添加进来的选手信息、代码以及测试数据.
Hint:开始大规模评测之前,强烈建议再次检查相关配置是否正确,并选择一个选手进行试评测,得到结果后与手动编译测试后的结果进行对比,如果评测日志中没有出现与手动结果差异太大的结果则可开始.
0x04 评测&&处理结果
全选选手,点击评测,泡一杯茶并打开崩崩崩静候评测结束.之后导出csv,获取最终结果.
如果对评测结果有任何疑问,可以去Contests/result/dayX/PlayerX/对应题目下查看评测日志,Arbiter针对每一个点的评测都有详细的日志记录.
到这里整篇教程就结束了,但是我还是要强调的是,因为NOI Linux是基于Ubuntu 14.04 LTS x86进行的魔改,精简过程中删除掉了部分驱动以及运行库,如果在虚拟机中使用可能会遇到OpenVM Tools无法安装的情况,建议使用SCP或者其他方法进行文件传输(在VMware Workstation Pro v14上把U盘挂载到虚拟机中无法识别,至少在写这篇文章的机器上挂载失败了,未验证后续版本是否修复).