代码之家  ›  专栏  ›  技术社区  ›  mikera

实时战略作战模拟人工智能算法

  •  23
  • mikera  · 技术社区  · 15 年前

    一个单位有许多行动点,这些行动点可以用于移动、攻击敌人单位或各种特殊行动(例如建立新单位)。例如,一辆有5个行动点的坦克可以花费3个移动点,然后2个射击范围内的敌人。不同的单位对不同的行为有不同的成本等。

    一些附加说明:

    • AI的输出是对任何给定单元的“命令”
    • 行动点是在一个时间段的开始分配的,但可以在该时间段内的任何时间点花费(这是为了允许实时多人游戏)。因此,“什么也不做,留着行动点待会儿用”是一种潜在的有效战术(例如,炮塔不能移动,等待敌人进入射程)
    • 游戏正在实时更新,但是AI可以随时获得游戏状态的一致快照(由于游戏状态是Clojure的持久数据结构之一)
    • 我并不期待“最佳”行为,只是一些不明显愚蠢的行为,并提供合理的乐趣/挑战

    你能推荐什么具体的算法/方法来在效率和合理的智能行为之间取得适当的平衡?

    4 回复  |  直到 15 年前
        1
  •  8
  •   ldog    8 年前

    问题是,成本函数会受到你定义的状态的很大影响。你在状态中编码的信息越多,你的人工智能就越平衡,但它执行起来就越困难,因为它必须指数级地搜索你包含的每一个额外的状态变量(在穷尽搜索中)

    如果你提供了一个状态和代价函数的定义,你的问题就会转化成一个AI中的一般问题,可以用你选择的任何算法来解决。

    1. 如果你投入足够的精力,进化算法可能会很好地工作,但它们会增加一层复杂性,在其他可能出错的事情中为bug创造空间。它们还需要对适应度函数等进行大量的调整。我没有太多的工作经验,但如果它们像神经网络一样(我相信它们是这样的,因为它们都是受生物模型启发的启发式方法),你会很快发现它们变化无常,而且远远不一致。最重要的是,我怀疑他们是否比我在3中描述的选项有任何好处。

    2. 在定义了成本函数和状态的情况下,技术上可以应用梯度下降(假设状态函数是可微的,状态变量的域是连续的),但是这可能会产生较差的结果,因为梯度下降的最大弱点是陷入局部极小。举一个例子,这种方法很容易像攻击敌人总是尽快,因为有一个非零的机会歼灭他们。显然,这可能不是一个游戏的理想行为,然而,梯度下降是一个贪婪的方法,并不知道更好。

    3. 这个选项是我最推荐的:模拟退火。模拟退火(IMHO)具有1的所有优点。没有额外的复杂性,同时比2更健壮。本质上,SA只是在各州之间的随机游走。因此,除了成本和状态之外,您还必须定义一种在状态之间随机转换的方法。SA也不容易陷入局部极小值,同时产生非常好的结果。SA唯一需要的调整是冷却时间表——它决定了SA收敛的速度。我发现SA的最大优点是它在概念上很简单,并且在经验上比我尝试过的大多数其他方法产生更好的结果。有关SA的信息可以找到 here

    第三条( )SA和我上面列出的技术是一般的人工智能技术,并不是真正专门用于游戏的人工智能。一般来说,算法越专业,它就越有机会表现得更好。没有免费的午餐 2 . 3的另一个扩展是所谓的并行回火,它通过帮助SA避免局部最优来显著提高SA的性能。关于平行回火的一些原著相当陈旧 3 4 .

    不管你最终选择什么方法,像我前面说的那样,把问题分解成状态和代价函数都是非常重要的。根据经验,我会从20-50个状态变量开始,因为状态搜索空间是这些变量数量的指数。

        2
  •  11
  •   Carl Smotricz    15 年前

    如果你阅读 Russell and Norvig ,你会发现各种各样的算法,更新到今天的最新水平。这就是说,我很惊讶有多少不同的问题类可以成功地接近贝叶斯算法。

    虽然在某些方面可能是个疯子, Stephen Wolfram 已经证明了在 very simple rules . 他勇敢地从 Game of Life 量子物理学和整个宇宙。

    同样,许多关于小型机器人的研究都集中在 emergent behavior swarm intelligence . 虽然经典 military strategy

    这种方法可能比Clojure的STM更适合Erlang或Scala的基于actor的并发模型:我认为自组织和actor可以非常好地结合在一起。尽管如此,我仍然可以设想在每个回合中运行一个单位列表,让每个单位评估一小部分非常简单的规则,以确定其下一步行动。我很想知道你是否尝试过这种方法,以及它是如何进行的!

    编辑

    genetic 或进化规划;i、 e.让你的虚拟玩具士兵在你睡觉的时候互相发动战争,让他们编码他们的策略,并混合、匹配和变异他们的策略代码;让裁判程序选出更成功的勇士。

    我读过一些关于这些技术取得的惊人成功的文章,这些设备的运行方式是我们从未想到过的。我听说,在这些原则上工作的人工智能必须被有意地简化,以避免挫败人类的对手。

        3
  •  8
  •   Marcelo Cantos    15 年前

    有很多书和网上文章都是关于这个的。我强烈推荐 AI游戏编程智慧 系列。特别是第一卷第六节

        4
  •  6
  •   Justin L.    15 年前

    这是一个巨大的问题,其他的答案都指出了值得研究的惊人资源。

    我在过去处理过这个问题,发现简单的行为表现复杂/紧急的行为方法对于人类设计来说有点太难了,除非从基因/进化的角度来处理。

    我最终使用了人工智能的抽象层,类似于现实生活中军队的工作方式。部队将与附近的部队同时分组成小队,小队与附近的小队一起组成一个小营。在这里可以使用更多的层次(一个地区的集团营等),但最终在最高层是高级战略人工智能。

    向单个单位发出的命令的一个例子是“到这里来”和“向这个目标射击”。向更高级别发出的更高级别命令将是“保护此位置”,该级别将处理该位置并向较低级别发出适当的命令。

    最高级别的人工智能大师负责董事会的战略决策,比如“我们需要更多的单位”,或者“我们应该朝着这个位置前进”。

    军队的类比在这里起作用;指挥官、中尉和指挥系统。