返回列表

[1 Musketeer] 5th place solution: Rules based

501. Kore 2022 | kore-2022

开始: 2022-04-12 结束: 2022-07-26 游戏AI 数据算法赛
[1 Musketeer] 第5名方案:基于规则

[1 Musketeer] 第5名方案:基于规则

作者:Winston Cheung
发布时间:2022年7月27日

前言

首先,我要感谢 Kaggle 团队举办了这次精彩的比赛。我非常享受看到策略随时间发展的过程,以及在论坛上阅读大家对游戏的看法。我希望我有更多的时间来完善我的 Agent,因为还有很多工作要做,但我很期待 Kaggle 上未来的模拟竞赛!特别感谢以下几位:

  • @egrehbbt 分享了他在测试竞赛中令人惊叹的代码。我以此作为起点,这为我节省了难以想象的时间。
  • @jmerle 提供了超棒的可视化工具 Koreye。
  • @bovard 在 Battlecode Discord 上发布了比赛信息,否则我可能就错过了。
  • @kirderf@jaroslawbogusz 分别提供了本地评估和回放脚本。

我骨子里是个 Battlecoder,也是 Kaggle 的新手,所以我采用了基于规则的方法来参加这次比赛。如果你不知道 Battlecode 是什么,一定要看看 Stone Tao 在这里对 AI 编程挑战赛的调研。简而言之,这是另一个 AI 实时战略游戏,在它运行的(看似短暂的)一个月里,我把它当作全职工作来对待。

概述

在高层逻辑上,我遵循了 aDg4b 测试方案中列出的相同基本决策序列。以下是我的 Bot 概述以及我在整个比赛过程中的思考。在可能的情况下,我会尝试给出我做出某些决定背后的理由,或者谈谈我尝试过但最终没有成功的方法。

防守

看到敌方飞船?派遣援军。这就是防守的 nutshell(简而言之)。在更深层次上,我的 Bot 会检查所有即将到达的友方和敌方舰队,并计算每个时间步的最小累积差值。如果是负数,它就会生成飞船,并在以下情况请求其他船厂的帮助:(1) 其他船厂能在最近的敌方舰队到达之前提供帮助,或者 (2) 我只有几个船厂,而受攻击的那个是我自己建造的。

另一方面,有时你根本无法足够快地发送或生成支援。也许你的对手比你更好地协调了他们的飞船。也许他们在早期游戏中效率更高,挖掘的 Kore 比你多。在我的船厂意识到它无法再防守的情况下,它会转而执行任何其他发射行动,并派遣一支“孤注一掷”的舰队。大多数时候,这只是起到了派遣一支(可能是大型的)舰队来减少该区域周围 Kore 的作用,但它也有一个有趣的副作用。当我刚刚占领了一个敌人的船厂时,如果他们一次性派出所有的飞船去防守,导致另一个船厂孤立无援,我的船厂就会发射舰队去占领它,而不是什么都不做并损失掉飞船。这导致重置两个(或更多!)敌方船厂的控制回合数,从而扼杀他们的生成能力。由于 Kore 既是一个获取资源的游戏,也是一个使用资源的游戏,这通常能直接赢得比赛。

一个失败的经历:我尝试过精确发送所需数量的飞船进行支援,但这往往会适得其反,因为现在受到攻击的船厂将来可能还会受到攻击。在这里,我基本上采取了“现在过度纠正,以后再担心其他问题”的哲学。只要我不陷入上述情况,即一次性派出所有飞船,这种防守通常表现更好。

进攻

我针对攻击船厂的进攻包括三种不同类型的攻击:占领、协同占领和消耗攻击。总的来说,我在进攻方面非常保守,只有在确定会成功时才尝试占领。有些时候这并不完美,因为我无法预测敌人会派出新的挖掘舰队,但在大多数情况下,考虑到敌人的 Kore/货物用于生成以及附近船厂的增援就足够了。

  • 协同占领具有最高优先级。这种攻击包括同步来自多个船厂的攻击舰队,集中攻击单个船厂。通过不同时发射它们,我认为这会让协调防守变得稍微困难一些。
  • 普通占领也是一样的,只是使用来自单个船厂的舰队。如果船厂预测即使考虑到敌人那时会获得的额外增援也能拿下船厂,它会考虑等待攻击。注意,这也使我能够选择 Kore 最多的路线来攻击船厂,因为我几乎可以肯定我会转换船厂并获得 Kore。
  • 消耗攻击是最不常见的,通常用于扩大已经确立的优势。在获得飞船数量优势后,这些攻击包括向敌方船厂派遣 50 艘或更多规模的舰队,其想法是 120 比 60 的飞船差距比 170 比 110 的差距更难让对手挽回。这也可能迫使敌人在面对即将到来的敌方舰队时做出次优决定。他们会用确切数量的飞船做出反应吗?他们不会执行某些行动吗?

我进攻中较小的一部分是直接攻击敌方舰队,以夺取他们挖掘的 Kore 或造成双倍伤害。我唯一值得注意的是加入了一个攻击评分测量,以便优先选择被认为更高效的挖掘路线。有时我会在这里添加一个功能或修复一个错误,但实际上效果更差。

  • 我遇到了一个“差一”错误,有时船厂即使可以也不会攻击舰队,但
同比赛其他方案