【参赛经验分享】外部赛道rank3,手打+AI的同时尝试解题

2021-08-20 16:32:57 浏览数 (1)

TL;DR

AI与手打同时尝试打分,最后提交的最高成绩是手打成绩,主要思路是尽可能堆高后进行消4,依据序列的情况妥协进行消3.2,通过本地实现一个模拟器提供各种信息来辅助整个流程。AI算法思路与内部赛道的139w分大佬类似,手打最终117.9w分

1.参赛途径

在目前国内最大的现代俄罗斯方块的QQ群,群主屁(farter)同时也是腾讯爷的安利下参赛(方块群的猴浓度难以估计)。

群内对现代方块AI和经典方块AI都有非常多的研究(在方块AI猴群合作诞生了misamino zzztoj 等开创性的高效率对战AI,同时zzztoj目前仍被世界方块圈认为是最强的无延迟现代方块对战AI),也有很强的人类高手。在屁爷的推荐下,同时我比较感兴趣也有相对比较多的方块编写与魔改AI的经验,于是我参加了这次比赛。

2.解题过程

先看了眼规则,就直接进去手打玩了玩。虽然有das但手感还是怪,旋转系统也与现代块,甚至传统块都有巨大差异。完全没有锁定延迟,比较严苛的死亡条件,没有hold,单next,这些对玩家来说条件过于苛刻了。看到还有速度的数字,后期肯定不是人类能操作的情况,于是放弃了直接手打的可能性,转而开始分析网页代码。

2.1 JS的代码分析

网页的js代码非常友好,完全不设置任何阻碍,甚至在引导怎么使用,摆明了想让我们往AI或是其它不寻常的道路走,于是我魔改了一下得分一个提交,于是被后台gank了(很合理,不然就失去意义了bushi)。之后又看到了控制台输出的内容(一大串方块动作形成的录像文件),基本确定了是后台会对操作序列进行验证得分。同时也发现,实质上自然软降也被算在了录像文件的D之中,所以速度什么的其实是无关紧要的,后台根本不会考虑自然降落速度造成的影响。本质上就是一个special judge的题(?,给出输入,后台与分数对比,相同则通过。

接下来是从代码中寻找相关规则,过程就不再赘述。发现是总共10000块,固定序列,以及场地上方块越多消行数越多就能获得更高的奖励。基本明确了不能单纯通过存活策略刷长度来取胜。要在10000块内用尽可能高的效率去完成消除。(尽可能满场地,消4,妥协进行消3.2)

分析到了现在基本明朗了,我思考了一下认为可以走两个方向。一个是通过AI定制策略去尽可能完成更高的分,但相对的,这个结果不一定可控,很难快速知道预期效果,第二个则是通过编写模拟器去人工完成这一题(10000块也是可以勉强接受的数量),这个方案的好处就是可以很快的得到预期分数,明确自己最后大概的分段。

2.2 编写模拟平台

无论是哪种方案,一个自己的模拟平台是必要的。正好,之前我就一直计划着编写一个现代方块通用AI平台,虽然完成度还不高,但基础设施已经基本搭建完成。遇见这次赛题,正好拿出来进行实战。设计的时候我提供了可以高度自定义规则的接口,于是遇见这次赛题,小小的修改了一个旋转系统出来,不消一个小时就实现了对平台的模拟。

接下来就是两个方向的同时进行了,不过本次比赛我个人的方块AI效果不是特别好,平时也没有太多时间进行优化。思路上与内部赛道的139w大佬有一点类似(也是块群AI系列的常用算法)(非常推荐观摩),不过由于各种原因并没有来得及出一个比较好看的成绩。

2.3 最终解题方案

AI方案虽然也一直在推进,但效果并不是很好,推荐阅读刚才所提到的另一篇大佬的解题报告。手打的则是和朋友一起进行了研究了一些策略,以及提供了相关的模拟器功能。

随便打的注释不要在意(x随便打的注释不要在意(x

在这个非常严苛发块环境与奇长无比的赛程下。如果一个失误就要重新开始打,这是绝对不可以被接受的。于是我给模拟器加入了回撤系统,并支持随时保存的功能。但有这些依然是不够的,本来网页只提供了1块的预览,这显然是太少了的,既然已经能拿到全部序列,为什么不多看一点。所以一开始我模拟器改为了6块预览。对于堆叠来说容易了很多,但也注意到了这种随机序列下。虽然消4是收益最高的,但也会出现接近100块没有一个i的情况。这时候玩家其实需要提前知道这个情况,来即时的对场地进行调整,于是加入了下一块I会来的时间,后来想了想,都提供了I为什么不干脆全部种类都提供以保证尽可能适合的堆叠?于是就加入了信息统计,其他一些常规的信息统计和死亡判定就不多说了。其实也非常想实现一个能够利用到某种下一块到来信息的AI算法,但可惜没有很好的设计思路。希望有大佬能尝试看看(?

最终打完了10000块,获得了117.9w分,实际预测分其实还要高一些,不过人类终究还是有极限的啊.jpg

3 比赛总结

最后提交的成绩不是AI算出的成绩其实还是有点遗憾的,靠手打的成绩混到了第三有点不好意思,各位大佬的解题思路也都非常精彩。依然在参赛中收获了很多经验。也打算在赛后抽空完成这个GeekAI与平台以真正的完赛!(另外提到的群的群号为112897780,欢迎对方块或者方块ai有兴趣的大佬们加入)

0 人点赞