产生式规则 专家系统 BCB开发的 (急)
各位高收,我现在做一个产生式规则的专家系统,规则如下
if A1 and A2 then C1 R1
if A3 and A4 and A5 then C2 R2
if A2 and A7 then C3 R3
if A8 and A9 or A3 then C4 R4
...
...
我用SQLSERVER做了个知识库,建立了四个表,一个表是存放前提条件的,表示如下
ID FACT
1 A1
2 A2
...
...
一个是前规则表,表示如下
ID FACT 前提数目 规则编号
1 A1 2 R1
2 A2 2 R1
3 A3 3 R2
4 A4 3 R2
5 A5 3 R2
......
......
一个后规则表,表示如下:
ID 结论 结论数目 规则编号
1 C1 1 R1
2 C2 1 R2
3 C3 2 R3
4 C4 2 R3
5 C4 1 R4
一个结论表
ID CONCLUSION
1 C1
2 C2
3 C3
...
...
不知道这样设计知识库 对不对,我的界面只有条件表,需要对选择的一些条件跟数据库的规则进行匹配,如果在界面条件选项中出现了 A1 A2 A3 A4 A5 A6 ...个条件源,该如何写查询语句跟数据库里面的规则匹配,因为必须A1 AND A2 成立时才能激活规则R1或者有的条件是OR关系才能激活对应的规则,现在这个地方很困惑,界面是C++BUILDER做的,希望哪个高手能够帮忙解答,
谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[解决办法]
纯粹用数据库实现,系统很慢的。因为知识很难被有效的索引,除非你那是很固定的规律性很强的知识。但如果是规律性很强的,就没必要使用产生式设计,产生式是容易出现知识爆炸的(也就是数据量呈指数式增长),所以纯粹用数据库实现多维度产生式规则很难避免经常性的遍历表,速度上不去。
这是一个知识表达的问题,产生式规则只使用二维表来表示的话是难以令人满意的,很难扩展的。
可考虑 “专家程序+专用数据格式 => 结论” 的方式去表达,能更好地扩展。而主控程序通过管理这些“专家程序”及其专家结论,达到知识管理,知识探索,添加知识库等等目的。
看了你上面的描述,你所要求的是: 多个前提 --> 多个结论 = 一个规则
如果用数据库实现的话,是多对多关系,
你可以考虑以下规则的实现:
if( A > 85 ) then R1 = 30%
if( A > 85 and B/A < 0.50 ) then R1 = 50%
if( A > 85 and B/A < 0.50 and Exists(C) ) then R1 = 90%
从多个结论再推导出新的结论:
if( R1 > 50% and R2 < 20% ) then R1=90%
产生式一般是针对专门的系统而做的,你的系统需要实现到哪一步,采用何种数据结构,就决定了能表达哪种知识。
1、知识点的提取,这点很重要,决定了什么样的知识能被你的系统所表达。
2、能否需要表达从知识中产生的知识,或许说是二次推导得出的结论。
如果你没想到要做知识点的提取,这个系统可以说还没开始。
[解决办法]
关键在于你对知识的理解及表达。
首先: if( operator(A) < 8 and operator(A,C) > 10 ) then Result = 55
这样的语句,你是如何看待的。
举例说产生式知识的抽象过程及解决。
例:(例子不一定对,只是说明这个过程)
如果人有长头发,那么是女的机率为90%。
如果齿轮直径<50,厚度 10-50 那么使用滚齿法加工比较经济。
这样的知识,在电脑中如何表达,并能检索与比较,并且产生新的知识,就是知识系统要做的事情。
1、知识点的整理.
如果人有长头发,那么是女的机率为90%。
已知条件:人 , 长头发 结果有 : 女的 计算结果:机率
如果齿轮直径<50,厚度 10-50 那么使用滚齿法加工比较经济。
已知条件:齿轮 , 直径, 厚度 结果有 : 使用滚齿法加工 模糊结果:比较经济(优先考虑)
比较规则 <小于 数字范围
2、将整理出来的知识点存放于知识条目库中.
已知条件加入条件库
结果放入结果库
计算方法及比较规则放入函数库
3、将知识条目按产生式规则描述,给出解释方法,存放于知识库中。
主表: 产生式规则ID,易记编码,规则类别,相关知识条目,
从表:规则描述,解释程序ID,解释方法....
齿轮直径 < 50
可以分解为: 1、是齿轮类别 ,2,已知条件中有直径参数 , 3 计算方法 通用通用函数库.小于
厚度 10-50
可以分解为: 1、是齿轮类别 ,2,已知条件中有厚度参数 , 3 计算方法 通用通用函数库.范围
如果齿轮直径<50,厚度 10-50
可以分解为:
子规则1 AND 子规则2 3 计算方法:逻辑库 AND
最后得到:
如果满足子规则1 AND 子规则2 那么 结果是优先使用滚齿法... 使用解析程序:齿轮工艺规则.
因为不同种类的产生式规则,使用不同的解释模块,保障了速度,如果都使用文字(或知识脚本)描述,速度是不够快的,而且解释模块写起来很累,容易错。但是,如果你们时间足够多的话,使用知识脚本,也就是开发一套专家语言来描述,也是一个方向。
如果你想要示例代码的话,我没有。我想,这种系统重要的是思想,不是代码。规划好才写代码,代码总是最后才动手写的。
如果你们只是做课程或毕业设计的话,建议简化与参考一下我上面所说的。