Raine Force 赛后总结 (第二名解决方案)
Raine Force 赛后总结 (第二名解决方案)
作者: viewlagoon | 发布时间: 2020-09-23
注意:尽管我的队名 "Raine Force" 看起来像是在使用强化学习,但我的智能体是 100% 基于规则的。
大家好!我非常享受这次 Halite 比赛。感谢 Kaggle 和 Two Sigma 的工作人员。在 kaggle-environments 中,helpers.py 对我帮助很大。同时也要感谢各位参赛者,观看回放时各种策略非常有趣。
恭喜 Tom!我认为我能取得如此好成绩的一个原因是我的转换策略幸运地对 Tom 聪明的骚扰策略具有一定的免疫力。事实上,我最好的 5 个智能体的失败次数几乎等于或多于它们对抗 convexOptimization、Uninstall LoL、mzotkiew 和 KhaVo Dan Gilles Robga Tung 的最佳 5 个智能体的胜利次数。
然而,对阵 Tom 的胜率与顶级竞争对手不同(我最好的 5 个智能体对抗 Tom 最好的 5 个智能体的胜率大约只有 40%)。
我创建这些表格的笔记本在这里。
由于其他队伍已经提交了很好的讨论,我在本次讨论中主要关注 Raine Force 特定的实现。
有状态的长期决策制定
我将我的高级决策 AI 称为“项目”。
- 所有项目首先计算它们的优先级并按其排序,然后依次运行。
- 如果项目不适合,它会返回小于 0 的优先级。
- 项目可以持有船只和卤素(作为预算)多个步骤,以进行一致的长期决策。
- 然而,某些项目从其他项目中抢夺船只仍然是开放的,以处理灵活的紧急情况。
- 例如,HuntProject 可能会从其他项目中抢夺船只。
- 在某些情况下交换船只角色对于更快地移动到目标位置是有价值的。然而,实现无 Bug 的交换任务很难。因此我仅在非常有限的情况下实现了它。
实际项目(大致按优先级排序)
- HuntProject(每个对手船只 1 个项目)
- 盟军船只是否包围了对手船只?(= 对手船只是否被我的候选船只包围?)
- 它分配 5 到 8 艘船(每个方向 1 或 2 艘)以尽可能稳定地进行猎杀。
- 当包围不完整(例如只有 3 个方向 / 只有 4 艘船)或需要另一个对手的配合时,它什么也不做(= 没有船只加入)。
- 如果其中一艘盟军船只想要停留,但它站在卤素地面上且对手没有被将死,它可能会后退。此外,当对手船只的安全位置只有一个时,它们可能会使用前向步骤预测来移动到有效方向。
- DefenseShipyardProject(每个盟军船厂 1 个项目)
- 它分配一艘比任何对手都能更快到达船厂的船只。
- 如果有空闲步骤,该船会开采地面卤素。这与 MineProject 冲突。通常 DefenseShipyardProject 的优先级高于 MineProject,然后 MineProject 被忽略,DefenseShipyardProject 会参考 MineProject 的卤素阈值。