gpt4 book ai didi

java - 多项检查最终导致重新评估 Drools Execution KIE 中的规则

转载 作者:行者123 更新时间:2023-12-02 11:43:00 25 4
gpt4 key购买 nike

我有一组规则,它们的行为根据评估对象的数量而有所不同

我希望为每个传递的 Product 类对象执行 2 条规则。

  1. 当我传递产品 2 的单个对象时,规则将被执行(这很好)

    Product product5= new Product();
    product5.setType("gold");
    product5.setBuyer("platinum");
    product5.setEvent("sale");
    product5.setName("product5");
    ksession.insert(product5);
  2. 当我传递 Product 类的两个对象时,执行的规则数为 6(我无法理解)。

    Product product5= new Product();
    Product product3= new Product();
    //setting all fields in both objects
    ksession.insert(product5);
    ksession.insert(product3);

    我尝试通过添加控制台打印来调试此问题,这是我的结果

    对每个对象执行一次黄金报价(预期)。

    节日黄金优惠对每个对象执行两次(应该是两个)。

    未调用钻石要约(预期)

  3. 当我传递 Product 类的三个对象时,执行的规则数为 12(我无法理解)。我尝试通过添加控制台打印来调试此问题,这是我的结果

    对每个对象执行一次黄金报价(预期)。

    节日黄金优惠对每个对象执行三次(应该是两个)。

    未调用钻石要约(预期)

下面是我的 DRL 文件

    rule "Offer for Diamond"
when
$productObject: Product(type == "diamond")
then
$productObject.setDiscount(15);
end


rule "Offer for Gold"
salience 1

when
$productObject: Product(type == "gold")
then
$productObject.setDiscount(25);
end


rule "Offer for Gold on Festival"
when
$productObject: Product(type == "gold") && Product(event == "sale")
then
$productObject.setDiscount($productObject.getDiscount() + 5);
end

最佳答案

假设您的 2 个对象具有相同的属性,这些是执行的规则(和事实):

  • “钻石报价”:0次
  • “黄金要约”:2次:
    • o1
    • o2
  • “节日金币优惠”:4次
    • o1,o1
    • o1,o2
    • o2,o1
    • o2,o2

正如您所看到的,当您在模式之间使用 && 时,您正在创建与它们匹配的所有可能组合的笛卡尔积。

在“Offer for Gold on Festival”中,如果您希望规则对每个对象执行一次,那么您必须明确告诉 Drools 这 2 个模式正在谈论同一个对象:

rule "Offer for Gold on Festival"
when
$productObject: Product(type == "gold") &&
Product(this == $productObject, event == "sale")
then
$productObject.setDiscount($productObject.getDiscount() + 5);
end

现在,如果您的规则与上面的规则完全相同,则可以通过简单地执行以下操作来简化:

rule "Offer for Gold on Festival"
when
$productObject: Product(type == "gold", event == "sale")
then
$productObject.setDiscount($productObject.getDiscount() + 5);
end

在本例中,由于您没有 2 个模式,因此该规则将仅针对每个 Product 评估一次。

希望对你有帮助

关于java - 多项检查最终导致重新评估 Drools Execution KIE 中的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com