返回列表

Raine Force writeup (2nd place solution)

400. Halite by Two Sigma | halite

开始: 2020-06-15 结束: 2020-09-22 游戏AI 数据算法赛
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 个智能体的胜利次数。

Raine Force 对阵顶级战队

然而,对阵 Tom 的胜率与顶级竞争对手不同(我最好的 5 个智能体对抗 Tom 最好的 5 个智能体的胜率大约只有 40%)。

Tom Van de Wiele 对阵顶级战队

我创建这些表格的笔记本在这里


由于其他队伍已经提交了很好的讨论,我在本次讨论中主要关注 Raine Force 特定的实现。


有状态的长期决策制定

我将我的高级决策 AI 称为“项目”。

  • 所有项目首先计算它们的优先级并按其排序,然后依次运行。
  • 如果项目不适合,它会返回小于 0 的优先级。
  • 项目可以持有船只和卤素(作为预算)多个步骤,以进行一致的长期决策。
    • 然而,某些项目从其他项目中抢夺船只仍然是开放的,以处理灵活的紧急情况。
      • 例如,HuntProject 可能会从其他项目中抢夺船只。
      • 在某些情况下交换船只角色对于更快地移动到目标位置是有价值的。然而,实现无 Bug 的交换任务很难。因此我仅在非常有限的情况下实现了它。

实际项目(大致按优先级排序)

HuntProject 示例
  • HuntProject(每个对手船只 1 个项目)
    • 盟军船只是否包围了对手船只?(= 对手船只是否被我的候选船只包围?)
    • 它分配 5 到 8 艘船(每个方向 1 或 2 艘)以尽可能稳定地进行猎杀。
    • 当包围不完整(例如只有 3 个方向 / 只有 4 艘船)或需要另一个对手的配合时,它什么也不做(= 没有船只加入)。
    • 如果其中一艘盟军船只想要停留,但它站在卤素地面上且对手没有被将死,它可能会后退。此外,当对手船只的安全位置只有一个时,它们可能会使用前向步骤预测来移动到有效方向。

DefenseShipyardProject 示例
  • DefenseShipyardProject(每个盟军船厂 1 个项目)
    • 它分配一艘比任何对手都能更快到达船厂的船只。
    • 如果有空闲步骤,该船会开采地面卤素。这与 MineProject 冲突。通常 DefenseShipyardProject 的优先级高于 MineProject,然后 MineProject 被忽略,DefenseShipyardProject 会参考 MineProject 的卤素阈值。