使用pyke推理引擎的一些原则

推理引擎解决的基本问题是对一些命题的排列组合方式做试探的问题。它可以对很多事实分层次,分逻辑层面做组合问题。虽然说在pyke系统用的krb里面我们可以利用goal来实现很多非排列组合的问题,例如构建一些运算函数等。但是,随着使用的深入体验,我发现并不适合做。很多该是由程序代码来完成的任务还是交给程序代码来做更合适。我是基于以下理由给出此结论:

python对静态代码块的嵌套有限制

python或者这很多编程语言是对静态代码块的嵌套做过限定的。而每一次bc的使用都会引入一个新的嵌套代码块。如果在一个bc里面调用多个bc很容易就会让pyke生成的python代码超出python静态嵌套限制。要知道python只允许嵌套20个代码块的深度。而每一个bc规则的嵌套,会引入2个以上的静态代码块。一个bc规则中,嵌套8个以上bc规则,就会开始危险起来了。

直接使用python代码可以应用很多的python资源

bc规则的设定是用来回答这样的问题的:在某某集合中,是否能找到满足某某条件的组合? 例如,在一些列路径的选择组合中,能否找到一种组合走出迷宫?在一系列数据库的检索语言中,能否找到合适的组合来检索我们需要的内容?如果我们需要证明的问题是,a和b两个对象是否满足某个条件?那么这个问题就不适合用bc规则来写了。因为在krb文件中直接使用python可以调用大量的python资源,尤其是krb支持bc_extra的模式。我们甚至可以专门写python库,然后再在bc_extra中import这些python库。要知道在bc中,我们甚至都没有直接使用if, else。

结论

推理引擎是个很好的东西,在应用它的时候,我们要发挥它的长处来使用,而不是滥用它。基本使用逻辑是,首先构建推理事实库,然后再构建用于寻找这些事实库中满足某些规则的排列组合的问题。并且我们要用python代码来丰富bc规则的能力,然bc代码块能够对一些非排列组合验证性的问题来做出判断。

发表评论

邮箱地址不会被公开。 必填项已用*标注