我正在设计一款实时策略战争游戏,其中 AI 将负责控制大型六边形地图上的大量单位(可能超过 1000 个)。
一个单位有许多行动点,可以用于移动、攻击敌方单位或各种特殊行动(例如建造新单位)。例如,一辆拥有 5 个行动点的坦克可以花费 3 个行动点用于移动,然后花费 2 个行动点向射程内的敌人开火。不同的单位对于不同的行动等有不同的成本。
一些附加说明:
- AI 的输出是对任何给定单元的“命令”
- 行动点在时间段开始时分配,但可以在该时间段内的任何点花费(这是为了允许实时多人游戏)。因此,“不采取任何行动并为以后保存行动点”是一种潜在有效的策略(例如,炮塔无法移动以等待敌人进入射程)
- 游戏是实时更新的,但 AI 可以随时获得游戏状态的一致快照(这要归功于游戏状态是 Clojure 的持久数据结构之一)
- 我并不期待“最佳”行为,只是一些不明显愚蠢的行为,并提供合理的乐趣/挑战来对抗
您可以推荐哪些特定算法/方法来实现效率和合理智能行为之间的适当平衡?
如果你读过拉塞尔和诺维格 http://aima.cs.berkeley.edu/,您会发现大量适合各种用途的算法,并且几乎已更新到当今最先进的水平。也就是说,我对贝叶斯算法可以成功解决如此之多的不同问题类别感到惊讶。
然而,就你的情况而言,我认为每个单元都有自己的 Petri 网或推理引擎是一个坏主意……只有这么多的 CPU、内存和时间可用。因此,采用不同的方法:
虽然在某些方面可能是个疯子,史蒂芬·沃尔弗拉姆 http://www.wolframscience.com/已经表明可以在以下基础上对非常复杂的行为进行编程非常简单的规则 http://en.wikipedia.org/wiki/Cellular_automaton。他勇敢地从生命游戏 http://en.wikipedia.org/wiki/Conway's_Game_of_Life量子物理学和整个宇宙。
同样,许多关于小型机器人的研究都集中在突发行为 http://en.wikipedia.org/wiki/Emergence or 群体智能 http://en.wikipedia.org/wiki/Swarm_intelligence。经典的同时军事战略 http://en.wikipedia.org/wiki/Military_strategy和实践都强烈基于等级制度,我认为一支由完全无私、无畏的战士组成的军队(可以在你的计算机中行进)如果作为自组织集群运作,可能会非常有效。
与 Clojure 的 STM 相比,这种方法可能更适合 Erlang 或 Scala 的基于 actor 的并发模型:我认为自组织和 actor 会非常好地结合在一起。尽管如此,我仍然可以想象在每个回合中运行一个单元列表,并让每个单元评估一小部分非常简单的规则来确定其下一步行动。我很想知道您是否尝试过这种方法以及效果如何!
EDIT
还有一些事情在我的脑海中浮现,但在我写作时再次滑落:我认为,如果你将这种方法与genetic http://en.wikipedia.org/wiki/Genetic_algorithm或进化规划;即让你的虚拟玩具士兵在你睡觉时互相发动战争,让他们编码他们的策略并混合、匹配和改变这些策略的代码;并让裁判程序选出更成功的勇士。
我读到过一些利用这些技术取得的惊人成功,这些技术的运作方式是我们从未想到的。我听说按照这些原则工作的人工智能必须故意被简化,以免挫败人类对手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)