在游戏中软编码AI

时间:2013-09-04 12:02:46

标签: artificial-intelligence

我正在开发一款游戏,其概念类似于风险或垄断(一种棋盘游戏,基本上,虽然我所要求的可以推断)。因此,假设我想要电脑对手,我需要写一个人工智能。

现在,我的问题是我是否需要直接在程序中编程AI(硬编码),或者是否存在某种方式让我编写的程序从方向和行为规则列表中读取, softcoding AI。

我假设如果我按照之前的描述进行软编码,我需要编写AI可以使用的所有可能操作。我还假设我无法告诉软件模拟AI做任何事情,除非编程(例如,某些决策行动取决于多个因素)。与硬编码特定AI相比,软编码的改革(优点/缺点)会是什么?

1 个答案:

答案 0 :(得分:0)

一些人工智能技术非常耗费CPU,例如基于启发式的广度优先或深度优先搜索,适用于许多策略游戏。

这样的搜索需要您建立API,以便当前的状态' (可以检索游戏状态的完整表示),以及该状态(或任何状态)的所有可能移动/更改的列表,以及每个移动/更改将导致的新状态。

完成此操作后,任何算法都可以进行相应的API调用,以查看可以移动到哪些状态,以及可以从这些状态移动到哪些状态等。可以访问的状态将会增长以指数方式,你试图向前看的动作越多,即使是2次动作也可能是计算机的一项可怕任务。

由于这种困难,启发式分数用于评估跟随某些分支的可能有用性,因此搜索算法可能会立即丢弃当前状态中90%的第一次可能移动。

遵循这种获取状态,评估它们并查看从状态到后续状态的可能移动/变化的模式的AI,你显然可以将代码软编码为AI,但AI为了启发式获得状态而做的是什么,你的软代码就像一个迷你语言。就个人而言,除非你想要实现一种迷你语言,否则这是一种非常艰苦的工作方式。此外,您的软代码将需要某种解释,这可能使其速度是代码的两倍,或慢10或100倍......而任何指数级难度的技术都意味着性能非常重要。如果选择的AI方法不是指数级的难度,或者说难度很大,可以使用软代码,但是你仍然需要实现一种迷你语言。

当然,您可以将AI实施为一个单独的程序,通过网络与您的游戏程序进行通信。这可能只是localhost的localhost,但当然不一定是。这在一定程度上取决于网络延迟和带宽,但它可能是也可能不是一个重大问题。

您还可以将AI实现为可动态加载的库(即您的游戏可能会查看某个文件夹,查看一堆lib文件并尝试在运行时加载它们(例如,使用dlopen()用于UNIX)。然后您可以删除新的AI在任何时候都没有触及游戏本身。如果您的主要要求是拥有插件AI并在性能重要的情况下保持性能,那么这可能是最佳选择。