返回列表

4th place solution - rule based

501. Kore 2022 | kore-2022

开始: 2022-04-12 结束: 2022-07-26 游戏AI 数据算法赛
第4名解决方案 - 基于规则

第4名解决方案 - 基于规则

作者:qihuaz | 发布时间:2022-07-27

心路历程

首先,我要感谢 Kaggle 团队举办了如此有趣的比赛。鉴于 Kaggle 上大多数有奖金的比赛都集中在监督学习领域,例如计算机视觉、NLP 等,Kore 2022 真的是一个很有趣的比赛,参赛过程就像玩游戏一样,让人很难感到厌倦。

像许多人一样,我最初是从强化学习(RL)开始的,但在发现了 @egrehbbt 的 Beta 版第1名解决方案后,我很快转向了基于规则的智能体。我很快确信,仅靠 RL 是无法赢得这场比赛的。即使有人通过 RL 登顶,它可能也需要结合基于规则的启发式方法建议的行动。

在这一点上,我的智能体是基于 @egrehbbt 的 Kore Beta 第1名解决方案,这并不令人惊讶,所以非常感谢 @egrehbbt。它为我的智能体奠定了非常坚实的基础。尽管我更改/添加了很多逻辑并重写了大部分函数,但那个框架至关重要,我只是站在了巨人的肩膀上。

还要特别感谢 @jmerle 提供的出色可视化工具。我大概用了一千次。它让调试工作变得轻松了许多。

智能体介绍

策略层面

在深入细节之前,我想分享一些战略层面的思考:

  • 防御比进攻更有效,因此被赋予了更高的优先级。
  • 收集你无法足够快地消耗掉的 Kore 是徒劳的。
  • 反应性行动(而不是主动性行动)可以给你带来竞争优势。

任务列表

我的智能体尝试(几乎)按顺序完成以下任务:

  • defend_shipyards(保卫船厂)
  • capture_shipyards(占领船厂)
  • expand(扩张)
  • defend_fleets(保卫舰队)
  • suicide_attack(自杀式攻击)
  • roundtrip_attack(往返攻击)
  • greedy_spawn(贪婪生产)
  • mine(采矿)
  • spawn(生产)

保卫船厂与占领船厂

这里没有什么花哨的东西。当船厂受到攻击时,我会评估附近的船厂,看看来自附近船厂的增援是否足以保卫受攻击的船厂。如果是,就动员它们进行防御。

当我想攻击/占领敌方船厂时,我假设其附近的所有船厂都会尽最大能力协助防御,只有在那种情况下我能获胜,我才会攻击。我也会从多个船厂派出舰队来占领单个船厂。我知道这容易受到相邻攻击,但我没时间像 @harmbuisman 在他的 bot 中那样修复这个问题。

有一件事我一直没完全搞清楚,那就是我自己未来的生产计划。当 Kore 有限且船厂争夺资源进行生产时,我可能会误判一个船厂能生产多少飞船,从而搞砸我自己的防御。

扩张

基本上需要决定:1) 何时扩张 和 2) 向哪里扩张。

何时扩张:当 Kore 收集速度快于消耗速度时,应该扩张。

何时不扩张:如果飞船/船厂比率明显小于对手的比率。

向哪里扩张:这是基于潜在利润(附近的 Kore)和风险(附近的船厂)的平衡选择。

  • 只考虑两个最近船厂是友方船厂的格子(如果只有一个船厂,则考虑一个)。

然后根据附近 Kore 的总和对候选位置进行评分。

  • “附近”定义在最大半径内,该半径由船厂总数决定(船厂越多,半径越小)。
  • 如果附近已经有一个友方船厂,附近的 Kore 会被打折计算。

保卫舰队

如果舰队受到攻击,检查以下是否可能:

  • 派出
同比赛其他方案