前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【参赛经验分享】外部赛道rank3,手打+AI的同时尝试解题

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

原创
作者头像
whoisdiao
修改2021-08-20 16:32:57
1K2
修改2021-08-20 16:32:57
举报
文章被收录于专栏:参赛记录参赛记录

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有兴趣的大佬们加入)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TL;DR
  • 1.参赛途径
  • 2.解题过程
    • 2.1 JS的代码分析
      • 2.2 编写模拟平台
        • 2.3 最终解题方案
        • 3 比赛总结
        相关产品与服务
        腾讯云代码分析
        腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档