我设计的规则评价系统,该系统需要处理一个事实数据库和某些规则超过的数据库。我们目前有一个 修改版本的网环 这一工作的部分权利,与一些缺点。

问题的规则并不限制完全匹配,但他们也必须支持不平等现象(如在不到)和其他种类的模糊的计算。

例子,假设你有这样的事实

(薪金约翰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整数,从而将您的不平等规则平等的规则。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top