在游戏中软编码人工智能

3

我正在开发一款游戏,类似于《风险》或《大富翁》(基本上是一种棋盘游戏,尽管我要问的可以推广到其他类型的游戏)。因此,假设我想要电脑对手,我需要编写人工智能。

现在,我的问题是,我是否需要直接在程序中编写人工智能(硬编码),还是存在一种方法,使我编写的程序可以从一系列的指令和行为规则中读取,将AI进行“软编码”。

我认为,如果像之前所描述的那样软编码,我将需要编写AI可能使用的所有可能动作。我还假设,除非经过编程(例如,依赖于多个因素的决策动作),否则不能告诉软编码的AI执行任何操作。相对于硬编码特定的人工智能,软编码的总体优势/劣势是什么?


1
看起来你正在寻找一个通用游戏引擎 - tobias_k
@tobias_k 这不完全是我想要的,虽然相似。我的问题是,我是否可以编写一系列不同的 AI(例如,智能计算机、复仇计算机、扩展计算机、愚蠢计算机等),而无需将它们集成到源代码中,而是将它们放在文件中(例如 .txt 文件)中,如果可能的话,制作这样的文件需要多大的开销。 - Doktoro Reichard
2
对于不同的难度级别,你可以让AI变得有点懒惰,例如,探索minimax搜索树的深度是多少?关于文本文件,我仍然认为GGP是相关的,你可能可以使用现有的GGP引擎,并将游戏规则作为文本文件或类似文件输入。请注意,在Coursera上即将开始一门免费的GGP在线课程! - tobias_k
感谢您的输入(以及Coursera链接)。我需要更深入地研究整个主题。我的具体问题有些局限于我的程序,我试图简化这个问题。 - Doktoro Reichard
1个回答

0

一些人工智能技术需要大量的CPU资源,例如启发式广度优先或深度优先搜索,这种技术适用于许多策略游戏。

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

一旦完成了这个步骤,任何算法都可以通过适当的API调用来查看可以移动到哪些状态,以及可以从这些状态移动到哪些状态等。可以到达的状态将呈指数级增长,尝试向前查看更多的移动将成为计算机的巨大任务,即使只有2个移动也是如此。

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

一个遵循获取状态、评估状态和查看从状态到后续状态的可能移动/更改的AI,你显然可以软编码一个AI,但是AI为了启发式地评分状态所做的事情可能是任何事情,你的软编码将像一个小语言。个人而言,除非你想实现一个小语言,否则这是一种相当困难的工作方式。此外,您的软编码将需要某种解释,这可能使其比代码慢两倍,或者慢10倍或100倍...并且任何指数级别的困难技术都意味着性能非常重要。如果选择的AI方法不是指数级别的困难,或者是普通的困难,那么可以使用软编码,但仍然需要实现一个小语言。

当然,您可以将AI作为单独的程序实现,该程序通过网络与游戏程序通信。这可能只是本地主机到本地主机,但当然不必如此。这种性能在某种程度上取决于网络延迟和带宽,但它可能是一个重要问题,也可能不是。

你也可以将AI实现为动态可加载的库(即,您的游戏可能会查看某个文件夹,看到一堆lib文件,并尝试在运行时加载它们(例如,在UNIX上使用dlopen())。然后,您可以随时添加新的AI而不必触及游戏本身。如果您的主要要求是具有插件AI并在性能问题处保持性能,则这可能是可行的方法。

通常,您为此目的实现的人工智能类型是基于启发式的广度优先或深度优先搜索。然而,在很多其他类型的游戏中,这只适用于非常有限的设置,完全是错误的。那么,机会因素呢?隐藏元素呢? - ziggystar
我同意,你的评论很有用且表达得很好,尽管“非常有限”可能有点过了。当然,两个游戏中机会的主要来源都是骰子,但在两种情况下,不同程度上的搜索策略仍然可以有效。对于风险来说,骰子的投掷是影响攻击领土结果概率的偏差,但这只是统计学上的问题,军队规模也是一个因素,因此启发式算法可以根据概率计算得分,实际上,骰子的投掷在决策过程中基本上是无关紧要的。 - Michael
由于OP并没有询问AI技术,而是关于AI的模块化实现,无论是否集成,我的回答可能过分强调了搜索技术是正确的方法。它介绍了一个重度CPU使用的重要场景,这可能与选择实现方式相关,但不一定如此,因此我认为这很重要。不过,我会稍微编辑一下回答,以考虑您的评论。 - Michael
公平地说,这个问题根本没有考虑CPU性能,主要是因为这不是问题。例如,当前的国际象棋引擎可以在几秒钟内计算出最佳移动步骤,而我正在开发的游戏选择并不像国际象棋那么多。当时,我关注的是将AI文件与程序分开以及程序扩展方面的开发优势。由于某些生活情况,游戏的开发自去年以来一直处于冻结状态。 - Doktoro Reichard
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接