當前位置:首頁 » 操作系統 » drools源碼下載

drools源碼下載

發布時間: 2022-11-27 16:30:54

⑴ 求Rete演算法實現代碼

Rete 在拉丁語中是 」net」 ,有網路的意思。 RETE 演算法可以分為兩部分:規則編譯( rule compilation )和運行時執行( runtime execution )。
編譯演算法描述了規則如何在 Proction Memory 中產生一個有效的辨別網路。用一個非技術性的詞來說,一個辨別網路就是用來過濾數據。方法是通過數據在網路中的傳播來過濾數據。在頂端節點將會有很多匹配的數據。當我們順著網路向下走,匹配的數據將會越來越少。在網路的最底部是終端節點( terminal nodes )。在 Dr Forgy 的 1982 年的論文中,他描述了 4 種基本節點: root , 1-input, 2-input and terminal 。下圖是 Drools 中的 RETE 節點類型:

Figure 1. Rete Nodes
根節點( RootNode )是所有的對象進入網路的入口。然後,從根節點立即進入到 ObjectTypeNode 。 ObjectTypeNode 的作用是使引擎只做它需要做的事情。例如,我們有兩個對象集: Account 和 Order 。如果規則引擎需要對每個對象都進行一個周期的評估,那會浪費很多的時間。為了提高效率,引擎將只讓匹配 object type 的對象通過到達節點。通過這種方法,如果一個應用 assert 一個新的 account ,它不會將 Order 對象傳遞到節點中。很多現代 RETE 實現都有專門的 ObjectTypeNode 。在一些情況下, ObjectTypeNode 被用散列法進一步優化。

Figure 2 . ObjectTypeNodes
ObjectTypeNode 能夠傳播到 AlphaNodes, LeftInputAdapterNodes 和 BetaNodes 。
1-input 節點通常被稱為 AlphaNode 。 AlphaNodes 被用來評估字面條件( literal conditions )。雖然, 1982 年的論文只提到了相等條件(指的字面上相等),很多 RETE 實現支持其他的操作。例如, Account.name = = 「Mr Trout」 是一個字面條件。當一條規則對於一種 object type 有多條的字面條件,這些字面條件將被鏈接在一起。這是說,如果一個應用 assert 一個 account 對象,在它能到達下一個 AlphaNode 之前,它必須先滿足第一個字面條件。在 Dr. Forgy 的論文中,他用 IntraElement conditions 來表述。下面的圖說明了 Cheese 的 AlphaNode 組合( name = = 「cheddar」 , strength = = 「strong」 ):

Figure 3. AlphaNodes
Drools 通過散列法優化了從 ObjectTypeNode 到 AlphaNode 的傳播。每次一個 AlphaNode 被加到一個 ObjectTypeNode 的時候,就以字面值( literal value )作為 key ,以 AlphaNode 作為 value 加入 HashMap 。當一個新的實例進入 ObjectTypeNode 的時候,不用傳遞到每一個 AlphaNode ,它可以直接從 HashMap 中獲得正確的 AlphaNode ,避免了不必要的字面檢查。
<!--[if !supportEmptyParas]-->

2-input 節點通常被稱為 BetaNode 。 Drools 中有兩種 BetaNode : JoinNode 和 NotNode 。 BetaNodes 被用來對 2 個對象進行對比。這兩個對象可以是同種類型,也可以是不同類型。
我們約定 BetaNodes 的 2 個輸入稱為左邊( left )和右邊( right )。一個 BetaNode 的左邊輸入通常是 a list of objects 。在 Drools 中,這是一個數組。右邊輸入是 a single object 。兩個 NotNode 可以完成『 exists 』檢查。 Drools 通過將索引應用在 BetaNodes 上擴展了 RETE 演算法。下圖展示了一個 JoinNode 的使用:

Figure 4 . JoinNode

注意到圖中的左邊輸入用到了一個 LeftInputAdapterNode ,這個節點的作用是將一個 single Object 轉化為一個單對象數組( single Object Tuple ),傳播到 JoinNode 節點。因為我們上面提到過左邊輸入通常是 a list of objects 。
<!--[if !supportEmptyParas]-->
Terminal nodes 被用來表明一條規則已經匹配了它的所有條件( conditions )。 在這點,我們說這條規則有了一個完全匹配( full match )。在一些情況下,一條帶有「或」條件的規則可以有超過一個的 terminal node 。
Drools 通過節點的共享來提高規則引擎的性能。因為很多的規則可能存在部分相同的模式,節點的共享允許我們對內存中的節點數量進行壓縮,以提供遍歷節點的過程。下面的兩個規則就共享了部分節點:

這里我們先不探討這兩條 rule 到的是什麼意思,單從一個直觀的感覺,這兩條 rule 在它們的 LHS 中基本都是一樣的,只是最後的 favouriteCheese ,一條規則是等於 $cheddar ,而另一條規則是不等於 $cheddar 。下面是這兩條規則的節點圖:

Figure 5 . Node Sharing
從圖上可以看到,編譯後的 RETE 網路中, AlphaNode 是共享的,而 BetaNode 不是共享的。上面說的相等和不相等就體現在 BetaNode 的不同。然後這兩條規則有各自的 Terminal Node 。
<!--[if !supportEmptyParas]-->
RETE 演算法的第二個部分是運行時( runtime )。當一個應用 assert 一個對象,引擎將數據傳遞到 root node 。從那裡,它進入 ObjectTypeNode 並 沿著網路向下傳播。當數據匹配一個節點的條件,節點就將它記錄到相應的內存中。這樣做的原因有以下幾點:主要的原因是可以帶來更快的性能。雖然記住完全或 部分匹配的對象需要內存,它提供了速度和可伸縮性的特點。當一條規則的所有條件都滿足,這就是完全匹配。而只有部分條件滿足,就是部分匹配。(我覺得引擎 在每個節點都有其對應的內存來儲存滿足該節點條件的對象,這就造成了如果一個對象是完全匹配,那這個對象就會在每個節點的對應內存中都存有其映象。)
2. Leaps 演算法:
Proction systems 的 Leaps 演算法使用了一種「 lazy 」方法來評估條件( conditions )。一種 Leaps 演算法的修改版本的實現,作為 Drools v3 的一部分,嘗試結合 Leaps 和 RETE 方法的最好的特點來處理 Working Memory 中的 facts 。
古典的 Leaps 方法將所有的 asserted 的 facts ,按照其被 asserted 在 Working Memory 中的順序( FIFO ),放在主堆棧中。它一個個的檢查 facts ,通過迭代匹配 data type 的 facts 集合來找出每一個相關規則的匹配。當一個匹配的數據被發現時,系統記住此時的迭代位置以備待會的繼續迭代,並且激發規則結果( consequence )。當結果( consequence )執行完成以後,系統就會繼續處理處於主堆棧頂部的 fact 。如此反復。

rule
when
Cheese( $chedddar : name == " cheddar " )
$person : Person( favouriteCheese != $cheddar )
then
System.out.println( $person.getName() + " does likes cheddar " );
end

rule
when
Cheese( $chedddar : name == " cheddar " )
$person : Person( favouriteCheese == $cheddar )
then
System.out.println( $person.getName() + " likes cheddar " );
end

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/icefishchwd/archive/2007/01/22/1489668.aspx

⑵ drools 怎麼動態配置規則

JBoss Drools的可視化規則設計工具包在Drools 4.0的時候叫drools-jbrms。
drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署為例。

第1步
按照JBoss官方提供的文檔處理
刪除war包中的el-api.jar
刪除Tomcat的lib目錄下的jsf-api.jar和jsf-impl.jar(本來不存在就不用管了)
將下載後的jboss_jsf_libs.zip解壓到Tomcat的lib目錄下
第2步
啟動Tomcat。drools-jbrms會在Tomcat的bin目錄下新建repository目錄(包括很多子目錄),同時會報無法啟動的異常。異常信息為Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,這里我是在Tomcat/bin目錄下用startup.bat啟動的,如果不是這種方式repository的位置可能有所不同)

第3步
將本文提供的custom_nodetypes.xml覆蓋Tomcat下的bin/repository/repository/nodetypes的同名文件。

第4步
重新啟動

原因:drools-jbrms包含的某些功能在Tomcat下有問題,生成custom_nodetypes.xml時沒有生成文件內容,所以報錯。從網上查詢,最遲2007年就有人報這個問題了。看來JBoss的對於非JBoss應用伺服器的兼容問題考慮不多。

⑶ eclipse中新建了一個drools項目,將lib導入了,但始終報jar未找到

貼一下problems裡面的錯誤

⑷ 《Java8實戰》epub下載在線閱讀,求百度網盤雲資源

《Java 8實戰》(厄馬(Raoul-Gabriel Urma))電子書網盤下載免費在線閱讀

鏈接:https://pan..com/s/1Rm1x0GetEFlztgWyPzykgg

提取碼:1234

書名:Java 8實戰

作者:厄馬(Raoul-Gabriel Urma)

譯者:陸明剛

豆瓣評分:9.2

出版社:人民郵電出版社

出版年份:2016-4-1

頁數:349

內容簡介:

本書全面介紹了Java 8 這個里程碑版本的新特性,包括Lambdas、流和函數式編程。有了函數式的編程特性,可以讓代碼更簡潔,同時也能自動化地利用多核硬體。全書分四個部分:基礎知識、函數式數據處理、高效Java 8 編程和超越Java 8,清晰明了地向讀者展現了一幅Java 與時俱進的現代化畫卷。

作者簡介:

作者簡介:

Raoul-Gabriel Urma

劍橋大學計算機科學博士,軟體工程師,演講者,培訓師,Cambridge Coding Academy聯合創始人、CEO。曾與谷歌、eBay、甲骨文和高盛集團等大公司合作,並參與過多個創業項目。撰寫過十餘篇經同行審閱的技術文章,並在國際會議上發表過40多篇演講。

Mario Fusco

Red Hat高級軟體工程師,負責JBoss規則引擎Drools的核心開發。擁有豐富的Java開發經驗,曾領導媒體公司、金融部門等多個行業的企業級項目開發。對函數式編程和領域特定語言等有濃厚興趣,並創建了開放源碼庫lambdaj。

Alan Mycroft

劍橋大學計算機實驗室計算學教授,劍橋大學羅賓遜學院研究員,歐洲編程語言和系統協會聯合創始人,樹莓派基金會聯合創始人和理事。發表過大約100篇研究論文,指導過20多篇博士論文。他的研究主要關注編程語言及其語義、優化和實施。他與業界聯系緊密,曾於學術休假期間在AT&T實驗室和英特爾工作,還創立了Codemist公司,該公司設計了最初的ARM C編譯器Norcroft。

⑸ 求打開*.drl文件的工具

Drools開發小組近日宣布發布Drools 2.5 正式版。

Drools 是一個建立在Rete 模式匹配運演算法則基礎之上的准則執行引擎。Drools 的開發團隊已經採用Rete這個運演算法則,所以Drools 能夠使用面向對象的程序設計語言,像Java、Python 以及Groovy。2005年12月,Drools 項目以及該項目的主要負責人Mark Proctor 都加入了JBOSS。

開發小組宣布,該2.5 版本將是最後一個2.x,下一個將推出3.0。

下載地址:http://docs.codehaus.org/display/DROOLS/2006/03/01/Drools+2.5+released

⑹ drools6.1的問題,kie workbench 安裝好了,但是不知道怎麼使用裡面的guvnor

你好!這是你下載的這個軟體不全面導致的。建議重新到其他正規大網站重新下載安裝試試。

⑺ drools引入eclipse後報錯 Could not find default Drools runtime

先不要理它,你配好後,右鍵你的工程,Bulid Path-->Configure Build Path-->Drools選擇你配置的Drools Runtime,記得別忘記看看你的那些引用的Jar是否已經包含了,都沒問題了,重新clean一下就好了。

⑻ 如何部署JBoss Drools的可視化規則設計工具包

JBoss Drools的可視化規則設計工具包在Drools 4.0的時候叫drools-jbrms。
drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署為例。

第1步
按照JBoss官方提供的文檔處理
刪除war包中的el-api.jar
刪除Tomcat的lib目錄下的jsf-api.jar和jsf-impl.jar(本來不存在就不用管了)
將下載後的jboss_jsf_libs.zip解壓到Tomcat的lib目錄下
第2步
啟動Tomcat。drools-jbrms會在Tomcat的bin目錄下新建repository目錄(包括很多子目錄),同時會報無法啟動的異常。異常信息為Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,這里我是在Tomcat/bin目錄下用startup.bat啟動的,如果不是這種方式repository的位置可能有所不同)

第3步
將本文提供的custom_nodetypes.xml覆蓋Tomcat下的bin/repository/repository/nodetypes的同名文件。

第4步
重新啟動

原因:drools-jbrms包含的某些功能在Tomcat下有問題,生成custom_nodetypes.xml時沒有生成文件內容,所以報錯。從網上查詢,最遲2007年就有人報這個問題了。看來JBoss的對於非JBoss應用伺服器的兼容問題考慮不多。

註:本文提供的custom_nodetypes.xml為drools-jbrms在JBoss應用伺服器部署時生成的,內容如下:
<?xml version="1.0" encoding="UTF-8"?><nodeTypes xmlns:drools=".jboss.org/drools-repository/1.0" xmlns:fn=".w3.org/2005/xpath-functions" xmlns:fn_old=".w3.org/2004/10/xpath-functions" xmlns:jcr=".jcp.org/jcr/1.0" xmlns:mix=".jcp.org/jcr/mix/1.0" xmlns:nt=".jcp.org/jcr/nt/1.0" xmlns:rep="internal" xmlns:sv=".jcp.org/jcr/sv/1.0" xmlns:xs=".w3.org/2001/XMLSchema" xmlns:xml=".w3.org/XML/1998/namespace"><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:categoryNodeType" primaryItemName=""><supertypes><supertype>mix:referenceable</supertype><supertype>nt:hierarchyNode</supertype></supertypes><childNodeDefinition autoCreated="false" defaultPrimaryType="drools:categoryNodeType" mandatory="false" name="*" onParentVersion="COPY" protected="false" sameNameSiblings="false"><requiredPrimaryTypes><requiredPrimaryType>drools:categoryNodeType</requiredPrimaryType></requiredPrimaryTypes></childNodeDefinition></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:packageNodeType" primaryItemName=""><supertypes><supertype>drools:versionableNodeType</supertype><supertype>nt:folder</supertype></supertypes><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="*" onParentVersion="COPY" protected="false" requiredType="undefined"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:compiledPackage" onParentVersion="COPY" protected="false" requiredType="Binary"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:externalURI" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:header" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="true" mandatory="true" multiple="false" name="drools:archive" onParentVersion="COPY" protected="false" requiredType="Boolean"><defaultValues><defaultValue>false</defaultValue></defaultValues></propertyDefinition><childNodeDefinition autoCreated="false" defaultPrimaryType="" mandatory="false" name="*" onParentVersion="IGNORE" protected="false" sameNameSiblings="false"><requiredPrimaryTypes><requiredPrimaryType>drools:versionableAssetFolder</requiredPrimaryType></requiredPrimaryTypes></childNodeDefinition></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:assetNodeType" primaryItemName=""><supertypes><supertype>drools:versionableNodeType</supertype></supertypes><propertyDefinition autoCreated="false" mandatory="false" multiple="true" name="drools:categoryReference" onParentVersion="COPY" protected="false" requiredType="Reference"><valueConstraints><valueConstraint>drools:categoryNodeType</valueConstraint></valueConstraints></propertyDefinition><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:packageName" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:dateExpired" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:dateEffective" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="*" onParentVersion="COPY" protected="false" requiredType="undefined"/><propertyDefinition autoCreated="true" mandatory="true" multiple="false" name="drools:archive" onParentVersion="COPY" protected="false" requiredType="Boolean"><defaultValues><defaultValue>false</defaultValue></defaultValues></propertyDefinition><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:attachmentFileName" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:binaryContent" onParentVersion="COPY" protected="false" requiredType="Binary"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:content" onParentVersion="COPY" protected="false" requiredType="String"/></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:versionableAssetFolder" primaryItemName=""><supertypes><supertype>mix:versionable</supertype><supertype>nt:folder</supertype></supertypes><childNodeDefinition autoCreated="false" defaultPrimaryType="" mandatory="false" name="*" onParentVersion="IGNORE" protected="false" sameNameSiblings="false"><requiredPrimaryTypes><requiredPrimaryType>drools:versionableNodeType</requiredPrimaryType></requiredPrimaryTypes></childNodeDefinition></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:versionableNodeType" primaryItemName=""><supertypes><supertype>mix:versionable</supertype><supertype>nt:hierarchyNode</supertype></supertypes><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:stateReference" onParentVersion="COPY" protected="false" requiredType="Reference"><valueConstraints><valueConstraint>drools:stateNodeType</valueConstraint></valueConstraints></propertyDefinition><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:checkinComment" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:createdDate" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:versionNumber" onParentVersion="COPY" protected="false" requiredType="Long"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:title" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:lastModified" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:lastContributor" onParentVersion="COPY" protected="false" requiredType="String"><defaultValues><defaultValue/></defaultValues></propertyDefinition><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:creator" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:type" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:source" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:subject" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:relation" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:rights" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:coverage" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:publisher" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:description" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:format" onParentVersion="COPY" protected="false" requiredType="String"/></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:stateNodeType" primaryItemName=""><supertypes><supertype>mix:referenceable</supertype><supertype>nt:hierarchyNode</supertype></supertypes></nodeType></nodeTypes>

熱點內容
伺服器硬體損壞怎麼辦 發布:2023-02-09 04:20:00 瀏覽:900
哪裡有裝密碼鎖 發布:2023-02-09 04:18:09 瀏覽:882
騰訊雲伺服器一直閃退 發布:2023-02-09 04:18:07 瀏覽:771
linuxcpu查看命令 發布:2023-02-09 04:16:50 瀏覽:326
華盛國際的密碼是多少 發布:2023-02-09 04:07:50 瀏覽:600
補丁和腳本 發布:2023-02-09 04:04:46 瀏覽:447
安卓投屏大師pc端在哪裡下載 發布:2023-02-09 04:04:45 瀏覽:794
安卓投屏帕拉梅拉怎麼設置 發布:2023-02-09 04:02:48 瀏覽:220
java基本類型存儲 發布:2023-02-09 04:02:41 瀏覽:62
安卓微信在哪裡打開 發布:2023-02-09 03:49:35 瀏覽:216