[rust-005]rete规则引擎算法的rust实现

根据规则做决策。

规则举例:

if:
  人均银行存款超过5万元
  人均抵押贷余额低于3万元
  指数小于2000点
  平均PE小于5
then:
  发动牛市

如果问题比较复杂,需要根据数百数千个或者更多的规则进行判断,不能手工解决,太慢了,需要规则引擎。

开源的规则引擎非常多,经过商业落地检验的,java系drools,c系clipse,python系pyke、pyclipse、pychinko,ruby系ruleby,

drools:Drools扫盲普及贴,规则引擎drools的rete算法实现原理和事实匹配过程,drools RETE算法

drools比较庞大,吃内存,更多用在erp、金融系统,不适合小系统、嵌入式、物联网。

上述系统对国际语言比如中文的支持是一个问题。

知识产权是另一个问题,而且是比较严重的问题。

规则引擎的核心是推理算法。某文献认为,推理算法目前分两个系:rete系,非rete系。

  • rete系:
    • rete算法是1979年Charles Forgy在博士论文里提出来的。1982年Charles Forgy在顶刊《Artificial Intelligence》发了论文《Rete: A fast algorithm for the many pattern/many object pattern match problem》,这篇论文可以作为实现rete的依据。
    • Charles Forgy后来又做了三个改进版:rete II、rete III、rete NT。
    • RedHat的rete改进版reteoo是Drools的推理算法。
    • IBM的改进版是reteplus。
  • 非rete系:
    • NRE算法,主要改进是减少内存占用。非rete系这个提法姑且存疑,NRE改进的是小细节,本质上仍是rete,可能有其他企图。

Charles Forgy后来加入Sparkling Logic,该公司官网有博文介绍rete。

关于rete,还有三篇不错的文档,https://archive.sap.com/kmuuid2/10dea1d3-fbef-2d10-0e89-a7447f95bc0e/Introduction%20To%20The%20Rete%20Algorithm.pdf,http://www.jbug.jp/trans/jboss-rules3.0.2/ja/html/ch01s04.html,https://cis.temple.edu/~ingargio/cis587/readings/rete.html。

结论:规则引擎的推理算法,没有比rete更好的了,唯一解决方案。

rust的rete现实,有一个项目比较好 https://github.com/adeschamps/rete 。这个实现参考论文是Production Matching for Large Learning Systems,这个论文是CMD的博士论文,写得很详细,特别好。

 

 

你可能感兴趣的:(rust,rust,rete,规则引擎)