Arbiter评测系统指北

dingyuxiao99

2018-10-19 22:26:55

Personal

![Arbiter评测系统主界面](https://cdn.luogu.com.cn/upload/pic/38617.png) ## 0x00 前言 NOIP又要到了,你还在为比赛后批量评测代码而发愁吗?你还在为校内组织模拟赛没法统一评测而苦恼吗?~~Cena用户当我什么都没说~~你还在对着没有任何文档的Arbiter评测系统发愁吗?现在好了,有了这篇教程,让你轻松完成大量代码评测~~顺带偷瞄一眼其他大佬的成绩~~. Arbiter预装于NOI Linux,可以用于比赛代码的批量离线评测,适用于希望完全重现NOIP评测机的比赛评测,以及希望组织比赛时断网后统一评测,是非常优秀的解决方案~~(虽然**不**提供独立安装包**不**跨平台**不**提供文档)~~.当然你也可以选择替代品Project Lemon~~和Cena~~,使用起来也很得心应手. **** ## 0x01 准备工作 1. 实体机(对于代码评测来说,如果有条件的尽量将NOI Linux安装在实体机上,因为虚拟机运行的时候会产生一定的时间误差,但是如果要求不那么严谨,安装在虚拟机上也是OK的) 2. 待评测选手代码和输入输出数据(后文会讲到正确的存放要求) 3. 选手信息(后文会讲到如何格式化选手信息等相关操作) **** ## 0x02 创建比赛 1. 点击New,新建比赛;(此处以NOIP 2017为例) ![新建比赛界面](https://cdn.luogu.com.cn/upload/pic/38619.png) 2. 右击试题概要下的空白,新建考试;(我们为了偷懒,就把day1和day2合并到一个考试里面了) ![比赛配置界面](https://cdn.luogu.com.cn/upload/pic/38624.png) 完成后就像下图这样。 ![新建好比赛和题目的状态](https://cdn.luogu.com.cn/upload/pic/38628.png) 3. 编辑题目信息.按照题目要求设置包括名称、分值、测试点数量、比较方式、编译器等等,请按照实际情况配置,难度不大,不再赘述,直接上一个配置好的截图吧; ![配置好的整场比赛](https://cdn.luogu.com.cn/upload/pic/38632.png) **Hint:**在比较方式的选择上,建议采用字符串比较-多行单字符串,这种比较方式通常可以应对绝大多数OI题目,如果题目有特殊要求可以选择其他方式,当然Arbiter也提供自己编写比较方式的功能,大家可以自行~~造轮子~~百度了解比较方式.以及编译选项中一定要跟上`-lm`以保证和NOIP完全一致.下图以`phalanx`为例,介绍如何配置一个可以正常评测的题目:![phalanx题目的配置](https://cdn.luogu.com.cn/upload/pic/38631.png) 到这里,我们已经完成了Arbiter题目的配置了,保存一下比赛后,开始将评测数据、选手代码以及选手信息放在正确的地方. **** ![比赛目录,存放比赛所有的相关数据](https://cdn.luogu.com.cn/upload/pic/38633.png) 这里图片有点模糊~~我自己差点都看不清楚了~~,介绍一下目录下所有文件/文件夹的功能: - data:评测过程中数据的临时存放; - evaldata:此文件夹下存放所有的评测数据; - filter:所有比较方式的源码和编译后的可执行文件,Arbiter可直接调用; - final:暂未发现作用; - players:存放选手代码; - result:存放评测过程中的详细日志以及得分; - tmp:顾名思义用于存放临时文件~~那么突然好奇前面的data文件夹是拿来干嘛的~~,但是必须强调文件夹权限,一定要保证可读可写~~当然直接给777最省事了~~ - day*.info:每场考试信息; - player.info:存放选手信息; - setup.cfg:整个比赛的配置信息,Arbiter通过这个文件管理整个比赛; - taska_b.info:存储每个题目的所有配置信息; - team.info:暂未发现作用; **** ## 0x03 处理数据 1. 处理评测数据:此处要求评测数据都放在`evaldata`文件夹中,不能包含任何子文件夹,且保证输入数据的扩展名为problemX.in,输出数据的扩展名为problemX.ans; 2. 处理选手代码:将代码按照选手分文件夹,文件夹名称即为学生编号(如TEST-001),文件夹下又必须包含以题目命名的子文件夹(如math,park,cheese等),每个文件夹下的源代码也必须以题目命名,其实和NOIP考场要求一致,目录结构如图所示(长条形的图的排版真让人头疼): ![选手代码存放示例](https://cdn.luogu.com.cn/upload/pic/38646.png) 3. 配置选手信息并写入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盘挂载到虚拟机中无法识别,至少在写这篇文章的机器上挂载失败了,未验证后续版本是否修复). # 顺便预祝各位RP++