421. Rock, Paper, Scissors | rock-paper-scissors
呼!从一开始这就是一场激烈的比赛。充满竞争、活力、令人神经紧绷,当然也极具启发性。这是我第一次参加 Kaggle 比赛。在比赛开始后,我也尝试过其他开放的 Kaggle 比赛,但我太沉迷于 RPS(石头剪刀布)了,以至于把其他比赛都抛在了一边。
过去的3个月如梦似幻,每一天都在寻求更好的解决方案,每当编写出一个解决方案时都会涌起一阵兴奋和紧张感。如果你看过 Netflix 的剧集《后翼弃兵》,你就会理解我过去3个月的状态。我太专注于这场比赛了,以至于睡前会在脑海中构想策略,或者无论身在何处都会陷入沉思,试图思考改进的方法。我无法控制自己不深深地陷入这场比赛中。
比赛的概念非常简单:制作一个玩 RPS 的机器人并击败对手。我从未想过在创建 RPS 智能体背后竟然需要如此多的思考。对我来说,比赛经历了几个阶段,每个阶段我都在研究特定的方法论。
这是比赛的前两周。我不知道该如何入手(请记住,这是我的第一次 Kaggle 比赛),所以我开始阅读公开的 Notebooks 和早期的讨论。过了一段时间,我了解了比赛的运作机制,以及如何使用 obs 和 conf 参数编写一个简单的智能体。但当时我对 3 个公开的 Notebook 非常感兴趣:Not So Markov、MAB 和 Memory Patterns。当时我主要是在研究这些 Notebooks。
这是我在论坛上大家开始讨论之前发现 RPSContest 的时候。那时,你们许多人已经开始使用 MAB 作为样板来编写多策略智能体,但我当时还不清楚 MAB 的运作原理,所以当时并没有想到这一点。我编写了自己的模板,使这些 RPSContest 机器人兼容 Kaggle 比赛,然后我开始严格测试它们。这就是我使用 RPS: Agents Comparison notebook 的时候。在此期间,在调整了 RPSContest 的多个机器人后,我冲进了前 10 名,维持了大约 2-3 周。当时得分最高的是 Random drop switch 和 Prognosis Modeling。在这个阶段结束时,我发现了 ben haley 写的 这段代码,他使用了 2 个策略,就像一个基础的集成模型。这对我来说是一个主要的转折点。我开始构建类似的东西,但使用了 3-4 个策略。基本上是记录每个策略的得分,玩得分最高的那个,并且每隔固定时间将所有策略的得分重置为 0。
现在我们到了 12 月中旬。比赛正如火如荼地进行,有 800 多名参与者,强有力的策略开始涌现。Top Player Strategies 讨论帖真正开启了一系列令人惊叹的策略和方法,正是在这个时候,我意识到了多策略智能体的重要性和影响力。这就是我创建基于 MAB 的多策略选择器的时候。这也是我一直持续到比赛结束的方法。在这个阶段,我测试了各种策略、选择器和元选择器,我想最后我尝试了大约 150 多种策略的排列组合。就像 @returnofsputnik 在他的帖子里提到的那样,我几乎不会提交同一个智能体超过两次,我总是调整参数,然后提交机器人的下一个版本。
所以,就像你们许多人实现的那样,我也有一个策略池(都是 RPSContest 机器人的修改版),我有各种方法从中选择最好的智能体。我的解决方案与多人的方案有一些共同点,但在如何将它们加入我的选择机制方面略有不同。
我的集成中有 16 个不同的策略,它们获取对手的最后动作并返回下一步要走的动作 + 另外