萌宠大作战ios:实时战略作战模拟AI算法(strategy wargame)

关于萌宠大作战ios的问题,在strategy wargame中经常遇到, 我正在设计一个实时策略战争游戏,其中 AI 将负责在大型六边形地图上控制大量单位(可能是 1000 +)。

我正在设计一个实时策略战争游戏,其中 AI 将负责在大型六边形地图上控制大量单位(可能是 1000 +)。

一个单位有许多行动点,可以用于移动、攻击敌方单位或各种特殊行动 (例如建造新单位)。例如,一辆有 5 个行动点的坦克可能在移动上花费 3 个,然后在向射程内的敌人开火时花费 2 个。不同的单位对不同的行动有不同的成本等。

一些额外的注意事项:

AI 的输出是对任何给定单元的“命令”

Action points are allocated at the beginning of a time period,but may be spent at any point within the time period (this is to allow for realtime multiplayer games).Hence "do nothing and save action points for later" is a potentially valid tactic (e e e e cannot move for

游戏正在实时更新,但 AI 可以随时获得游戏状态的一致快照(由于游戏状态是 Clojure 的持久数据结构之一)

我不期待“最佳”行为,只是一些不明显愚蠢的东西,并提供合理的乐趣 / 挑战来对抗

在特定的算法 / 方法方面,您可以推荐什么,以便在效率和合理的智能行为之间取得适当的平衡?

11

如果你阅读Russell and Norvig,你会发现大量的算法用于各种目的,更新到今天的技术水平。也就是说,我很惊讶贝叶斯算法可以成功地处理多少不同的问题类。

然而,在你的情况下,我认为这将是一个坏主意,每个单元有自己的 Petri 网或推理引擎...只有这么多的 CPU 和内存和时间可用。

虽然在某些方面可能是一个疯子,但Stephen Wolfram已经表明,可以在very simple rules的基础上编程非常复杂的行为。他勇敢地从Game of Life推断出量子物理学和整个宇宙。

同样,许多关于小型机器人的研究都集中在emergent behaviorswarm intelligence上。虽然经典的military strategy和实践在很大程度上是基于层次结构的,但我认为,一支完全无私,无所畏惧的战斗机(可以在您的计算机中发现)的如果作为自组织集群运行,可能会非常有效。

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

EDIT

还有一些事情在我的脑海中浮现,但在我写作时又消失了:我认为,如果将这种方法与genetic或进化编程相结合,您可以从这种方法中获得显着效果;即,让您的虚拟玩具士兵在您睡觉时互相发动战争,让他们对其策略进行编码,并为这些策略混合,匹配和更改其代码;让裁判程序选择更成功的战士。

我读过一些关于这些技术取得的惊人成功,单位以我们从未想过的方式运作。我听说过人工智能在这些原则下工作,为了不挫败人类对手,必须故意愚弄。

8

首先,您应该致力于使您的游戏转向基于 AI 的某个级别(即,即使 AI 可能不完全基于转向,您也可以以某种方式对其转向状态进行建模,在 RTS 中,您可以将离散的时间间隔分解为转弯。)其次,您应该确定 AI 应该使用多少信息。也就是说,如果允许 AI 作弊并知道其对手的一举一动(从而使其更强大),或者它应该知道更少或更多的功能。

问题是,成本函数将受到您定义状态的确切内容的极大影响。您在状态中编码的信息越多,您的 AI 就会越平衡,但执行起来就越困难,因为它必须对您包含的每个其他状态变量进行指数搜索(在详尽搜索中)。

如果您提供状态和成本函数的定义,您的问题将转换为 AI 中的一般问题,可以使用您选择的任何算法来解决。

以下是我认为会很好地工作的摘要:

如果您投入足够的精力,进化算法可能会很好地工作,但是它们会增加一层复杂性,从而为其他可能出错的错误创造空间。他们还需要对适应度函数等进行大量的调整。我没有太多经验,但是如果它们像神经网络一样(我相信它们是,因为它们都是受生物模型启发的启发式方法),您会很快发现它们是易变的,并且远非我所描述的任何一致。

使用定义的成本函数和状态,从技术上讲,您可以应用梯度体面(假设状态函数是可微分的,并且状态变量的域是连续的),但是这可能会产生较差的结果,因为梯度下降的最大弱点是陷入局部极小值。举一个例子,这种方法很容易像攻击敌人一样,因为有一个非零的机会来消灭他们,但是贪婪的游戏并不是理想的。

此选项将是我最推荐的选项:模拟退火。模拟退火将(IMHO)产生 1 的所有好处。没有增加的复杂性,同时比 2 更健壮。本质上,SA 只是在状态之间随机游走。因此,除了成本和状态之外,您还必须定义一种在状态之间随机转换的方法。SA 也不容易陷入局部最小值,同时在概念上产生非常好的结果。唯一需要的调整是 SA 如何快速冷却。

3b.(编辑添加时间晚得多)SA 和我上面列出的技术是通用的 AI 技术,并不是真正专门针对游戏的 AI。通常,算法越专业,其性能越好。请参阅没有免费午餐定理2。3 的另一个扩展是称为并行回火,它通过帮助 SA 避免局部最优而大大提高了 SA 的性能。

不管你最终选择什么方法,将你的问题分解成状态和成本函数是非常重要的,正如我之前所说的。根据经验,我会从 20-50 个状态变量开始,因为你的状态搜索空间是这些变量数量的指数。

8

这个问题的范围是巨大的。你基本上是在问如何写一个战略游戏。

这方面的书籍和在线文章很多。我强烈推荐游戏编程智慧系列和AI 游戏编程智慧系列。特别是,AI 游戏编程智慧第一卷的第 6 节涵盖了一般架构,第 7 节涵盖了决策架构,第 8 节涵盖了特定流派的架构(RTS 流派为 8.2)。

6

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

我过去处理过这个问题,发现简单行为-表现-复杂 / 紧急行为方法对于人类设计来说有点太笨拙了,除非在遗传 / 进化上接近。

我最终使用了抽象的 AI 层,类似于在现实生活中的工作方式。单位将与同一时间的附近单位分组为小队,并与附近的小队分组以创建各种小型营。这里可以使用更多的层(某个地区的营等),但最终在顶部是高级战略 AI。

每个层只能向其正下方的层发出命令,其下方的层将尝试使用手头的资源(即该层下方的层)执行命令。

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

最高级别的主 AI 负责董事会的战略决策,例如“我们需要更多的___单位”或“我们应该朝着这个位置前进”。

的类比在这里起作用;指挥官和中尉以及指挥系统。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(287)
C dms:在 Cocoa/Objective-C/C中编写DLNA服务器 (DMS)
上一篇
笔记本电脑发射wifi:使用WiFi显示的笔记本电脑上的Android屏幕
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(6条)