国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Drools 規(guī)則引擎原理

這篇具有很好參考價(jià)值的文章主要介紹了Drools 規(guī)則引擎原理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


基于Java的開源的規(guī)則引擎框架有很多,從實(shí)現(xiàn)原理上來說分為以下三類:
  1. 通過Java語言+RETE算法實(shí)現(xiàn)(drools和urule)
  2. 通過腳本語言+jvm實(shí)現(xiàn)(groovy)
  3. 通過Java表達(dá)式+jvm實(shí)現(xiàn)(Aviator)

Drools規(guī)則引擎

基本定義

從“頻繁且通用”的業(yè)務(wù)變化中抽象出來的中間服務(wù)層,實(shí)現(xiàn)了將決策邏輯從應(yīng)用代碼中分離出來,并使用預(yù)定義的高級(jí)語法或者可視化的工具編寫業(yè)務(wù)規(guī)則并自動(dòng)優(yōu)化執(zhí)行。

規(guī)則引擎具體執(zhí)行可以分為接受數(shù)據(jù)輸入,高效解釋業(yè)務(wù)規(guī)則,根據(jù)業(yè)務(wù)規(guī)則輸出決策結(jié)果幾個(gè)過程。如下圖所示:
Drools 規(guī)則引擎原理

介紹

Drools規(guī)則引擎是一種基于規(guī)則的方法,用于在Drools軟件中實(shí)現(xiàn)專家系統(tǒng)。規(guī)則引擎提供了專家系統(tǒng),這是一種基于知識(shí)的系統(tǒng),可以幫助你做出決策,比如做什么和怎么做。它將知識(shí)收集到一個(gè)知識(shí)庫中,可以用于推理。

Drools規(guī)則引擎基于以下抽象組件實(shí)現(xiàn):

  • 規(guī)則(Rules):業(yè)務(wù)規(guī)則或DMN決策。所有規(guī)則必須至少包含觸發(fā)該規(guī)則的條件以及對(duì)應(yīng)的操作。
  • 事實(shí)(Facts):輸入到規(guī)則引擎的數(shù)據(jù),用于規(guī)則的條件的匹配。
  • 生產(chǎn)內(nèi)存(Production memory):規(guī)則引擎中規(guī)則存儲(chǔ)的地方
  • 工作內(nèi)存(Working memory):規(guī)則引擎中Fact對(duì)象存儲(chǔ)的地方。
  • 議程(Agenda):用于存儲(chǔ)被激活的規(guī)則的分類和排序的地方。

Drools規(guī)則引擎的核心組件有:
? KieFileSystem:一個(gè)內(nèi)存文件系統(tǒng),用于存儲(chǔ)規(guī)則文件和其他資源。
? KieContainer:一個(gè)包含多個(gè)KieBases的容器,每個(gè)KieBase代表一個(gè)知識(shí)庫。
? KieSession:一個(gè)用于插入事實(shí)和觸發(fā)規(guī)則的會(huì)話。
? Rule:一個(gè)表示單個(gè)規(guī)則的對(duì)象,它包含匹配事實(shí)的條件和執(zhí)行動(dòng)作的結(jié)果。
? Fact:一個(gè)表示輸入數(shù)據(jù)的對(duì)象,它可以被規(guī)則引擎修改、插入或刪除。

優(yōu)劣

優(yōu)點(diǎn)

  1. 聲明式編程:規(guī)則引擎允許你說“做什么”,而不是“怎么做”。這樣可以使得表達(dá)復(fù)雜問題的解決方案更容易,并且可以驗(yàn)證解決方案的正確性。規(guī)則比代碼更容易閱讀。
  2. 業(yè)務(wù)邏輯的集中管理:規(guī)則引擎可以將業(yè)務(wù)邏輯從程序代碼中分離出來,使得業(yè)務(wù)邏輯的維護(hù)和變更更快更便宜。同時(shí),也可以縮小業(yè)務(wù)人員和技術(shù)人員之間的溝通鴻溝,因?yàn)橐?guī)則可以用一種容易理解的格式編寫。
  3. 規(guī)則的復(fù)用和組合:規(guī)則引擎可以將規(guī)則分為不同的模塊,根據(jù)不同的場景和需求進(jìn)行復(fù)用和組合。這樣可以提高規(guī)則的可擴(kuò)展性和靈活性。

缺點(diǎn)

  1. 學(xué)習(xí)成本:開發(fā)人員需要學(xué)習(xí)一種新的編程方式,掌握規(guī)則引擎的基本概念和語法。同時(shí),也需要了解規(guī)則引擎的內(nèi)部工作原理,以便優(yōu)化規(guī)則的性能和效率。
  2. 調(diào)試?yán)щy:規(guī)則引擎的運(yùn)行過程可能涉及到大量的規(guī)則匹配和推理,當(dāng)出現(xiàn)錯(cuò)誤或異常時(shí),很難定位問題的原因和位置。此外,規(guī)則之間也可能存在沖突或循環(huán),需要注意避免或解決。
  3. 不適合簡單或穩(wěn)定的業(yè)務(wù)邏輯:如果一個(gè)應(yīng)用中只有很少或沒有變化的業(yè)務(wù)邏輯,使用規(guī)則引擎可能是一種過度設(shè)計(jì),會(huì)增加不必要的復(fù)雜度和開銷。在這種情況下,直接使用程序代碼可能更合適。

基本概念

規(guī)則引擎(RE)是一種模塊,可以自動(dòng)化管理一些高度可變的過程?;镜母拍钍菍⑴c過程的對(duì)象與實(shí)現(xiàn)這些過程的邏輯分離。邏輯是通過編寫規(guī)則來定義的。

Drools規(guī)則引擎使用開源的Drools規(guī)則引擎,它使用了一種改進(jìn)的Rete算法,并具有前向和后向鏈推理機(jī)制。

Fact:事實(shí),是指在drools規(guī)則應(yīng)用當(dāng)中,將一個(gè)普通的Java Bean插入到Working Memory后的對(duì)象就是Fact對(duì)象。

規(guī)則引擎構(gòu)成

由以下三部分組成:

  1. Working Memory(工作內(nèi)存):規(guī)則引擎會(huì)從Working Memory中獲取數(shù)據(jù)并和規(guī)則文件中定義的規(guī)則進(jìn)行模式匹配,應(yīng)用程序需要將數(shù)據(jù)插入到Working Memory中。
  2. Rule Base(規(guī)則庫):在規(guī)則文件中定義的規(guī)則都會(huì)被加載到規(guī)則庫中。
  3. Inference Engine(推理引擎)

其中Inference Engine(推理引擎)又包括:

  • Patter Matcher(匹配器):將Rule Base中所有規(guī)則與Working Memory中的Fact對(duì)象進(jìn)行模式匹配,匹配成功的規(guī)則將被激活放入Agenda。
  • Agenda(議程):用于存放通過匹配器進(jìn)行模式匹配后被激活的規(guī)則。
  • Execution Engine(執(zhí)行引擎)
    Drools 規(guī)則引擎原理

規(guī)則結(jié)構(gòu)

Drools規(guī)則引擎有自己的語法來編寫規(guī)則,這種語法是聲明式、簡潔和明確的。一個(gè)規(guī)則有以下結(jié)構(gòu):

  • when 條件
    條件是根據(jù)一定的語法規(guī)則來編輯的。根據(jù)這種語法,設(shè)置一個(gè)條件意味著驗(yàn)證一個(gè)事實(shí)。應(yīng)用規(guī)則的上下文由一組事實(shí)組成,這些事實(shí)描述了RE操作的當(dāng)前情況,并被斷言在一個(gè)工作內(nèi)存中。為了判斷是否應(yīng)用一個(gè)規(guī)則,RE驗(yàn)證一個(gè)事實(shí)是否在工作內(nèi)存中被有效地?cái)嘌浴H绻?,那么?guī)則就被應(yīng)用。
  • then 動(dòng)作
    動(dòng)作區(qū)域是用普通的Java代碼來編輯的,包含了如果條件被驗(yàn)證要執(zhí)行的動(dòng)作。要應(yīng)用的規(guī)則被包含在一個(gè)生產(chǎn)內(nèi)存中。RE比較生產(chǎn)內(nèi)存中假設(shè)的動(dòng)作和工作內(nèi)存中斷言的事實(shí)。如果有兼容性,RE執(zhí)行一個(gè)或多個(gè)規(guī)則。

簡單來說,Drools規(guī)則就是根據(jù)when后的條件來匹配工作內(nèi)存中的事實(shí),如果匹配成功,就執(zhí)行then后的動(dòng)作。

規(guī)則引擎執(zhí)行過程

  1. 將初始數(shù)據(jù)(fact)輸入至工作內(nèi)存(Working Memory);
  2. 使用Pattern Matcher將規(guī)則庫中的規(guī)則(rule)和數(shù)據(jù)(fact)比較;
  3. 如果執(zhí)行規(guī)則存在沖突(confict),即同時(shí)激活了多個(gè)規(guī)則,將沖突的規(guī)則放入沖突集合;
  4. 解決沖突,將激活的規(guī)則按順序放入Agenda;
  5. 執(zhí)行Agenda中的規(guī)則。重復(fù)步驟2至5,指導(dǎo)執(zhí)行完畢Agenda中的所有規(guī)則。

規(guī)則存儲(chǔ)

Drools規(guī)則引擎使用一個(gè)知識(shí)庫(Knowledge Base)來存儲(chǔ)規(guī)則,知識(shí)庫是Drools生態(tài)系統(tǒng)中的知識(shí)的代表,它包含了規(guī)則所在的資源的信息,也可以創(chuàng)建知識(shí)會(huì)話。

知識(shí)庫可以分為不同的模塊(Module),每個(gè)模塊可以包含多個(gè)知識(shí)庫,每個(gè)知識(shí)庫可以包含不同的會(huì)話。

規(guī)則可以以.drl文件或Excel表格的形式編寫,也可以通過Java配置或注解來定義。

規(guī)則可以通過KieFileSystem來寫入一個(gè)內(nèi)存文件系統(tǒng),也可以通過ResourceFactory來從類路徑或其他位置讀取。

規(guī)則可以通過KieContainer來管理和加載,KieContainer是一個(gè)包含多個(gè)KieBases的容器,每個(gè)KieBase代表一個(gè)知識(shí)庫。

Kie 介紹

Drools 規(guī)則引擎原理

Kie 相關(guān)組件

Drools 規(guī)則引擎原理
Drools是Kie中的一個(gè)組件。

知識(shí)庫

知識(shí)庫(Knowledge Base)是一種存儲(chǔ)和組織知識(shí)的方式,它可以包含不同類型和格式的數(shù)據(jù),例如文本、圖像、視頻、音頻等。知識(shí)庫的結(jié)構(gòu)通常取決于知識(shí)的領(lǐng)域、用途和特點(diǎn),但一般來說,它由以下幾種基本數(shù)據(jù)結(jié)構(gòu)組成或者與之相關(guān):

  • 實(shí)體(Entity):知識(shí)庫中的基本單元,代表一個(gè)具體或抽象的事物,例如人、地點(diǎn)、事件、概念等。實(shí)體通常有一個(gè)唯一的標(biāo)識(shí)符和一些屬性(Attribute),用來描述實(shí)體的特征,例如姓名、年齡、顏色等。
  • 關(guān)系(Relation):知識(shí)庫中描述實(shí)體之間的聯(lián)系的方式,例如父子、屬于、發(fā)生在等。關(guān)系通常有一個(gè)類型和一些約束條件,用來規(guī)定關(guān)系的適用范圍和方向,例如親屬關(guān)系只能在人類實(shí)體之間存在,且是雙向的。
  • 三元組(Triple):知識(shí)庫中表示一個(gè)事實(shí)的最小單位,由一個(gè)主體實(shí)體(Subject)、一個(gè)關(guān)系(Predicate)和一個(gè)賓語實(shí)體(Object)組成,例如(北京,首都,中國)、(愛因斯坦,出生于,德國)。三元組可以看作是知識(shí)庫中的語句或斷言,用來表達(dá)知識(shí)的內(nèi)容。
  • 本體(Ontology):知識(shí)庫中定義實(shí)體和關(guān)系的類別和層次結(jié)構(gòu)的方式,例如人類是動(dòng)物的子類,父子是親屬關(guān)系的一種。本體可以看作是知識(shí)庫中的語法或規(guī)則,用來約束和指導(dǎo)知識(shí)的表示和推理。
  • 圖(Graph):知識(shí)庫中將實(shí)體和關(guān)系視為節(jié)點(diǎn)和邊的網(wǎng)絡(luò)結(jié)構(gòu),例如實(shí)體-關(guān)系圖(ER圖)、語義網(wǎng)(Semantic Web)。圖可以看作是知識(shí)庫中的數(shù)據(jù)模型或視圖,用來存儲(chǔ)和展示知識(shí)的結(jié)構(gòu)和關(guān)聯(lián)。

規(guī)則引擎與知識(shí)庫

對(duì)于一個(gè)規(guī)則引擎來說,它可以看作是一種特殊的知識(shí)庫,它的結(jié)構(gòu)主要由以下幾個(gè)部分組成:

  • 規(guī)則(Rule):規(guī)則引擎中的基本單元,代表一個(gè)業(yè)務(wù)邏輯或決策,一般表示為IF-THEN的形式,例如IF(年齡>18)THEN(成年)。規(guī)則通常由條件(Condition)和動(dòng)作(Action)組成,條件用來判斷是否滿足規(guī)則,動(dòng)作用來執(zhí)行規(guī)則的結(jié)果。
  • 事實(shí)(Fact):規(guī)則引擎中的輸入數(shù)據(jù),代表一個(gè)具體或抽象的事物,例如人、訂單、事件等。事實(shí)通常有一些屬性(Attribute),用來描述事實(shí)的特征,例如姓名、價(jià)格、狀態(tài)等。
  • 模式匹配器(Pattern Matcher):規(guī)則引擎中的核心組件,負(fù)責(zé)將規(guī)則和事實(shí)進(jìn)行比較,找出符合條件的規(guī)則,并將它們放入沖突集合(Conflict Set)中。
  • 沖突解決器(Conflict Resolver):規(guī)則引擎中的核心組件,負(fù)責(zé)從沖突集合中選擇一個(gè)或多個(gè)要執(zhí)行的規(guī)則,并將它們放入議程(Agenda)中。
  • 執(zhí)行器(Executor):規(guī)則引擎中的核心組件,負(fù)責(zé)從議程中取出要執(zhí)行的規(guī)則,并執(zhí)行它們的動(dòng)作,同時(shí)更新工作內(nèi)存(Working Memory)中的事實(shí)。

知識(shí)庫中的模塊和會(huì)話的含義可能因不同的系統(tǒng)而有所不同,但一般來說,模塊是指知識(shí)庫中的一個(gè)子集,包含了某個(gè)特定領(lǐng)域或主題的相關(guān)知識(shí)。會(huì)話是指用戶與知識(shí)庫之間的一次或多次交互,用于查詢、更新或探索知識(shí)。模塊和會(huì)話的作用是幫助用戶更有效地獲取和利用知識(shí),以及提高知識(shí)庫的可擴(kuò)展性和可維護(hù)性。

Drools 存儲(chǔ)規(guī)則的數(shù)據(jù)結(jié)構(gòu)

  • KieBase:一個(gè)知識(shí)庫,它包含了一組編譯后的規(guī)則、流程和類型聲明,以及相關(guān)的配置和環(huán)境信息。KieBase是線程安全的,可以在多個(gè)KieSession中共享。KieSession是一個(gè)運(yùn)行時(shí)的狀態(tài)容器,它包含了工作內(nèi)存、模式匹配器、沖突解決器和執(zhí)行器等組件,用來執(zhí)行規(guī)則和流程。KieSession是從KieBase中創(chuàng)建的,可以有多個(gè)KieSession與同一個(gè)KieBase關(guān)聯(lián)。
  • KieModule:一個(gè)包含了多個(gè)KieBase和KieSession的配置信息的容器,可以是一個(gè)jar文件或者一個(gè)文件夾。KieModule可以從本地或者遠(yuǎn)程的Maven倉庫中加載。
  • KieFileSystem:一個(gè)虛擬的文件系統(tǒng),用來存儲(chǔ)規(guī)則文件和其他資源文件,可以通過KieBuilder將其編譯為KieModule。
  • KieContainer:一個(gè)管理KieModule的容器,可以從本地或者遠(yuǎn)程的Maven倉庫中加載KieModule,并且可以動(dòng)態(tài)地更新KieModule。
  • KieSession:一個(gè)運(yùn)行時(shí)的狀態(tài)容器,用來執(zhí)行規(guī)則和流程,可以從KieBase中創(chuàng)建。KieSession有兩種類型:Stateful和Stateless。Stateful KieSession會(huì)保留工作內(nèi)存中的數(shù)據(jù),需要手動(dòng)釋放資源;Stateless KieSession不會(huì)保留工作內(nèi)存中的數(shù)據(jù),每次執(zhí)行完畢后會(huì)自動(dòng)釋放資源。

Rete 算法

Rete 是一種進(jìn)行大量模式集合和大量對(duì)象集合間比較的高效方法,通過網(wǎng)絡(luò)篩選的方法找出所有匹配各個(gè)模式的對(duì)象和規(guī)則。 其核心思想是用分離的匹配項(xiàng)構(gòu)造匹配網(wǎng)絡(luò),同時(shí)緩存中間結(jié)果。以空間換時(shí)間。規(guī)則編譯(rule compilation)和運(yùn)行時(shí)執(zhí)行(runtime execution)。

Rete算法是一種用于實(shí)現(xiàn)規(guī)則引擎的高效模式匹配算法,它可以快速地找出滿足一組規(guī)則的數(shù)據(jù)集合(zhuanlan.zhihu.com)。

原理

  1. 將規(guī)則的條件部分(LHS)轉(zhuǎn)換為一個(gè)網(wǎng)絡(luò)結(jié)構(gòu),稱為Rete網(wǎng)絡(luò),其中包含了不同類型的節(jié)點(diǎn),如alpha節(jié)點(diǎn)、beta節(jié)點(diǎn)、join節(jié)點(diǎn)和terminal節(jié)點(diǎn)。
  2. 將數(shù)據(jù)(facts)輸入到Rete網(wǎng)絡(luò)的根節(jié)點(diǎn),沿著網(wǎng)絡(luò)流動(dòng),經(jīng)過不同的節(jié)點(diǎn)進(jìn)行過濾、合并和檢測,最終到達(dá)terminal節(jié)點(diǎn),表示匹配了某個(gè)規(guī)則的結(jié)果部分(RHS)。
  3. 在每個(gè)節(jié)點(diǎn)中,維護(hù)一個(gè)內(nèi)存區(qū)域,用于存儲(chǔ)通過該節(jié)點(diǎn)的數(shù)據(jù)或數(shù)據(jù)組合,以避免重復(fù)計(jì)算和提高效率。
  4. 在每次數(shù)據(jù)或規(guī)則發(fā)生變化時(shí),更新Rete網(wǎng)絡(luò)中的內(nèi)存區(qū)域,并重新觸發(fā)匹配過程。

Rete算法的用途是提高規(guī)則引擎的性能和可擴(kuò)展性,使其能夠處理大量的數(shù)據(jù)和規(guī)則,以及動(dòng)態(tài)地適應(yīng)數(shù)據(jù)和規(guī)則的變化。

Drools規(guī)則引擎提供了一系列的API和工具來創(chuàng)建、編譯、加載和執(zhí)行規(guī)則,以及管理Rete網(wǎng)絡(luò)中的數(shù)據(jù)和狀態(tài)。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • Rete算法可以快速地找出滿足一組規(guī)則的數(shù)據(jù)集合,避免了重復(fù)計(jì)算和遍歷,提高了規(guī)則引擎的性能和可擴(kuò)展性(jianshu.com)(blog.csdn.net)。
  • Rete算法的匹配速度與規(guī)則數(shù)目無關(guān),只與數(shù)據(jù)的數(shù)量和復(fù)雜度有關(guān)(blog.csdn.net)。
  • Rete算法可以動(dòng)態(tài)地適應(yīng)數(shù)據(jù)和規(guī)則的變化,實(shí)現(xiàn)了數(shù)據(jù)驅(qū)動(dòng)的推理過程(jianshu.com)(blog.csdn.net)。

缺點(diǎn)

  • Rete算法需要維護(hù)一個(gè)復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)和大量的內(nèi)存空間,消耗了系統(tǒng)的資源(jianshu.com)(blog.csdn.net)。
  • Rete算法對(duì)數(shù)據(jù)的刪除和修改操作比較困難,需要執(zhí)行額外的查找和更新(blog.csdn.net)。
  • Rete算法對(duì)于一些簡單或者不經(jīng)常變化的規(guī)則,可能沒有必要使用,反而增加了系統(tǒng)的開銷(jianshu.com)(blog.csdn.net)。

舉例

假設(shè)我們有以下三條規(guī)則:

  1. 如果一個(gè)人的年齡大于18歲,那么他是成年人。
  2. 如果一個(gè)人的性別是男,那么他是男性。
  3. 如果一個(gè)人是成年人并且是男性,那么他可以參軍。

我們可以用Rete算法來構(gòu)建一個(gè)網(wǎng)絡(luò)來匹配這些規(guī)則。網(wǎng)絡(luò)的結(jié)構(gòu)如下:https://i.imgur.com/0fZw7Qg.png

網(wǎng)絡(luò)中有以下幾種節(jié)點(diǎn):

  1. Root node:網(wǎng)絡(luò)的入口,接收所有的數(shù)據(jù)(facts)。
  2. Object type node:根據(jù)數(shù)據(jù)的類型進(jìn)行過濾,只傳遞符合類型的數(shù)據(jù)到下一層節(jié)點(diǎn)。
  3. Alpha node:根據(jù)數(shù)據(jù)的屬性進(jìn)行過濾,只傳遞符合條件的數(shù)據(jù)到下一層節(jié)點(diǎn)。
  4. Beta node:根據(jù)兩個(gè)輸入數(shù)據(jù)的關(guān)系進(jìn)行過濾,只傳遞符合條件的數(shù)據(jù)組合(token)到下一層節(jié)點(diǎn)。
  5. Terminal node:網(wǎng)絡(luò)的出口,表示匹配了某條規(guī)則的結(jié)果。

每個(gè)節(jié)點(diǎn)都有一個(gè)內(nèi)存區(qū)域,用于存儲(chǔ)通過該節(jié)點(diǎn)的數(shù)據(jù)或數(shù)據(jù)組合。當(dāng)數(shù)據(jù)或規(guī)則發(fā)生變化時(shí),網(wǎng)絡(luò)中的內(nèi)存區(qū)域會(huì)相應(yīng)地更新,并重新觸發(fā)匹配過程。

假設(shè)我們有以下三個(gè)數(shù)據(jù):

  • {name: “Tom”, age: 20, gender: “male”}
  • {name: “Alice”, age: 17, gender: “female”}
  • {name: “Bob”, age: 19, gender: “male”}

當(dāng)這些數(shù)據(jù)輸入到網(wǎng)絡(luò)中時(shí),會(huì)經(jīng)歷以下過程:

  • 數(shù)據(jù)從root node進(jìn)入網(wǎng)絡(luò),然后根據(jù)類型被分發(fā)到對(duì)應(yīng)的object type node。因?yàn)檫@里所有的數(shù)據(jù)都是Person類型,所以都會(huì)被傳遞到Person object type node。
  • 數(shù)據(jù)從Person object type node進(jìn)入到alpha node,然后根據(jù)屬性被分發(fā)到對(duì)應(yīng)的alpha node。例如,Tom會(huì)被傳遞到age > 18和gender == "male"兩個(gè)alpha node,Alice會(huì)被傳遞到age <= 18和gender == "female"兩個(gè)alpha node,Bob會(huì)被傳遞到age > 18和gender == "male"兩個(gè)alpha node。
  • 數(shù)據(jù)從alpha node進(jìn)入到beta node,然后根據(jù)兩個(gè)輸入數(shù)據(jù)的關(guān)系被分發(fā)到對(duì)應(yīng)的beta node。例如,Tom和Bob會(huì)被傳遞到age > 18 && gender == "male"這個(gè)beta node,Alice不會(huì)被傳遞到任何beta node。
  • 數(shù)據(jù)從beta node進(jìn)入到terminal node,然后表示匹配了某條規(guī)則的結(jié)果。例如,Tom和Bob會(huì)被傳遞到rule 3這個(gè)terminal node,表示他們可以參軍。Alice不會(huì)被傳遞到任何terminal node。

這就是一個(gè)簡單的Rete算法的例子。你可以看到,Rete算法通過構(gòu)建一個(gè)網(wǎng)絡(luò)來高效地匹配大量的規(guī)則和數(shù)據(jù),并且可以動(dòng)態(tài)地適應(yīng)變化。

前向和后向鏈推理機(jī)制

前向鏈和后向鏈?zhǔn)莾煞N不同的推理機(jī)制,它們在Drools中發(fā)揮著不同的作用。

前向鏈

前向鏈?zhǔn)且环N從已知事實(shí)和規(guī)則出發(fā),推導(dǎo)出新的事實(shí)和結(jié)論的過程。它是一種數(shù)據(jù)驅(qū)動(dòng)的方法,適用于需要處理大量數(shù)據(jù)并觸發(fā)相應(yīng)規(guī)則的場景。前向鏈?zhǔn)荄rools的默認(rèn)推理機(jī)制,它通過構(gòu)建一個(gè)Rete網(wǎng)絡(luò)來高效地匹配規(guī)則和數(shù)據(jù)。

后向鏈

后向鏈?zhǔn)且环N從目標(biāo)或假設(shè)出發(fā),通過回溯一系列事實(shí)和規(guī)則來驗(yàn)證其真?zhèn)蔚倪^程(baeldung.cc)。它是一種目標(biāo)驅(qū)動(dòng)的方法,適用于需要根據(jù)特定目標(biāo)來查詢數(shù)據(jù)的場景(baeldung.cc)。后向鏈?zhǔn)荄rools從5.2.0版本開始支持的推理機(jī)制,它通過定義查詢來實(shí)現(xiàn)后向鏈。

對(duì)比

  • 適用場景:前向鏈適用于需要處理大量數(shù)據(jù)并觸發(fā)相應(yīng)規(guī)則的場景,例如欺詐檢測、風(fēng)險(xiǎn)評(píng)估、推薦系統(tǒng)等。后向鏈適用于需要根據(jù)特定目標(biāo)來查詢數(shù)據(jù)的場景,例如診斷系統(tǒng)、智能問答、規(guī)劃系統(tǒng)等。
  • 推理效率:前向鏈的推理效率取決于數(shù)據(jù)的數(shù)量和規(guī)則的復(fù)雜度,如果數(shù)據(jù)量很大或規(guī)則很多,可能會(huì)導(dǎo)致推理過程緩慢或占用大量內(nèi)存。后向鏈的推理效率取決于目標(biāo)的難度和規(guī)則的相關(guān)性,如果目標(biāo)很難或規(guī)則很少,可能會(huì)導(dǎo)致推理過程失敗或無法找到答案。
  • 推理方式:前向鏈?zhǔn)且环N自下而上的推理方式,它從已知事實(shí)出發(fā),不斷地生成新的事實(shí)和結(jié)論,直到滿足某個(gè)條件或達(dá)到某個(gè)限制。后向鏈?zhǔn)且环N自上而下的推理方式,它從目標(biāo)或假設(shè)出發(fā),不斷地尋找支持或反駁它的事實(shí)和規(guī)則,直到證明其真?zhèn)位驘o法繼續(xù)。
  • 推理結(jié)果:前向鏈的推理結(jié)果是一組滿足規(guī)則條件的事實(shí)和結(jié)論,它們可能有多個(gè)或沒有。后向鏈的推理結(jié)果是一個(gè)確定的答案,它是對(duì)目標(biāo)或假設(shè)的真假判斷,它只有一個(gè)或不存在。
    總之,前向鏈和后向鏈在Drools中分別提供了不同的推理能力,可以根據(jù)不同的業(yè)務(wù)需求來選擇合適的推理機(jī)制。

應(yīng)用場景

Drools規(guī)則引擎的應(yīng)用場景有:

  1. 業(yè)務(wù)決策:規(guī)則引擎可以用于處理復(fù)雜的業(yè)務(wù)邏輯,如信用評(píng)分、保險(xiǎn)核保、貸款審批等,根據(jù)不同的事實(shí)和規(guī)則,產(chǎn)生自動(dòng)化的決策(https://www.baeldung.com/drools)。
  2. 復(fù)雜事件處理:規(guī)則引擎可以用于處理實(shí)時(shí)的事件流,如股票交易、網(wǎng)絡(luò)監(jiān)控、傳感器數(shù)據(jù)等,根據(jù)不同的事件和規(guī)則,觸發(fā)相應(yīng)的動(dòng)作或警報(bào)(https://www.drools.org/)。
  3. 工作流程:規(guī)則引擎可以用于定義和執(zhí)行業(yè)務(wù)流程,如訂單處理、發(fā)票管理、人事審批等,根據(jù)不同的任務(wù)和規(guī)則,控制流程的走向和狀態(tài)https://www.drools.org/。
  4. 講解學(xué)習(xí)

概念和特點(diǎn)

Drools是一個(gè)基于Java的開源業(yè)務(wù)規(guī)則管理系統(tǒng)(BRMS),它提供了一個(gè)核心的業(yè)務(wù)規(guī)則引擎(BRE),可以用簡單易懂的規(guī)則語言來描述業(yè)務(wù)邏輯,并將業(yè)務(wù)邏輯和數(shù)據(jù)對(duì)象分離,實(shí)現(xiàn)業(yè)務(wù)邏輯的靈活變更和復(fù)用。

架構(gòu)和組件

Drools規(guī)則引擎由以下幾個(gè)主要組件構(gòu)成:規(guī)則文件(.drl)、知識(shí)庫(KieBase)、會(huì)話(KieSession)、工作內(nèi)存(Working Memory)、議程(Agenda)、推理機(jī)(Inference Engine)和規(guī)則流(Rule Flow)。

使用方法和示例

Drools規(guī)則引擎的使用方法主要包括以下幾個(gè)步驟:文章來源地址http://www.zghlxwxcb.cn/news/detail-475459.html

  1. 創(chuàng)建規(guī)則文件,定義規(guī)則的名稱、屬性、條件和動(dòng)作;
  2. 創(chuàng)建知識(shí)庫,加載規(guī)則文件并編譯為字節(jié)碼;
  3. 創(chuàng)建會(huì)話,從知識(shí)庫中獲取會(huì)話對(duì)象;
  4. 插入事實(shí),將業(yè)務(wù)數(shù)據(jù)插入到工作內(nèi)存中;
  5. 執(zhí)行規(guī)則,觸發(fā)推理機(jī)根據(jù)事實(shí)和規(guī)則進(jìn)行匹配和執(zhí)行;
  6. 處理結(jié)果,獲取規(guī)則執(zhí)行的結(jié)果并進(jìn)行相應(yīng)的處理。

相關(guān)文獻(xiàn)資料

  • Putting BPMN and DMN to Work: a Pediatric Surgery Case Study(https://www.drools.org/community/research.html):這篇論文介紹了如何使用Drools Workbench來建模和執(zhí)行兒科手術(shù)的業(yè)務(wù)流程和決策,展示了Drools的實(shí)際應(yīng)用效果。
  • Modeling surgical pediatric processes with BPMN and DMN(https://link.springer.com/chapter/10.1007/978-3-030-43306-2_34):這篇論文是上一篇論文的畢業(yè)論文版本,更詳細(xì)地描述了使用Drools Workbench的方法和步驟,以及遇到的挑戰(zhàn)和解決方案。
  • Semi-automatic Composition of Geospatial Web Services Using JBoss Rules:這篇論文探討了如何使用Drools來實(shí)現(xiàn)地理空間Web服務(wù)的半自動(dòng)組合,提出了一種基于規(guī)則的服務(wù)匹配和選擇算法,以及一種基于規(guī)則的服務(wù)組合框架。
  • Application Research of Business Rules Engine Management System Based on Drools:這篇論文介紹了基于Drools的業(yè)務(wù)規(guī)則引擎管理系統(tǒng)的設(shè)計(jì),包括規(guī)則文件的可視化封裝、業(yè)務(wù)對(duì)象和參數(shù)對(duì)象的抽象配置、規(guī)則生命周期的管理等。
  • Drools rules engine(https://www.ibm.com/docs/en/sig-and-i/5.2.5?topic=engine-drools-rules):這篇文檔介紹了Drools規(guī)則引擎的基本概念和架構(gòu),包括事實(shí)、工作內(nèi)存、規(guī)則、知識(shí)庫、知識(shí)會(huì)話等,以及如何使用Java配置和注解來創(chuàng)建和執(zhí)行規(guī)則。
  • Introduction to Drools(https://www.baeldung.com/drools):這篇文章也介紹了Drools規(guī)則引擎的基本概念和架構(gòu),以及如何使用Maven依賴和Spring Boot來創(chuàng)建和執(zhí)行規(guī)則。

到了這里,關(guān)于Drools 規(guī)則引擎原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 規(guī)則引擎入門-基于easy-rules

    規(guī)則引擎入門-基于easy-rules

    描述一個(gè)簡單的處理: 基于一堆現(xiàn)實(shí)情況,運(yùn)用規(guī)則引擎、經(jīng)過處理得到對(duì)應(yīng)的結(jié)果,然后再據(jù)此做后續(xù)的事情 。 fact: 事實(shí),已有的現(xiàn)實(shí)情況,即輸入信息 rules: 規(guī)則集合,由一系列規(guī)則組成,可能有不同的規(guī)則排列 rule: 規(guī)則,包含基本的判斷條件和條件符合要做的動(dòng)作。

    2024年02月07日
    瀏覽(25)
  • 規(guī)則引擎架構(gòu)-基于easy-rules

    規(guī)則引擎架構(gòu)-基于easy-rules

    描述一個(gè)簡單的處理: 基于一堆現(xiàn)實(shí)情況,運(yùn)用規(guī)則引擎、經(jīng)過處理得到對(duì)應(yīng)的結(jié)果,然后再據(jù)此做后續(xù)的事情 。 fact: 事實(shí),已有的現(xiàn)實(shí)情況,即輸入信息 rules: 規(guī)則集合,由一系列規(guī)則組成,可能有不同的規(guī)則排列 rule: 規(guī)則,包含基本的判斷條件和條件符合要做的動(dòng)作。

    2024年02月08日
    瀏覽(22)
  • 基于 XAF Blazor 的規(guī)則引擎編輯器

    基于 XAF Blazor 的規(guī)則引擎編輯器

    開源項(xiàng)目地址:https://gitee.com/lowcodexaf/rules-engine-editor 本項(xiàng)目是基于XAFBlazor的規(guī)則引擎編輯器,規(guī)則引擎采用的是微軟開源的RulesEngine RulesEngine項(xiàng)目地址:https://github.com/microsoft/RulesEngine 在軟件開發(fā)中,規(guī)則引擎扮演著至關(guān)重要的角色。它允許開發(fā)人員將業(yè)務(wù)規(guī)則從代碼中分離

    2024年03月12日
    瀏覽(51)
  • 網(wǎng)絡(luò)安全開發(fā)架構(gòu)之基于規(guī)則引擎的開發(fā)架構(gòu)

    原文合集地址如下,有需要的朋友可以關(guān)注 本文地址 合集地址 規(guī)則引擎架構(gòu)可以有多種不同的表現(xiàn)形式,以下是一些常見的表現(xiàn)形式: 中心化規(guī)則引擎 中心化規(guī)則引擎是指規(guī)則引擎的核心邏輯集中在一個(gè)中心服務(wù)器或平臺(tái)上。該服務(wù)器負(fù)責(zé)規(guī)則的管理、執(zhí)行和決策的推理

    2024年02月13日
    瀏覽(26)
  • 基于 XAF Blazor 的規(guī)則引擎編輯器 - 實(shí)戰(zhàn)篇

    基于 XAF Blazor 的規(guī)則引擎編輯器 - 實(shí)戰(zhàn)篇

    示例項(xiàng)目:https://gitee.com/easyxaf/recharge-rules-engine-sample 繼上一篇文章對(duì)規(guī)則引擎編輯器進(jìn)行了初步介紹之后,本文將通過實(shí)際應(yīng)用案例深入探討規(guī)則引擎編輯器的使用方法。編輯器的操作相對(duì)簡單,我們將重點(diǎn)放在RulesEngine的講解上。請注意,本文不是RulesEngine的入門教程,如

    2024年03月15日
    瀏覽(23)
  • 探秘Nutch:揭秘開源搜索引擎的工作原理與無限應(yīng)用可能(三)

    本系列文章簡介: ????????本系列文章將帶領(lǐng)大家深入探索 Nutch 的世界,從其 基本概念和架構(gòu)開始 ,逐步深入到 爬蟲、索引和查詢 等關(guān)鍵環(huán)節(jié)。通過了解Nutch的 工作原理 ,大家將能夠更好地理解搜索引擎背后的原理,并有能力利用Nutch構(gòu)建自己的搜索引擎。?歡迎大家

    2024年03月13日
    瀏覽(26)
  • 基于misra-c-2012規(guī)則在vscode下集成cppcheck開源工具實(shí)現(xiàn)代碼靜態(tài)檢查

    基于misra-c-2012規(guī)則在vscode下集成cppcheck開源工具實(shí)現(xiàn)代碼靜態(tài)檢查

    依賴工具: 1、cppcheck工具 2、vscode下安裝C/C++ Advanced Lint擴(kuò)展 3、python工具 雙擊后軟件自行安裝在:C:Program FilesCppcheck 添加系統(tǒng)路徑步驟 2.1、在vscode軟件中點(diǎn)擊設(shè)置按鈕,選擇“設(shè)置”選項(xiàng) 2.2、搜索“@ext:jbenden.c-cpp-flylint”然后“settings.json”中編輯 2.3、在settings.json中添加這

    2024年02月09日
    瀏覽(203)
  • 基于QuantConnect開源引擎Lean本地實(shí)現(xiàn)Fama-French五因子Python策略

    基于QuantConnect開源引擎Lean本地實(shí)現(xiàn)Fama-French五因子Python策略

    基于QuantConnect的開源Lean引擎,生成本地?cái)?shù)據(jù)源,并實(shí)現(xiàn)運(yùn)行Python語言的Fama-French五因子策略 VS2022企業(yè)版,需要安裝C#和Python組件; Anaconda3-2020.11-Windows-x86_64,這個(gè)版本對(duì)應(yīng)Python3.8,是根據(jù)Lean環(huán)境要求選擇的; git clone https://github.com/QuantConnect/Lean.git下載的Lean框架; VS2022打開

    2024年03月25日
    瀏覽(47)
  • Java動(dòng)態(tài)腳本&規(guī)則引擎、計(jì)算/表達(dá)式引擎

    在日常的Java項(xiàng)目中,我們免不了會(huì)遇到這樣的需求: 動(dòng)態(tài)地獲取并運(yùn)行自定義腳本文件,以實(shí)現(xiàn)特定的功能 對(duì)數(shù)據(jù)流執(zhí)行用戶自定義的數(shù)據(jù)有效性、公式計(jì)算、數(shù)據(jù)處理ETL(如數(shù)據(jù)截取、拼接)等不同業(yè)務(wù)邏輯 對(duì)用戶輸入的代碼或腳本文件進(jìn)行測試、運(yùn)行,確保其語法正確

    2023年04月27日
    瀏覽(18)
  • Kettle Local引擎使用記錄(一)(基于Kettle web版數(shù)據(jù)集成開源工具data-integration源碼)

    Kettle Local引擎使用記錄(一)(基于Kettle web版數(shù)據(jù)集成開源工具data-integration源碼)

    在前面對(duì) data-integration 做了一些簡單了解,從部署到應(yīng)用,今天嘗試把后端運(yùn)行作業(yè)代碼拎出來,去真正運(yùn)行一下,只有實(shí)操之后才會(huì)有更深刻的認(rèn)識(shí),有些看著簡單的功能,實(shí)操過程中會(huì)遇到很多問題,這個(gè)時(shí)候你的想法也會(huì)發(fā)生改變,所以很多時(shí)候?yàn)槭裁撮_發(fā)人員痛恨做

    2024年02月02日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包