drools in java_在AND / OR组中分组Drools规则

我有几个域规则(I 'll call them ' preconditions'),我将其描述为Drools Rules . 例如,要将学生视为 HasGoodGrades ,他们必须保持GPA> 3.0 . 我也有规则,这些规则基本上是这些前提条件的布尔逻辑分组 - 例如 IsInHonorRoll . 如果 IsInHonorRoll 为真,则需要满足规则 HasGoodGrades ,或( HasOkGrades AND HasPerfectAttendance ) .

当规则满足时,如何'm handling this is I'm插入 PreconditionResult 事实 . 然后,在这些更大的'grouping'规则中,我正在检查这些 PreconditionResult 事实并在那里执行布尔逻辑:

rule "IsInHonorRoll"

dialect "mvel"

when

$s : Student()

PreconditionResult( id == "HasGoodGrades", student == $s)

or

( PreconditionResult( id == "HasOkGrades", student == $s)

and

PreconditionResult( id == "HasPerfectAttendance", student == $s) )

then

System.out.print("Student is in the Honor Roll.");

end

rule "HasOkGrades"

dialect "mvel"

when

$s : Student( gpa > 2.0 )

then

insert(new PreconditionResult("HasOkGrades", $s))

end

rule "HasGoodGrades"

dialect "mvel"

when

$s : Student( gpa < 3.0 )

then

insert(new PreconditionResult("HasGoodGrades", $s))

end

rule "HasPerfectAttendance"

dialect "mvel"

when

$s : Student( daysAbsent == 0 )

then

insert(new PreconditionResult("HasPerfectAttendance", $s))

end

这似乎有效,但感觉不自然,我确信在Drools中有更好的方法来做这类事情 . 更重要的是,给定足够的这些规则以及足够大且复杂的布尔子句,Drools即使给出非常大的堆大小也会开始出现内存不足错误 .

处理Drools规则的这些布尔逻辑“分组”的最佳方法是什么?谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值