如何从几个drools决策表中创建分数?
我对drools还不熟悉,并尝试使用guvnor构建一个简单的计算器 一个例子是:假设你是一个30岁的男性,你从-9分开始。如果你的总胆固醇为180,加4分,如果你的吸烟者加8分,如果你的高密度脂蛋白胆固醇超过60,减1分,如果你的血压为135,则加1分。给你一个+3的结果 评分表上的表格对于drools决策表来说似乎是一个很好的场景 我不知道如何将各个分数相加。如何从几个drools决策表中创建分数?,drools,Drools,我对drools还不熟悉,并尝试使用guvnor构建一个简单的计算器 一个例子是:假设你是一个30岁的男性,你从-9分开始。如果你的总胆固醇为180,加4分,如果你的吸烟者加8分,如果你的高密度脂蛋白胆固醇超过60,减1分,如果你的血压为135,则加1分。给你一个+3的结果 评分表上的表格对于drools决策表来说似乎是一个很好的场景 我不知道如何将各个分数相加。 我开始为我的结果栏创建一个新的“FraminghamScore”事实,但接下来我需要将这些事实加在一起 我试图将所有的表合并到1中,
我开始为我的结果栏创建一个新的“FraminghamScore”事实,但接下来我需要将这些事实加在一起 我试图将所有的表合并到1中,但很快就会变得复杂和冗余
看起来,如果我用java创建FraminghamScore,我可以调用incrementValue(int)方法,但我不知道如何将数字传递给它。如果你决定重构你的应用程序,改用drools,如果其他人正在寻找类似问题的解决方案,这是我两分钱的口水知识 你的事实可能是这样的
// Fact for the scoring
class FraminghamScore {
private int total;
public void increment( int value ) { total += value; }
public int getTotal() { return total; }
}
// Fact for the subject
class Person {
public enum Gender{ MALE, FEMALE };
private Gender gender;
private int age;
private int cholesterol;
private boolean smoker;
// Rest of the fields + getter/setters as needed
}
您的决策表如下所示。在我看来,在年龄检查中会有一些重复,例如,我想不出一种方法来摆脱这些重复
Condition | Condition | Action
-----------------------------------------------------------------------------------
$p : Person() |
$s : FraminghamScore() |
-----------------------------------------------------------------------------------
p.gender | $param | s.increment($param);
| | update(s);
-----------------------------------------------------------------------------------
MALE | p.age >= 20 && p.age <= 34 | -9
MALE | p.age >= 35 && p.age <= 39 | -5
-- Rest of the age groups + same for females
Condition | Condition | Action
-----------------------------------------------------------------------------------
$p : Person() |
$s : FraminghamScore() |
-----------------------------------------------------------------------------------
p.gender | p.smoker | s.increment($param);
| | update(s);
-----------------------------------------------------------------------------------
MALE | true | -9
MALE | false | -5
条件|条件|动作
-----------------------------------------------------------------------------------
$p:Person()|
$s:FraminghamScore()|
-----------------------------------------------------------------------------------
p、 性别|$param | s.增量($param);
||更新;
-----------------------------------------------------------------------------------
男性| p.age>=20&&p.age=35&&p.age如果您决定重构应用程序以使用drools,并且如果其他人正在寻找类似问题的解决方案,以下是我对drools的两分钱知识
你的事实可能是这样的
// Fact for the scoring
class FraminghamScore {
private int total;
public void increment( int value ) { total += value; }
public int getTotal() { return total; }
}
// Fact for the subject
class Person {
public enum Gender{ MALE, FEMALE };
private Gender gender;
private int age;
private int cholesterol;
private boolean smoker;
// Rest of the fields + getter/setters as needed
}
您的决策表如下所示。在我看来,在年龄检查中会有一些重复,例如,我想不出一种方法来摆脱这些重复
Condition | Condition | Action
-----------------------------------------------------------------------------------
$p : Person() |
$s : FraminghamScore() |
-----------------------------------------------------------------------------------
p.gender | $param | s.increment($param);
| | update(s);
-----------------------------------------------------------------------------------
MALE | p.age >= 20 && p.age <= 34 | -9
MALE | p.age >= 35 && p.age <= 39 | -5
-- Rest of the age groups + same for females
Condition | Condition | Action
-----------------------------------------------------------------------------------
$p : Person() |
$s : FraminghamScore() |
-----------------------------------------------------------------------------------
p.gender | p.smoker | s.increment($param);
| | update(s);
-----------------------------------------------------------------------------------
MALE | true | -9
MALE | false | -5
条件|条件|动作
-----------------------------------------------------------------------------------
$p:Person()|
$s:FraminghamScore()|
-----------------------------------------------------------------------------------
p、 性别|$param | s.增量($param);
||更新;
-----------------------------------------------------------------------------------
男| p.age>=20&&p.age=35&&p.age嘿@Brian。你有没有想过如何实现这一点?我有类似的要求,目前我的想法是将sum对象作为全局对象传递给rules/decision表。使用int参数调用incrementValue()
方法应该没有问题,或者是这样吗?谢谢。@JAndy我一直没弄明白这一点,我最终放弃了,只是在Drools之外用Java编写了它。不过,我会在某个时候再次提起这一点。Drools文档实际上不鼓励从操作中更改全局变量。建议的方法是改变事实。我添加了一个显示此选项的答案,尽管它恐怕不能解决重复检查的问题。你有没有想过如何实现这一点?我有类似的要求,目前我的想法是将sum对象作为全局对象传递给rules/decision表。使用int参数调用incrementValue()
方法应该没有问题,或者是这样吗?谢谢。@JAndy我一直没弄明白这一点,我最终放弃了,只是在Drools之外用Java编写了它。不过,我会在某个时候再次提起这一点。Drools文档实际上不鼓励从操作中更改全局变量。建议的方法是改变事实。我添加了一个显示此选项的答案,尽管它恐怕无法解决重复检查的问题。这些年来,您对此解决方案有何改进?@user1428716不幸的是,在过去5年中,我没有做过任何Drools方面的工作,因此我无法提供更好的解决方案。TBH,甚至不能理解这个答案:)这些年来,这个解决方案有什么改进吗?@user1428716不幸的是,我在过去5年里没有做过任何Drools的事情,所以我无法提供更好的解决方案。TBH,我甚至不能理解这个答案:)