501. Kore 2022 | kore-2022
这是 Team Breakfast 的第10名解决方案摘要,以及我们达成目标的历程。我们的智能体完全基于规则。
@vladikrajnak 和我开始这场竞赛是为了学习强化学习(RL)。由于动作和观察空间巨大,我们的最初目标是利用基于RL的宏观策略进行长期规划,同时使用启发式规则进行微操管理。我们从 @egrehbbt 的解决方案入手,并尝试在此基础上进行改进。我们的基于规则的智能体开始表现得相当不错,甚至一度进入前5名,所以我们忘记了RL,转而专注于纯基于规则的智能体。
顺便提一下,我们也考虑过使用树搜索,但Kaggle模拟器太慢了,而且我们既没有兴趣也没有技能去重写一个更快的模拟器。
像许多其他人一样,我们特别感谢:
我们的顶级智能体是在比赛结束前2周提交的。我们在最后2周实施了许多更改:延迟首次扩张并配合激进的早期攻击、更安全的路线(以防止舰队被攻击)、更安全的发射(以防止在发射大量船只后船厂被攻击)、设置矿工的目的地以便将他们调度到需要的地方(要么是有更多Kore开采潜力的船厂,要么是薄弱的船厂)。然而,这些都没有产生显著效果:令我们惊讶的是,我们所有最新的智能体最终得分都相似(1550-1600),尽管它们的行为截然不同。
与顶级玩家的智能体相比,我们认为我们缺乏协同攻击,以及在即将被占领时放弃船厂的机制。据推测,这是进入排行榜更高“层级”的关键特征。实际上这些都在我们的待办事项列表上,但我们没有时间仔细考虑,在有限的时间里选择了优先处理其他功能。
我们的首要重点是让 @egrehbbt 的所有估算(采矿路线的Kore等效值、成功攻击船厂所需的船只数量等)更加准确。
我们使用 board.next() 来预测未来的棋盘状态(在每次发射后更新,前提是我们在当前回合有足够的计算时间),并且我们实现了一个准确(尽管非常耗时)的路线评估算法。这大大减慢了代码速度,但改善了我们的采矿效率,我们认为这是至关重要的(尤其是为了能在游戏早期占据主导地位)。
另一方面,我们对成功占领船厂所需船只数量的估算,或者我们在不危及船厂的情况下可以派出采矿的最大船只数量,并没有像我们希望的那样奏效。可能是因为它们太保守了(基于最坏情况)(正如 qihuaz 也指出的那样)。
我们保留了 @egrehbbt 智能体的顺序结构,但稍微重新组织了一下,并重写了大部分函数,使其更高效、更准确,和/或允许某种程度的预判。
与原始方案类似:如果受到攻击则生成船只,如果需要则从邻近船厂发射支援。对于发射支援,我们尝试了各种策略:
虽然目光短浅,但第二种方法表现最好。可能是因为它允许移动船只并在途中作为副作用进行采矿。
需要改进的地方:如果我们无法防守,应该逃跑,而不是生成。
除了改进所需船只数量的估算外,我们还增加了预判:如果在少数回合内可能发生攻击,我们会停止采矿并提前生成船只,为未来的攻击发射做准备。
需要改进的地方:协同攻击。
直接攻击的目标是从对手的舰队中窃取Kore,而邻近攻击是通过双倍伤害摧毁船只的自杀式任务。我们总是优先考虑直接攻击而非邻近攻击,并为每种攻击使用相关(不同)的评分。对于邻近攻击,我们还会选择一条沿途