如果我向Drools引擎添加一个事实,我有一组正确工作的Drools规则,如果我添加两个事实,这些规则只应用于第一个事实。如何使规则集适用于多个事实?
我的可追踪事实:
@Traitable
public class Policy {
private String postalCode;
private String houseHold;
private BigDecimal grossPremium;
public Policy(String postalCode, String houseHold) {
this.postalCode = postalCode;
this.houseHold = houseHold;
}
}
我的规则集:
import java.math.BigDecimal;
declare trait PolicyWithFactors
policy : Policy
postalCodeFactor : Double
houseHoldFactor : Double
end
rule rule1
when
$f : PolicyWithFactors(policy.postalCode == "1000", postalCodeFactor == null)
then
System.out.println("Running rule1 for " + $f.getPolicy().getHouseHold() + " and " + $f.getPolicy().getPostalCode());
modify($f) { setPostalCodeFactor(20.0); }
end
rule rule2
when
$p : Policy()
not PolicyWithFactors()
then
System.out.println("Running rule2 for " + $p.getHouseHold() + " and " + $p.getPostalCode());
PolicyWithFactors $pwf = don($p, PolicyWithFactors.class);
modify ($pwf) { setPolicy($p); }
end
rule rule3
when
$p : Policy(houseHold == "single")
$f : PolicyWithFactors(houseHoldFactor == null)
then
System.out.println("Running rule3 for " + $p.getHouseHold() + " and " + $p.getPostalCode());
modify($f) { setHouseHoldFactor(10.0); }
end
rule rule4
when
$p : Policy(grossPremium == null)
$f : PolicyWithFactors(policy == $p, $pcf : postalCodeFactor != null, $hhf : houseHoldFactor != null)
then
System.out.println("Running rule4 for " + $pcf + " and " + $hhf);
BigDecimal $gp = new BigDecimal($pcf * $hhf);
modify($p) { setGrossPremium($gp); }
end
rule rule5
when
$p : Policy(houseHold == "family")
$f : PolicyWithFactors(houseHoldFactor == null)
then
System.out.println("Running rule5 for " + $p.getHouseHold() + " and " + $p.getPostalCode());
modify($f) { setHouseHoldFactor(15.0); }
end
失败的测试用例:
public class RuleTest {
@Test
public void test() {
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession();
Policy policy1 = new Policy("1000", "single");
kieSession.insert(policy1);
Policy policy2 = new Policy("1000", "family");
kieSession.insert(policy2);
kieSession.fireAllRules(50);
assertThat(policy1.getGrossPremium(), is(new BigDecimal("200")));
assertThat(policy2.getGrossPremium(), is(new BigDecimal("300")));
}
}
罪魁祸首是rule2。它不会在工作内存中一旦有一个PolicessFactors
就触发。
rule rule2
when
$p : Policy()
not PolicyWithFactors( policy == $p)
then ... end
我还没有尝试理解其余的所有内容,但请检查是否应该在所有后续规则中都存在此约束,以便将一个策略与一个PolicyWithFactors匹配。
问题内容: 我试图编组多个对象,例如添加到via中。我开始使用此设置: 和 但是,我得到了以下运行时例外: javax.xml.bind.JAXBException:com.jaxb.example.marshall.Book或其任何超类对此上下文都是未知的] 我的类型定义如下。 书:- 图书清单:- 马歇尔代码:- 我正在尝试放置注释(参考:-JAXB异常:该上下文未知的类)。该注释在我的版本中
另外,我不明白当我们只调用bind()而不调用sync()时会发生什么。服务器是否以某种方式继续运行?我们如何优雅地关闭它? 很明显,我对这一切的工作原理感到非常困惑,可悲的是,在这方面缺乏完整的文档。任何帮助都将不胜感激。
问题内容: 我是Nodejs的新手。如何导出多个对象?例如 我想使用类似的模型: 我想使用类似这样的对象: 谢谢你的建议:D 更新 :解决以下方法: 但是我还有另一个问题。如何动态分配模型? 更新通过 以下方式解决了第二个问题: 问题答案: 只需将它们包装在对象文字中即可。在纯JS(没有CoffeeScript)中,将是: 在coffeescript中,您使用缩进,但要创建空对象时除外:
我编写了以下代码和驱动程序,但我不知道如何使用两个构造函数创建银行账户对象。一个构造函数获取初始余额,第二个构造函数在没有钱的情况下开设账户。此外,Account tBalance是否应该包括有效性检查? 或者,我可以执行以下操作: 将费用作为描述银行账户的一部分。根据需要更新BankAccount类。用户应该能够为每个帐户设置费用金额,并通过一种方法添加费用。向驱动程序添加代码以演示费用功能。(
我试图在OpenGL中使用多个VAO和VBO渲染多个对象。使用相同的顶点渲染多个对象我已经做过了,但是我想做的是为每个对象使用不同的顶点,例如画一个正方形和一个圆形。对于一个正方形,我只需要6个顶点,但是对于圆,我需要360个顶点。我有阅读或创建着色器的错误。 以下是顶点着色器: 片段着色器: VAO和VBO的生成与绑定 以及渲染循环中的绘制调用: 我重复一遍,用我做过的相同顶点绘制多个对象。我需
我有一个程序,它有一个超级类,个人和子类,学生,并试图根据他们的生日和名字来比较他们什么时候是平等的。我做对了,但是在我试图解决的提示下,我得到了一个错误,自动评分器是:“测试学生和学生是一样的,即使成绩不同”,预期结果是真的,但我总是得到错误。这个程序在比较人和学生时起作用,在比较人和人时起作用,而不是学生和学生,我不知道为什么。 主要类别: 超类: 子类: