实时战略战争游戏人工智能算法

2024-06-19

我正在设计一款实时策略战争游戏,其中 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(使用前将#替换为@)

实时战略战争游戏人工智能算法 的相关文章

  • 关于复杂性(如果使用基于比较的排序算法)

    众所周知 任何基于比较模型的排序算法都有nlogn的下界 即Omega nlogn 这可以用数学证明 但众所周知 荷兰国旗问题可以在 O n 时间内对 3 个不同的元素 重复使用 进行排序 它也是基于比较模型 但可以在 O n 时间内进行排
  • 如何找到最大。和分钟。在数组中使用最小比较?

    这是一道面试题 给定一个整数数组 找出其中的最大值 和分钟 使用最小比较 显然 我可以循环数组两次并使用 2n在最坏的情况下进行比较 但我想做得更好 1 Pick 2 elements a b compare them say a gt b
  • 图算法:邻接图的可达性

    我有一个依赖图 我将其表示为Map
  • 先增后减的最长子序列

    我正在尝试解决以下问题 元素值先减小后增大的序列称为V序列 在有效的 V 序列中 递减臂中应至少有一个元素 递增臂中至少应有一个元素 例如 5 3 1 9 17 23 是一个有效的 V 序列 在递减臂中具有两个元素 即 5 和 3 在递增臂
  • 凸包中最大的三角形

    这个问题已经得到解答 但我面临的主要问题是理解答案之一 From https stackoverflow com a 1621913 2673063 https stackoverflow com a 1621913 2673063 下面的
  • 用于将分层平面数据(带 ParentID)转换为带缩进级别的排序平面列表的算法

    我有以下结构 MyClass guid ID guid ParentID string Name 我想创建一个数组 其中包含按层次结构中应显示的顺序排列的元素 例如 根据它们的 左 值 以及将 guid 映射到缩进级别的散列 例如 ID N
  • 在地图元素上使用 for_each

    我有一个映射 我想在其中对每个数据类型对象成员函数执行调用 我还知道如何在任何序列上执行此操作 但是是否可以在关联容器上执行此操作 我能找到的最接近的答案是 Boost Bind 访问 std for each 中的 std map 元素
  • 滑动窗口最小算法

    这是一个家庭作业问题 设 A 是一个整数数组和整数 K 窗口大小 当窗口滑过 A 时 生成在窗口中看到的最小值的数组 M 我发现一篇文章 http home tiac net cri 2001 slidingmin html有这个问题的解决
  • 单调性和启发式的可接受性之间有什么区别?

    我正在阅读我的人工智能教科书 我很好奇启发式的单调性和可接受性之间有什么区别 我知道它们并不相互排斥 据我所知 可接受的启发式方法仅仅意味着您可以确保获得解决方案的最短路径 如果存在 我正在努力解决的是单调属性的概念 有人可以用我可以理解的
  • 什么是日历队列?

    我正在致力于构建一个离散事件模拟器 维基百科提到有几种通用优先级队列非常适合在 DES 中使用 具体来说 它提到日历队列是一个很好的结构 我找到了一份 pdf 1988 年的 其中提到了日历队列 但在大多数情况下我找不到关于它们的任何其他内
  • 将平面表解析为树的最有效/优雅的方法是什么?

    假设您有一个存储有序树层次结构的平面表 Id Name ParentId Order 1 Node 1 0 10 2 Node 1 1 1 10 3 Node 2 0 20 4 Node 1 1 1 2 10 5 Node 2 1 3 10
  • 拓扑排序卡恩算法 BFS 或 DFS

    拓扑排序的方法是BFS还是DFS 哪个正确 我认为BFS是对的 但有些网站说DFS 有些网站说BFS 我很困惑 卡恩算法与 BFS 或 DFS 相同吗 或者BFS 或DFS 只是卡恩算法的工具 Kahn算法和DFS在实践中都用于拓扑排序 选
  • 训练后将保存的 NEAT-Python Genome 应用到测试环境

    我使用了一些 NEAT 算法为一些简单的游戏 例如 flappybird 编写了自己的 AI 代码 一切正常 我知道发生了什么 问题是我不知道如何处理结果 人工智能学到了一些东西 我想保存这个进度 TechwithTim YouTuber
  • 无限循环:确定并打破无限循环

    你如何判断一个循环是无限循环并且会跳出它 有没有人有算法或者可以帮助我解决这个问题 Thanks 没有通用的算法可以确定程序是否处于无限循环中图灵完备 http en wikipedia org wiki Turing completene
  • 统一成本搜索和 Dijkstra 算法有什么区别?

    我想知道有什么区别统一成本搜索 and 迪杰斯特拉算法 它们似乎是相同的算法 Dijkstra 算法可能更为人所知 可以视为 作为统一成本搜索的变体 其中没有目标状态并且 处理继续 直到所有节点都已从 优先级队列 即直到到达所有节点 不仅仅
  • 计算序列 1,3,8,22,60,164,448,1224... 的第 n 项? [复制]

    这个问题在这里已经有答案了 可能的重复 我想以 Order 1 或 nlogn 的顺序生成序列 1 3 8 22 60 164 的第 n 项 https stackoverflow com questions 11301992 i want
  • 递归分层父子

    我有一个来自数据库的项目集合 该数据库具有parentid值或空 这是我的班级设计 public class Item public int id get set public string Name get set public int
  • 如何编写一个简单的版本控制系统?

    我想做一个简单的版本控制系统 但我不知道如何构建我的数据和代码 这是一个简短的例子 用户登录 User has two options when uploading a file 提交新文件 提交文件的新版本 用户应该能够看到树 版本不同
  • 快速计算幂(例如 2^11)[重复]

    这个问题在这里已经有答案了 可能的重复 实现基于整数的幂函数 pow int int 的最有效方法 https stackoverflow com questions 101439 the most efficient way to imp
  • 准备与大数据相关的设计和架构问题的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐