第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

一文帶你了解如何使用 Drools 規(guī)則引擎進(jìn)行反向推理

標(biāo)簽:
Java

1. 概述

规则引擎在我们进行业务开发过程中使用非常广泛,比如常见的营销活动的策略定义、金融业务里面的风险评估、征信验证都会使用到规则引擎的能力。在本文里面我们将介绍如何使用 Java 里面最常用的 Drools 规则引擎进行反向推理。

2. 正向推理

正向推理是指我们从数据输入开始,得出一个特定的结论。比如使用正向推理可以根据节点之间已知的连接,发现新的路由。

3. 反向推理

与正向推理相反,反向推理是直接从结论(假设)开始,通过回溯一系列事实来验证结论是否正确。

在比较正向推理和反向推理时,正向推理可以理解成 数据驱动(数据作为输入),而反向推理可以理解成 事件(或目标)驱动(目标作为输入)。

比如使用反向推理可以验证是否存在连接两个节点的路由。

4. Drools Maven 依赖

首先要导入 drools-core Maven 依赖

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>7.4.1.Final</version>
</dependency>

5. 使用 Drools 进行反向推理示例

Drools 项目一开始是作为正向推理系统创建的。但是,从 5.2.0 版本开始,它也开始支持反向推理。

我们创建一个简单的应用程序并尝试验证一个简单的假设:如果中国的长城是在地球上

5.1 事实数据准备

首先需要创建一个简单的事实列表来描述事物及其位置:

1. Planet Earth
2. Asia, Planet Earth
3. China, Asia
4. Great Wall of China, China

5.2 定义规则

我们首先创建一个名为 BackwardChaining.drl.drl 文件,利用反向推理的 belongsTo 查询可以写成如下形式:

query belongsTo(String x, String y)
    Fact(x, y;)
    or
    (Fact(z, y;) and belongsTo(x, z;))
end

此外,我们需要添加两条规则,以便可以查看我们的结果:

rule "Great Wall of China BELONGS TO Planet Earth"
when
    belongsTo("Great Wall of China", "Planet Earth";)
then
    result.setValue("Decision one taken: Great Wall of China BELONGS TO Planet Earth");
end

rule "print all facts"
when
    belongsTo(element, place;)
then
    result.addFact(element + " IS ELEMENT OF " + place);
end

5.3 创建应用程序

现在,我们需要一个 Java 类来表示事实:

public class Fact {
 
    @Position(0)
    private String element;

    @Position(1)
    private String place;

    // ...    
}

在这里,我们使用 @Position 注解告诉 Drools 这些属性提供值的顺序。

此外,我们还将创建表示结果的类:

public class Result {
    private String value;
    private List<String> facts = new ArrayList<>();

    ...
}

最后我们就可以运行示例:

public class BackwardChainingTest {

    @Before
    public void before() {
        result = new Result();
        ksession = new DroolsBeanFactory().getKieSession();
    }

    @Test
    public void whenWallOfChinaIsGiven_ThenItBelongsToPlanetEarth() {

        ksession.setGlobal("result", result);
        ksession.insert(new Fact("Asia", "Planet Earth"));
        ksession.insert(new Fact("China", "Asia"));
        ksession.insert(new Fact("Great Wall of China", "China"));

        ksession.fireAllRules();
        
        assertEquals(
          result.getValue(),
          "Decision one taken: Great Wall of China BELONGS TO Planet Earth");
    }
}

在执行测试用例时,首先会添加给定的事实 (Asia belongs to Planet Earth, China belongs to Asia, Great Wall of China belongs to China).

然后会使用 BackwardChaining.drl 中描述的规则处理事实,提供递归查询 belongsTo(String x, String y).

该查询使用反向推理进行规则调用,从而判断假设(Great Wall of China BELONGS TO Planet Earth)是真还是假。

6. 小结

本文展示了一个使用 Drools 进行反向推理的示例,通过检索事实列表验证结论/假设是否正确。完整的代码示例可以在我的 GitHub 仓库 中找到。


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
資深架構(gòu)師
手記
粉絲
0
獲贊與收藏
0

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消