规则引擎原理:http://www.open-open.com/lib/view/open1417528754230.html
规则引擎有很多,创建规则引擎的目的,简单的来说,是为了实现智能化,在规则改变的时候,业务代码不需要改变,不需要根据规则来编写新的代码。
规则引擎的计算,和神经网络算法相似,将规则按照LHS 和LRH 执行。
drools语法就不说了,来说一下规则怎么可以不需要通过文件来编写,直接将规则保存到数据库中,通过将数据库中的规则来动态的修改规则。
drools使用:
-
1.有一个使用的场景,即:事件;
2.有很多规则 规则
3.每条规则有很多条件 条件
4.每个条件是由一个元素组成
组成部分: 事件 规则 条件 元素
关系:元素是最小单元 ,其次是 ,条件,规则,事件 简单的描述: 一个事件是由多个规则组成 ,一个规则由多个条件组成 ,一个条件由多个元素组成元素:就是属性字段 eg。p_age 年龄 p_gender 性别 条件:元素进行运算操作 eg。c_1: p_age > 10 年龄大于10 c_2: p_gender==男 规则:条件的组合集 eg, r_1: c_1&c_2 p_age>10&p_age<20 年龄大于10小于20 r_2:c_2 p_gender==男 事件:规则的组合集 eg。 e_1:r_1||r_2
比如:根据不同的积分、性别、开户时间 等 奖励不同的礼券
- 积分小于100,奖励10块
- 积分100到200,奖励20
- 积分200-500,奖励30
- 男 奖励10
- 女奖励15
- 开户一年 奖励10
- 最近3个月开户 奖励5
- 男,积分大于500 奖励 200
“根据不同的积分、性别、开户时间 等 奖励不同的礼券” ,就是一个事件;
“男,积分大于500 奖励 200”,就是一个规则,其中包含的条件可以是多个,比如这条规则,要是男的,积分还要大于500;
“积分小于100”,就是一个条件;
“积分”,“男” “女” “开户时间”,这些就是元素;
一个事件使用多条规则组成的,一条规则是用多个条件组成,一个条件又由元素组成的。
只需要维护元素,规则 ,条件,事件 就可以 维护一个规则模型。
具体操作:
- 维护元素 元素类型 数值,字符串等
- 维护条件 保存条件组成的元素,操作,eg,字符串包含,相等,不包含;
- 维护规则 根据drools语法,构建规则 ; eg ,
rule "rule_1"
lock-on-active true
salience 100
when
factData : FactData( (paramMap.get("gender") == "男") )
then
factData.setResultScore(10);
update(factData);
end
rule "rule_2"
lock-on-active true
salience 100
when
factData : FactData( (paramMap.get("setUpTime") > 365000)& (paramMap.get("gender") =="女"))
then
factData.setResultScore(10);
update(factData);
end
- 维护事件 事件包含多个规则
通过多模型的操作,将事件直接维护在数据库,当规则改动或者新加的时候,都不需要重新发布项目,加载drools 规则文件。