极客挑战赛手打强者竟是这样逆袭TOP3!?
Posted QcloudCommunity
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极客挑战赛手打强者竟是这样逆袭TOP3!?相关的知识,希望对你有一定的参考价值。
导语 | 在腾讯云+社区联合腾讯码客、腾讯安全平台部全新打造的创新赛事【腾讯极客挑战赛 | 鹅罗斯方块】中,在短暂10天内,4570名参赛者或以自己的硬核技术诠释着 “代码无所不能”;或坚持游戏主义,手玩出一片天。今天小编邀请到的就是超强手打玩家——汪好盛。他以硬核手打与AI技能双管齐下,最终脱颖而出、斩获季军!
大佬这样说
AI与手打同时尝试打分,最后提交的最高成绩是手打成绩,主要思路是尽可能堆高后进行消4,依据序列的情况妥协进行消3.2,通过本地实现一个模拟器提供各种信息来辅助整个流程。AI算法思路与内部赛道的139w分大佬类似,手打最终117.9w分。
一、参赛途径
在目前国内最大的现代俄罗斯方块的QQ群,群主屁(farter)同时也是腾讯爷的安利下参赛。
群内对现代方块AI和经典方块AI都有非常多的研究(在方块AI猴群合作诞生了misamino zzztoj 等开创性的高效率对战AI,同时zzztoj目前仍被世界方块圈认为是最强的无延迟现代方块对战AI),也有很强的人类高手。在屁爷的推荐下,同时我比较感兴趣也有相对比较多的方块编写与魔改AI的经验,于是我参加了这次比赛。
二、解题过程
先看了一眼规则,就直接进去手打玩了玩。虽然有das但手感还是怪,旋转系统也与现代块,甚至传统块都有巨大差异。完全没有锁定延迟,比较严苛的死亡条件,没有hold,单next,这些对玩家来说条件过于苛刻了。看到还有速度的数字,后期肯定不是人类能操作的情况,于是放弃了直接手打的可能性,转而开始分析网页代码。
(一)JS的代码分析
网页的js代码非常友好,完全不设置任何阻碍,甚至在引导怎么使用,摆明了想让我们往AI或是其它不寻常的道路走,于是我魔改了一下得分一个提交,于是被后台gank了。之后又看到了控制台输出的内容(一大串方块动作形成的录像文件),基本确定了是后台会对操作序列进行验证得分。同时也发现,实质上自然软降也被算在了录像文件的D之中,所以速度什么的其实是无关紧要的,后台根本不会考虑自然降落速度造成的影响。本质上就是一个special judge的题。(给出输入,后台与分数对比,相同则通过)
接下来是从代码中寻找相关规则,过程就不再赘述。发现是总共10000块,固定序列,以及场地上方块越多消行数越多就能获得更高的奖励。基本明确了不能单纯通过存活策略刷长度来取胜。要在10000块内用尽可能高的效率去完成消除。(尽可能满场地,消4,妥协进行消3.2)
分析到了现在基本明朗了,我思考了一下认为可以走两个方向。一个是通过AI定制策略去尽可能完成更高的分,但相对的,这个结果不一定可控,很难快速知道预期效果,第二个则是通过编写模拟器去人工完成这一题(10000块也是可以勉强接受的数量),这个方案的好处就是可以很快的得到预期分数,明确自己最后大概的分段。
(二)编写模拟平台
无论是哪种方案,一个自己的模拟平台是必要的。正好,之前我就一直计划着编写一个现代方块通用AI平台,虽然完成度还不高,但基础设施已经基本搭建完成。遇见这次赛题,正好拿出来进行实战。设计的时候我提供了可以高度自定义规则的接口,于是遇见这次赛题,小小的修改了一个旋转系统出来,不消一个小时就实现了对平台的模拟。
接下来就是两个方向的同时进行了,不过本次比赛我个人的方块AI效果不是特别好,平时也没有太多时间进行优化。思路上与内部赛道的139w大佬有一点类似(也是块群AI系列的常用算法)(非常推荐观摩),不过由于各种原因并没有来得及出一个比较好看的成绩。
(三)最终解题方案
AI方案虽然也一直在推进,但效果并不是很好,推荐阅读刚才所提到的另一篇大佬的解题报告。手打的则是和朋友一起进行了研究了一些策略,以及提供了相关的模拟器功能。
在这个非常严苛发块环境与奇长无比的赛程下。如果一个失误就要重新开始打,这是绝对不可以被接受的。于是我给模拟器加入了回撤系统,并支持随时保存的功能。但有这些依然是不够的,本来网页只提供了1块的预览,这显然是太少了的,既然已经能拿到全部序列,为什么不多看一点。所以一开始我模拟器改为了6块预览。对于堆叠来说容易了很多,但也注意到了这种随机序列下。虽然消4是收益最高的,但也会出现接近100块没有一个i的情况。这时候玩家其实需要提前知道这个情况,来即时的对场地进行调整,于是加入了下一块i会来的时间,后来想了想,都提供了i为什么不干脆全部种类都提供以保证尽可能适合的堆叠?于是就加入了信息统计,其他一些常规的信息统计和死亡判定就不多说了。其实也非常想实现一个能够利用到某种下一块到来信息的AI算法,但可惜没有很好的设计思路。希望有大佬能尝试看看。
最终打完了10000块,获得了117.9w分,实际预测分其实还要高一些,不过人类终究还是有极限的啊.jpg
三、比赛总结
最后提交的成绩不是AI算出地成绩其实还是有点遗憾的,靠手打的成绩混到了第三有点不好意思,各位大佬的解题思路也都非常精彩。依然在参赛中收获了很多经验。也打算在赛后抽空完成这个GeekAI与平台以真正地完赛!
作者简介
汪好盛
软件开发工程师
汪好盛,软件开发工程师。2018icpc赛事青岛银牌、ccpc赛事秦皇岛银牌;浙江省大学生程序设计比赛金牌。
推荐阅读
一文读懂@Decorator装饰器——理解VS Code源码的基础(下)
????戳阅读原文前往「腾讯云+社区」作者个人主页参与交流哦~
以上是关于极客挑战赛手打强者竟是这样逆袭TOP3!?的主要内容,如果未能解决你的问题,请参考以下文章
[HCTF 2018]WarmUp&[极客大挑战 2019]Knife&[极客大挑战 2019]Secret File&[极客大挑战 2019]BuyFlag