- UCCI引擎联赛模拟器 版本:3.5
-
-
- 一、概述
-
- “UCCI引擎联赛模拟器”为UCCI引擎测试和比赛提供了自动批量对局的平台,并支持网上直播。该程序以Windows和UNIX操作系统为平台,可在命令行模式下完成下以几个功能:
- (1) 生成联赛的循环赛对阵表;
- (2) 对于每局比赛,负责启动引擎、控制时间、控制走棋、生成棋谱、处理结果等;
- (3) 计算各队的胜负情况和等级分,生成联赛排名表;
- (4) 记录联赛进程,当程序意外中止时,重新启动程序可让联赛紧接着上次记录的进程继续进行;
- (5) 如果模拟器运行在多处理器的计算机上,可用多个处理器同时举行多场比赛;
- (6) 通过Web服务器对联赛进行网上直播。
-
- 二、标准CPU时间
-
- 为让UCCI引擎适应各种时限的赛制,并让比赛具有客观公正性,比赛的时限应根据处理器的速度作相应的调整。例如,快棋赛的包干时间是600秒(10分钟),通常会在3000MHz的处理器上举行这样的比赛,以测试象棋引擎的水平。如果象棋引擎运行在1000MHz的处理器上,那么测试同一等级的快棋赛,就必须把时限调整为1800秒。
- 这样,就有必要规定一个处理器的标准速度(如3000MHz),一段程序的运算量就可以用“标准CPU时间”来衡量。如果象棋引擎运行在不同速度的处理器上(如1000MHz),就必须根据该处理器的速度,把时限由标准CPU时间(如600秒)调整为该处理器的实际时间(900秒)。
- 一般来说,象棋引擎都只使用处理器的整数运算功能,因此建议以“筛选素数”程序作为标准测试程序,来测定不同处理器的速度。UCCI引擎联赛模拟器附带的测试程序(GENPRIME.EXE)以简单筛法求得230以内的素数个数,程序作者建议把该程序的运行时间定为30秒的标准CPU时间,这样大约相当于3000MHz的x86型处理器的速度。
-
- 三、配置文件
-
- UCCI引擎联赛模拟器的程序名称是
UCCILEAG.EXE
,执行前需要事先编辑配置文件
UCCILEAG.INI
,说明联赛赛制信息、UCCI引擎的参赛信息和网上直播配置,模拟器运行时则会显示联赛进程和结果。
-
- 配置文件由[League]节、[Teams]节和[Live]节构成,其中[League]节规定了联赛的赛事信息,各个属性的意义是:
- (1) Event:赛事名称(可以用中文);
- (2) Site:比赛地点(可以用中文);
- (3) Processors:使用的处理器数,最多允许使用32个处理器(默认使用1个处理器);
- (4) Roundrobins:主客场(先后手)双循环次数,最多允许进行10次双循环(默认进行1次双循环);
- (5) InitialTime:加时制的初始时限,单位是分钟,最长时限可达500分钟;
- (6) IncrementalTime:加时制的每步增加时间,单位是秒,设成零即为包干制,最长加时可达500秒;
- (7) StoppingTime:模拟器向引擎发送"stop"指令(出现超时情况)后等待引擎反馈的时间,超出该时间则视为超时,单位是毫秒,最长可等待500毫秒;
- (8) StandardCpuTime:和一秒钟标准CPU时间等同的实际时间,单位是毫秒,默认值是1000,值越大说明机器速度越慢,最长可设成5000;
- (9) Promotion:是否允许仕(士)相(象)升变成兵(卒),这是一种中国象棋的改良玩法,其值是On或Off,默认值是Off(即默认采用常规走法)。
-
- [Teams]节规定了参赛队的信息,每个参赛队占据一行,其格式是:
-
- Team=<缩写>,<引擎名称>,<等级分>,<K值>,<引擎文件>,<UCCI选项配置文件(可选)>,<引擎介绍URL(可选)>
-
- 其中<UCCI选项配置文件>是文本文件,在棋局开始前(联赛模拟器向UCCI引擎发送
ucci 指令后),需要额外给予引擎的一些初始化指令(例如
setoption
loadbook)可以加到这个配置文件中。同一个UCCI引擎可以代表几个不同的参赛队,使用不同的UCCI选项配置文件,测试不同选项对引擎战绩的影响。
-
- [Live]节规定了网上直播配置,各个属性的意义是:
- (1) Host:直播主机,可以是IP地址、域名以及虚拟主机的域名;
- (2) Path:上传文件的程序路径;
- (3) Password:上传文件的口令;
- (4) Extension:上传文件的后缀,通常是html、htm、asp、php等被Web服务器自动解析为
text/html 类型的文件;
- (5) Counter:计数器的路径,如果指定计数器,则直播主页面会显示“您是第<计数器>位观众”的信息;
- (6) Header:直播页面页眉文件,直播时会将此文件(本地文件,含有HTML内容)插入到直播页面的页眉位置;
- (7) Footer:直播页面页脚文件,直播时会将此文件(本地文件,含有HTML内容)插入到直播页面的页脚位置;
- (8) Port:HTTP端口,默认是80;
- (9) Refresh:直播棋局页面的自动刷新时间,单位是秒;
- (10) Interval:两次上传文件的间隔时间,单位是毫秒,设置这个属性可以避免某些Web服务器因为客户频繁提交而拒绝响应。
-
- 如果进行联赛的主机无法直接访问Web服务器,那么可以在[Proxy]节中配置HTTP代理的参数,各个属性的意义是:
- (1) ProxyHost:HTTP代理服务器的地址;
- (2) ProxyPort:HTTP代理服务端口;
- (3) ProxyUser:HTTP代理的认证用户名;
- (4) ProxyPassword:HTTP代理的认证口令。
- 模拟器只通过POST方法访问HTTP代理(不使用CONNECT方法),所以代理服务必须支持POST方法。
-
- 需要注意的问题有:
- (1) 每条配置信息必须按照<属性>=<值>的格式录入,等号两边都不能有空格。建议用户在样板配置文件上作修改,以免造成标签的拼写错误。
- (2) 如果操作系统语言设定正确,那么配置文件中的赛事名称、比赛地点、引擎名称等可显示的信息可以用中文。
- (3) 可以把参赛的引擎放在不同的目录下,在<引擎文件>和<配置文件>两项上加上完整的路径,Windows下的路径用“\”分隔,UNIX下的路径用“/”分隔。
-
- 四、直播服务器
-
- UCCI引擎联赛模拟器的网上直播功能,适合多种类型的Web服务器,独立的Web服务器、虚拟主机、Web虚拟目录都可以为UCCI引擎联赛提供直播服务。
- Web服务器必须支持POST命令上传文件,模拟器会通过HTTP的POST命令把联赛首页、棋局页面和棋谱文件即时上传到服务器上,实现直播功能。模拟器为支持PHP的Web服务器提供了接收上传文件的脚本,即
upload.php ,联赛网上直播时需要在配置文件中设定该脚本的路径(即[Live]节的Path项)。如果Web服务器只支持ASP、Java/JSP等特定的脚本语言,则联赛主办者应该仿照
upload.php 编写脚本。
- 上传文件通常设有口令保护,口令被写入上传脚本中,并在模拟器的配置文件中设置相同的口令。口令必须妥善保管,否则可能被其他人上传恶意脚本,从而破坏服务器。由于观众不会直接访问到联赛运行的计算机,也不会直接获取到服务器上的上传脚本,所以口令在直播过程中是相对安全的。目前模拟器不支持SSL,如果需要加强口令保护,可以在直播计算机上设置SSL客户端代理,在服务器上启用HTTPS服务。
- 模拟器还为直播提供了页面背景、图标以及访问计数器等附件,建议直播前连同上传脚本一起事先把这些附件上传到服务器上。
-
- 五、棋谱文件、日志文件和进程文件
-
- 对每一场比赛(每一局棋),模拟器都会产生一个棋谱文件,名称是
XXX-YYYn.PGN ,XXX是主队(红方)的缩写,YYY是客队(黑方)的缩写,n代表第(n + 1)个双循环次数。
- 日志文件是 XXX-YYYn.LOG
,记录模拟器和两个引擎的通讯信息。
- 进程文件是 XXX-YYYn.CHK
,记录每个引擎反馈的着法和走完该着所剩的时间。当模拟器意外终止并重新启动后,就会由进程文件中的记录得到引擎的着法,重新生成输出报告和棋谱文件,从而节省了引擎重复运算的时间。
-
- 六、对引擎的建议
-
- 为提高测试和比赛的效率,建议引擎支持以下UCCI指令和反馈信息:
-
- 一、建议引擎支持“双时限制”,在时间策略上同时考虑对方的用时情况。
- 模拟器会以下面的形式告诉引擎“走棋方的时限”和“对方的时限”:
- go time <走棋方的时间>
increment <加时>
opptime <对方的时间>
oppincrement <加时>
- 注意:
- (1) <对方的时间>指的是对方上一步走完以后,剩余时间加上“加时”以后的时间;
- (2) 如果引擎不支持双时限制,模拟器也会按照上面的格式发送走棋指令,引擎只要不理会
opptime 和 oppincrement 便可。
-
- 二、建议引擎支持“提和”与“认输”功能,这有助于缩短比赛时间。
- (1) 引擎提和与接受提和的指令是:bestmove
<着法> [ponder
<后台思考>]
draw;
- (2) 引擎认输的指令是:bestmove
<着法> [ponder
<后台思考>]
resign。
- 注意:
- (1) 模拟器可能会向引擎发送
go draw time ... 的指令,说明对方已提和,即便引擎不支持提和与接受提和,也不能因为有了
draw 关键字而解析不出
go 指令;
- (2) 双方连续给出有
draw 的反馈,模拟器就会终止比赛,认定和棋。
-
- 三、建议引擎支持“毫秒制”,以提高时间策略的精确度。
- (1) 模拟器支持“秒制”和“毫秒制”,如果引擎在启动时没有输出反馈
option usemillisec ..., 则采用“秒制”。
- (2) 支持“毫秒制”的引擎必须在启动时输出反馈
option usemillisec ...,模拟器在接收到这条反馈时,会向引擎发送指令
setoption usemillisec true,以后每条指令的时间单位都是“毫秒”。
-
- 四、建议引擎支持禁手指令,以避免因规则解释不当而被判负。
- 当重复局面即将达到3次时,模拟器将会向引擎发送
banmoves ... 指令,告诉引擎走哪步棋是长打判负的。引擎反馈着法时,不能走出
banmoves 指令中所规定的着法,否则就可能在后续的着法中被判长打作负。
-
- 七、程序下载
-
- UCCI引擎联赛模拟器通常会跟UCCI引擎ElephantEye一同发布,源程序及其Windows版本下的编译程序下载地址是:
- http://www.xqbase.com/download/eleeye.7z。