大家好,恭喜所有的参赛者!
我们想分享我们团队获得第17名的解决方案。我们的团队“team-tokai”由 minaminao (@mnmnao)、yasagure (@yasagure) 和 Johannes (@johannesmdr) 组成。
算法方法主要有两种类型:使用或不使用强化学习。我们知道强化学习并不适用于某些游戏,因此在比赛初期,我们花了很多时间“理解Halite游戏的本质”以及“系统化强化学习有效的情况”,以确定强化学习作为问题解决者是否有意义。
我们得出的结论是,进行强化学习将是一个巨大的泥潭,因此我们选择不使用强化学习。主要原因在于“玩家动作空间的大小”和“寻求全局优化的难度”。例如,拥有30艘飞船时,每回合有6^30种动作模式;即使在AlphaGo活跃的围棋中,每回合最多也只有几百个选项。
为了解决这个巨大的动作空间,采取逐船强化学习的方法似乎是合理的。然而,虽然我们可能能够寻求每艘船的最优解,但很难寻求考虑到所有船只的整体最优行动,这让我们相信需要付出相当大的努力才能超越非强化学习方法。
另一方面,在上一次Halite比赛中(规则与此略有不同),一些团队在强化学习方面表现出色,因此我们决定不完全放弃强化学习,我们的团队成员Johannes决定从比赛中期开始继续坚持这一点。
我们的策略有六个关键点。
像许多顶尖团队一样,我们尽快生成了飞船。生成飞船越早越好,正如我们将在下面看到的,你拥有的飞船越多,在攻击对手时拥有的优势就越大。因此,在游戏开始时存储Halite是一个坏主意,重要的是在游戏开始时高效地收集Halite的同时制造更多的飞船。
在第100步左右,Halite几乎耗尽。这就是所谓的“公地悲剧”。我们还将拥有大约20艘飞船(如果每个玩家的能力平衡的话)。
从这里开始,摧毁对手飞船的策略是有利的,因为开采Halite几乎没有收获。生成一艘飞船需要500 Halite,所以摧毁一艘飞船将使攻击者损失约500 Halite。我们最多用四艘飞船攻击对手的飞船,因为用多艘飞船攻击比用单艘飞船攻击更有可能使敌方飞船失去位置。
尽可能避免开采Halite也是有利的,因为如果我们收集Halite,它们将成为攻击目标。如果我们在远离基地的单元中收集它们,它们被摧毁的几率更高。我们避免在距离基地一定距离的单元中收集Halite。
避免开采Halite还有另一个目的:再生Halite的数量。适度开采Halite可以防止Halite枯竭。