我正在开发一个游戏,在概念上类似于风险或垄断(一个棋盘游戏,本质上,虽然我的要求可以外推法)。因此,假设我想要电脑对手,我需要写一个人工智能。
现在,我的问题是我是否需要在程序中直接编程AI (硬编码),或者我编写的程序是否有某种方式从方向和行为规则列表中读取,对AI进行软编码。
我假设,如果我要像前面描述的那样进行软编码,我需要对人工智能可以使用的所有可能的操作进行编程。我也假设我不能告诉一个软人工智能去做任何事情,除非编程(例如,一些依赖于多种因素的决策行动)。与硬编码特定AI相比,软编码的大修(优点/缺点)是什么?
发布于 2015-10-15 12:54:04
一些人工智能技术是非常密集的CPU,这种启发式的宽度优先或深度优先搜索,这有助于自己的许多战略游戏。
这样的搜索将要求您建立API,以便检索当前的“状态”(游戏状态的完整表示),并列出来自该状态(或任何状态)的所有可能的移动/更改,以及每个移动/更改将导致的新状态。
一旦您这样做了,任何算法都可以进行适当的API调用,以查看哪些状态可以移动到哪些状态,哪些状态可以从这些状态移动到什么状态,等等。可以到达的状态将以指数级增长,您试图向前看的动作越多,即使是2次移动对计算机来说也可能是一项可怕的任务。
由于这一困难,启发式分数被用来评估跟随某些分支的可能有用性,因此搜索算法可能会立即从当前状态丢弃90%的第一步可能的移动。
遵循这种模式获取状态、评估状态并查看从状态到后续状态的可能移动/更改的AI,显然可以对AI进行软编码,但是AI为启发式地得分状态所做的事情可能是任何事情,而您的软代码就像一种迷你语言。就个人而言,除非你想要实现一种迷你语言,否则这是一种非常艰苦的工作方式。此外,您的软代码将需要某种解释,这可能会使它比代码慢一倍,或者比代码慢10或100倍……任何指数级的困难技术都意味着性能是非常重要的。如果选择的AI方法不是指数难度或简单难度,那么可以使用软代码,但仍然需要实现一种迷你语言。
当然,您可以实现一个AI作为一个单独的程序,通过网络与您的游戏程序通信。这可能只是本地主机到本地主机,但它当然不需要。这种性能在某种程度上取决于网络延迟和带宽,但它可能是一个重要的问题,也可能不是一个重要的问题。
您还可以将AIs实现为可动态加载的库(例如,您的游戏可能会查看某个文件夹,查看一堆lib文件,并尝试在运行时加载它们(例如,在UNIX中使用dlopen() )。然后,你可以在任何时候投递新的认可机构,而不涉及游戏本身。如果您的主要要求是在性能重要的地方拥有插件,并保持性能,这可能是一条路。
https://stackoverflow.com/questions/18613319
复制相似问题