规则评价系统以及"不准确"的匹配(约翰:x < 3000)
-
16-09-2019 - |
题
我设计的规则评价系统,该系统需要处理一个事实数据库和某些规则超过的数据库。我们目前有一个 修改版本的网环 这一工作的部分权利,与一些缺点。
问题的规则并不限制完全匹配,但他们也必须支持不平等现象(如在不到)和其他种类的模糊的计算。
例子,假设你有这样的事实
(薪金约翰58000) (薪金萨拉78000余名) (雇员约翰*) (老板萨拉) (结婚的约翰*萨拉) (工作约翰计算器)
你可能有一个规则说:
(薪水?w < 60000)/\(结婚了吗?w)/\(工作?w计算器)==>什么
显然,结果将被触发的规则与一个?w值"约翰"但是,我们正在做的,现在是通过循环槽中的每个元素的事实基础,比赛开始的第一次表达(薪酬X X)和然后制作比较和储存的结果在事实基础。例如,一次通过之后你就会有下列项目添加到这一事实基础:
(薪金约翰58000 < 60000)
和一旦你做了执行加入在通常的网环的方式。这样,它需要很多的空间,在事实基础,特别是因为规则可以参照的任何数量和所以你有那些"计算"的事实,只要的规则是积极的。
在另一方面,你可以适用一些规则,与第一表达,你可以继续使用的标准匹配算法进行触发的规则。
任何人都不会知道任何的模式,参考资料或方法处理这样的行为?通常的飞跃,对待,网环算法只处理(就我所知道的)"确切"匹配。
顺便说一句,这是C#。网。
解决方案
剪辑 已经支持的条件要素,只要作为我已经意识到它的至少15年。检查出来的 基本的编程指南的剪辑 和这个 剪辑的教程 例子。你可以看看(或修改)的剪辑来源是免费的。
剪辑使用的前缀符号表示,所以你如有条件可能看起来像:
(defrule fat-boy
(person-data (name ?name) (weight ?weight))
(test (> ?weight 100))
=>
(printout t ?name " weighs " ?weight " kg! " crlf)
)
其他提示
据我明白的问题,所有的模糊规则划分的整数或浮点值的范围成子范围的数量有限。例如,如果一个工资相比58000,60000,78000的值,则有4个范围:<58000,58000-60000,60000-78000,> 78000
如果是这样的话,也许你可以重新定义你的变量是要么0,1,2,3整数,从而将您的不平等规则平等的规则。