我正在设计一个规则评估系统,它需要处理事实数据库和数据库上的某些规则。我们目前有一个RETE 的修改版本,它部分正确,但有一些缺点。
问题是规则不限于精确匹配,但它们还必须支持不等式(如小于)和其他类型的模糊计算。
例子,假设你有这个事实
(Salary John 58000) (Salary Sara 78000) (Employee John) (Boss Sara) (Married John Sara) (Works John Stackoverflow)
你可能有一条规则说:
(薪水?w < 60000)/\(已婚?w)/\(工作?w Stackoverflow)==> 随便
显然,结果将触发 ?w 值为“John”的规则,但我们现在这样做的方式是循环遍历事实库中与第一个表达式 (Salary XX) 开头匹配的每个元素,然后进行比较并将结果存储在它自己的事实基础中。例如,在第一次通过后,您将在事实库中添加以下项目:
(工资约翰 58000 < 60000)
一旦完成,您就可以按照通常的 RETE 方式执行连接。这样它会在事实库中占用大量空间,特别是因为规则可以引用任何数字,因此只要规则处于活动状态,您就拥有那些“计算出的”事实。
另一方面,您可以使用第一个表达式应用多个规则,并且可以继续使用标准匹配算法来触发规则。
有谁知道处理这种行为的任何模式、引用或方法?通常的 LEAPS、TREATS、RETE 算法只处理(据我所知)“精确”匹配。
顺便说一下,这是 C# .NET。