我正在设计一个规则评估系统,它需要处理事实数据库和数据库的某些规则。我们目前有一个modified version of RETE,它有一些缺点,可以正常工作。规则评估系统和“不准确”匹配(ej:x <3000)
问题是规则不限制到精确匹配,但他们也必须支持不等式(如小于)种和其他模糊计算。
例子,假设你有这样的事实
(工资约翰58000) (工资萨拉78000) (员工约翰) (老板萨拉) (已婚约翰·萨拉) (工程约翰#1)
你可能有一个规则说:(?工资W¯¯< 60000)
/\(?已婚W)/ \(?工件W#1)==>无论
显然,结果会触发与规则?W“约翰”的价值,但我们正在做的,现在的方式是通过循环低谷的事实基础,第一个表达式的beggining匹配的每个元素(工资XX)然后进行比较并将结果存储在事实基础中。例如,第一遍后都会有以下产品加入的事实基础:
(工资约翰58000 < 60000)
,一旦被让你执行联接平时的RETE方式。这样它就占据了事实库中的很多空间,特别是因为规则可以引用任何数字,所以只要规则处于活动状态,就可以获得那些“计算出来的”事实。
在另一方面,你可以申请几个规则,第一个表达式,你可以保持使用标准的匹配算法来触发规则。
有谁知道是处理这种行为的任何模式,引用或方法?通常的LEAPS,TREATS,RETE算法只处理(据我所知)“精确”匹配。
顺便说一下,这是C#.NET。
你有没有考虑使用类似F#呢? – 2009-09-24 14:04:51
为什么F#会是更好的选择?只是因为功能? – 2009-09-24 14:30:20
有你看了CLIPS源 - > http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/expert/systems/clips/0.html? – DaveParillo 2009-09-29 19:53:29