返回列表

1st place solution

501. Kore 2022 | kore-2022

开始: 2022-04-12 结束: 2022-07-26 游戏AI 数据算法赛
第1名解决方案
作者:Harm Buisman
发布时间:2022-07-27

比赛回顾

感谢 @bovard 和所有参赛者,在这场有趣的比赛中给我带来了巨大的乐趣。我参加这次比赛是为了入门强化学习,但在尝试了 @egrehbbt 的 Kore Beta 第1名解决方案后,我设法快速提升了排名,主要是通过改变扩张策略。我决定专注于基于规则的方法,看看能走多远。

我的方法有点像开发软件产品。我有一个问题列表,将所有代码置于版本控制之下,并进行迭代,一次解决几个问题和错误。为此,@jmerle 提供的优秀可视化工具至关重要。它为我提供了所需的所有概览,帮助我识别为什么会输掉某一局。

当我加入比赛时,@shuntarotanaka@qihuaz 占据了主导地位。有一段时间我设法爬到了第3名,随后又跌回第6或第7名。那时,1Musketeer @itswin 跃升至第1名,并在比赛中段保持了数周。他的方法非常强大,很难被击败。感谢 @itswin 与我们分享他的智能体。

后来,我的 V92 智能体帮我登上了第1名的位置。这个智能体保持该位置数周。实际上,我自己也很难击败它,尽管我做了许多我认为肯定有益的改动。我花了两周时间和26次更新才得到 V118 智能体,它在1v1对局中表现 consistently 更好。该智能体在面对其他竞争者时也表现出色,我获得的领先优势惊人,比第2名高出约200分。

然而,在提交结束后的第二天,我注视了 basilisk @basilisk1337 的目光。我看到了一场让我措手不及的比赛,对手是他最后一天提交的版本之一。原来他找到了一种方法来瘫痪我的第一个船厂,使我无法扩张。修复本该很简单,但我猜是 basilisk 目光的美丽让我甚至无法让我的智能体移开视线。在那场比赛之后,basilisk 迅速从我的所有智能体那里收集分数,因为它们都有共同的弱点,他很快升至第1名。然后这看起来像是一场运气的游戏,一天他是第1名,另一天我是第1名。排名的收敛性似乎有点不稳定。我有一些想法,但可以在另一篇文章中分享。

最后,在比赛执行的最后一天,我的 V127abandonrescuecollideattack(版本 127/146)成功获得了本次比赛的领先优势。这实际上是我最后一次更改规则本身的版本。随后的所有版本都只是规则参数值的调整。为了获得获胜的智能体,我进行了大量的编码和反复试验,结合了引入新规则和参数调整。

也就是说,我在这次比赛中学到了很多:

  • 我遇到了时间问题,这要求我优化路由搜索并应用更多缓存。
  • 我遇到了内存问题,这要求我深入研究缓存管理。
  • 有一次我获得了 Github CoPilot 的账号,这显著提高了我的编码效率(特别是对于那些人们讨厌编写的代码部分,比如打印语句)。
  • 提高了我的调试和通用 Python 编码技能。

这次比赛非常有趣,感谢我所有的竞争对手。也许我们的智能体会在未来的模拟比赛中再次相遇!

获胜的智能体

我的智能体基于 @egrehbbt 并由 @realneuralnetwork 移植的 Kore Beta 第1名解决方案。虽然人们可能会认出很多内容,但大部分章节都经过了调整。根据 Kaggle 的统计,我添加了 5923 行代码并删除了 777 行。

该智能体概念化了以下行动阶段,继承自 egrehbbts 的解决方案:

  • 船厂防御
  • 舰队攻击:邻近攻击和直接攻击
  • 船厂攻击
  • 扩张
  • 采矿
  • 生成飞船

我很大程度上保留了这个框架,但增加了两个主要概念:

  • 棋盘状态:
    对于棋盘上的每一点,对于每一时间点,智能体都保留一个账本,记录我自己和对手的实际伤害和潜在伤害。
  • 路由:
    给定一个目标,智能体会计算(几乎所有)可能被选择的路由的
同比赛其他方案