Algorithm 蚂蚁的作战策略

Algorithm 蚂蚁的作战策略,algorithm,language-agnostic,complexity-theory,Algorithm,Language Agnostic,Complexity Theory,这个问题指的是谷歌赞助的比赛,比赛每隔几个月举行一次,参赛者需要提交一个机器人,能够与其他机器人玩家自主玩游戏。刚刚结束的比赛被称为“蚂蚁”,如果你感兴趣,你可以阅读它的所有规格 我的问题具体到蚂蚁的一个方面: 问题 给定一个离散坐标网格[如棋盘],并假设每个玩家都有许多蚂蚁,它们在每个回合可以: 别动 向东/北/西/南移动 …如果一只在射程内的敌方蚂蚁被比其自身敌人少(或相同)的敌人包围,则该蚂蚁将被敌方蚂蚁杀死[相当于:“如果一只在射程内的敌人被比其目标多(或相同)的敌人包围,则该蚂蚁将杀死

这个问题指的是谷歌赞助的比赛,比赛每隔几个月举行一次,参赛者需要提交一个机器人,能够与其他机器人玩家自主玩游戏。刚刚结束的比赛被称为“蚂蚁”,如果你感兴趣,你可以阅读它的所有规格

我的问题具体到蚂蚁的一个方面:

问题 给定一个离散坐标网格[如棋盘],并假设每个玩家都有许多蚂蚁,它们在每个回合可以:

  • 别动
  • 向东/北/西/南移动
  • …如果一只在射程内的敌方蚂蚁被比其自身敌人少(或相同)的敌人包围,则该蚂蚁将被敌方蚂蚁杀死[相当于:“如果一只在射程内的敌人被比其目标多(或相同)的敌人包围,则该蚂蚁将杀死一只敌方蚂蚁”]

    一个直观的例子:

    在这种情况下,黄蚂蚁将向西移动,而无法移动的橙色蚂蚁[蓝色瓷砖正在阻挡]将有两只黄蚂蚁“在范围内”,并将死亡(如果解释仍然不清楚,我邀请您访问,以查看更多示例和解释的场景)

    问题 我的问题实质上是关于复杂性的。我对这个问题进行了广泛的思考,但我仍然无法找到一种可接受的方法来计算合理时间内的最佳动作集。在我看来,要为我的蚂蚁找到最好的移动方式,我应该评估每个可能场景的结果,但由于战场上蚂蚁非常多,这意味着计算时间将呈指数增长(
    5^n
    ,n是所涉及的蚂蚁数量)

    这种方法的另一个局限性是,正在处理的解决方案并不能按计算时间的比例提高其效率,因此任意中断其执行可能会给您留下不可接受的解决方案

    我怀疑通过一些几何方面的考虑,结合线性代数,可能会找到一个好的解决方案(可能会为一群蚂蚁计算一些“重心”),但在这方面,我无法超越“直觉”的水平

    所以,我的问题可以归结为:

    在现代机器上,如何在约50-100 ms的计算时间内找到[接近]最优解(该数字由官方竞赛规则得出)


    如果你对这个问题感兴趣并且需要一些灵感,我强烈建议你观看一些可用的。

    我认为你的问题可以通过扭转这个问题来解决。 你不需要计算每只蚂蚁的最佳招式,你可以在你的棋盘上计算每个离散位置的最佳招式

    • +一个节省的地方
    • +2对于一个导致敌人死亡的地方
    • -1分表示某一死亡位置
    这将以一种线性的方式进行扩展,但在没有提供最佳的个人运动方面会有一些折衷


    也许值得一试:)

    确实很棘手。您可以在中找到一些提示。这是一组使用群协作和“合理计算时间”的算法。例如,Bee算法可用于大致(!)解决旅行商问题。我希望这些算法能够为您提供给定计算时间的最佳解决方案


    当然,这个问题可以用几何学来简化:蚂蚁在邻居中的相对位置比绝对位置更重要。此外,light_303的解决方案是对我提出的搜索模式的补充。

    从OP编辑:

    我选择这个答案是因为比赛的获胜者发表了对他的代码的事后分析,他确实遵循了这个答案作者建议的方法。你可以阅读获奖者的博客


    对于这类问题,通常使用with。(*)[关于minmax和alpa beta修剪的简单解释已经结束,但要了解更多详细信息,还应阅读维基百科页面]

    为了克服您提到的大量可能移动的问题,一个常见的改进是迭代执行minmax算法。首先探索所有节点直到深度1,并找到最佳解决方案。如果您还有时间:探索所有节点,直到深度2,现在选择一个新的更明智的最佳解决方案,等等。。。
    超时:在您探索的最后一个级别提供您能找到的最佳解决方案

    为了进一步改进您的解决方案,您可能希望对您开发的节点重新排序:对于迭代i,对迭代(i-1)中的节点进行排序[根据每个顶点的启发式值],并根据顺序探索每个可能性。其背后的想法是,如果您首先研究“最佳”解决方案,则更有可能修剪更多顶点

    这里的问题仍然是找到一个好的启发式函数,它评估“状态有多好”

    (*)最小-最大算法很简单:你探索游戏树,决定你将为每个状态做什么,你的对象最有可能为每个动作做什么。直到深度
    k
    ,其中k被赋予算法

    alpha-beta修剪是minmax的一个补充,它告诉您“哪些节点不应该再被探索,因为无论如何我都不会选择它们,因为我有一个更好的解决方案”

    我的问题实质上是关于复杂性的。我想到了这个 这个问题涉及面很广,但我仍然无法想出一个可接受的解决方案 在合理时间内计算最佳动作集的方法。

    没错

    这是一场人工智能的竞赛。AI处理的问题太复杂,无法用优化算法解决

    所以你必须尝试“东西”,就像你的i