返回列表

8th place solution

449. Hungry Geese | hungry-geese

开始: 2021-01-26 结束: 2021-08-09 游戏AI 数据算法赛
第8名解决方案

第8名解决方案

作者: nagiss (Grandmaster) | 团队: TCOR3参加失敗組 | 排名: 第8名

由于我们在比赛最后一个月才匆忙参赛,我们的解决方案没有得到充分的完善,因此原本不打算公开。不过,这篇帖子促使我这样做(笑),所以我将简要分享一下。

英文文本主要由自动翻译生成。如果有任何难以理解的部分,请随时提问。

GitHub 仓库地址 在这里

  • 该解决方案基于 AlphaZero 方式的学习和搜索。
  • 我主要负责评估函数部分,@kkt89swa 主要负责 MCTS 部分。
  • 作为 PV-Network,我使用了基于 NNUE(第一层为 EmbeddingBag 的 4 层 MLP)的 NN,而不是 CNN。
    • 但是,为了 NNUE 的名誉,我认为我们没能充分发挥 NNUE 的威力。
  • 没有使用 NNUE 的增量更新。相反,我们使用了稀疏特征。
  • 作为特征,我们使用了 44 种变量(替换为二进制变量后约 2400 个),这些变量可以通过轻量计算获得。
  • 模型的推理是用 C++ 实现的。
    • 我只对计算量大的部分显式编写了计算向量化代码。
    • 由于评估环境中的 CPU 是 Broadwell,因此可以使用高达 AVX2 的向量运算。
  • 我使用 PyTorch 来训练模型。
  • 对于我们最后提交的智能体,我使用了每步 0.1 秒的自我对弈生成的约 20 万局棋谱作为训练数据。
    • 这可能还不够。
  • 模型在单次推理中输出所有人的策略和价值。
  • 两个智能体之间的价值差被视为胜率的对数,计算所有 6 对的交叉熵作为价值的损失函数。
    • 在推理时,同样通过计算每对的胜率,可以得到期望排名。
    • 四个智能体的期望排名之和总是 10。
  • 在树搜索中,通过将食物可能出现的位置缩小到 3 个位置来加深搜索。
  • 在最后一天的提交中,我们做了一个改动,在决定行动时不仅使用选择次数,还使用平均价值。这大大减少了在与较弱对手比赛时的意外死亡次数。
  • 我认为在本地测量时,搜索速度大约是 100k nps(每秒节点数)。
    • 似乎约 60% 的搜索时间用于计算评估函数。
  • 队名 "TCOR3参加失敗組" 指的是一群未能参加 Topcoder Open (TCO21) 算法第 3 轮的人。
    • 我们两人都通过了第 2 轮,但我回家晚了没能及时注册,而 @kkt89swa 睡过头了。
同比赛其他方案