基于规则系统的人工智能在游戏中的应用

首先介绍一下RBSRule Based System)。从字面上很容易看出,这是指基于规则的系统,和神经元网络不同,这是人工智能的另一个分支。该系统用来解决问题的方法是基于如下形式的一个过程:

其中当前状态作为输入,兰色区域为人工智能处理的过程,输出为事件,同时事件本身又会影响着状态的变化。这篇文章讲着重讲解关于匹配和结果过滤的算法理论和具体的C/C++实现。 

要做匹配,首先就应该确定匹配的格式,那么该如何确定呢,我们下来看一下下面这条逻辑语句:

如果 A 并且 B,或者 C D,那么这样一条语句在计算机里是如何体现呢。是:

if (A and B) or C then D,看到这样的结构,是否让我们想起了来描述算术表达式的Expression Tree呢。恩,那么我们来试着用树型结构来保存这样的逻辑:

其中橘黄色的表示匹配的元素,紫红色的表示任意两个元素之间的逻辑关系,最后绿色的表示这条逻辑的结果。似乎看起来没什么问题,而且是很规则的二叉树,当逻辑越来越多的时候,也就是数棵相互之间没有任何关系的森林了。那么实际上呢,实际上很多逻辑的元素子并没有改变,也就是说,同样是ABC三条关系,只是其中的逻辑关系发生变化了,或者有些情况连逻辑关系也没变,只是结果D不同,那么对于这样的情况,我们用什么样的方法将这个森林连成一片呢? 

这里将介绍到Rete算法,90%的大型商业RBS系统都是使用的基于Rete算法的模型。那么我们来看看Rete算法究竟是如何定义的。 

Rete算法的初衷是在第一次对森林进行搜索之后,将搜索到的结果组织成一棵树,之后每次搜索森林之前先搜索这棵树,看能否找到感兴趣的资料,其宗旨是起到一个缓存的作用。但是呢,实际上我们可以在我们游戏开始的时候,就将整个森林编译成一棵树放在内存中,之后的所有匹配都可以从编译好的树中去搜索。 

下面来通过一张图来讲一下Rete算法的原理:

左边的图是之前提到过的一条逻辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值