规则引擎分析
规则引擎分析
Will--wang 发表于10个月前
规则引擎分析
  • 发表于 10个月前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

【面临问题】

业务规则、商业逻辑复杂

业务规则异常调整,如折扣、价格

24小时不停机,实时修改规则

【解决问题】

声明式编程,关注“做什么”,而不是“怎么做”

逻辑、数据分离

rete算法

算法转规则,业务规则太复杂没有现成的算法实现

【What】

嵌入式组件,业务决策与系统分离

核心获取knowledge

应用knowledege到fact

conditions(LHS)和actions(RHS)

正向链 或 反向链

推理引擎

rules(规则库)-> engine <-fact (working memory) (rete算法)

{正向链}

RULE ->parse rule->RuleBase (fire)-> Agenda(activation(rule-fact))

| (create)

FACT ->assert facts -> working memory (rule-fact)

【drools】

JAVA & RETE算法实现

2001 ,线程蛮力搜索

2.0 , 基于rete算法重写

3.0 , drl文件,特定的dsl专门针对规则编写

5.0 ,drools func, flow rule

格式:drl,dsl,excel,xml

环境:droolsjbpm-tools 安装到eclipse插件

eclipse设置运行时环境drools-runtime

问题域构建

{规则语言}

基础

POJO即fact,规则、业务系统对接的桥梁

fact插入workmemory后,返回FactHandle,是插入workmemory的句柄

imports 需要导入的类

global 比如service、对象等workmemory需要使用的

关键字duration,推迟多长时间之后,启动另一个线程来执行actions

关键字activation-group,多个rule定义为一个group,那么只有一个会被执行

关键字agenda-group,代码中必须显式设置focus,那么这个规则才会被执行

关键字function,在drl中定义动态脚本函数

关键字query,在drl中定义查询函数,通过传参查询,规则校验,返回结果

流程:指定drl,builder编译,打包成package,包来创建会话,fact放进会话,规则匹配,dispose释放

{RETE算法}

RETE拉丁语网络,将规则组织成网络,在内存中进行快速匹配

RETE节点:root节点,所有对象进入网络的入口,objecttyperoot,进入对象类型检查,引擎只接受object类型的对象进入;Alpha节点,用来评估字面条件,条件会被连接到一起;beta节点,左右两个输入,joinnode,notnode

规则树,空间换时间,节省效率

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1
博文 15
码字总数 8802
×
Will--wang
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: