日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于drools_Drools:基于PHREAK堆栈的评估和向后链接

發(fā)布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于drools_Drools:基于PHREAK堆栈的评估和向后链接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基于drools

前一段時間,我寫了一篇有關(guān)我們新算法的博客: http : //blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html

有人問我有關(guān)新的基于堆棧的系統(tǒng)以及向后鏈接如何工作的信息。 我在電子郵件中回復(fù)了他們,但我認為其他人可能會覺得有用,因此將其粘貼在下面。 它是從我的大腦直接寫到頁面上的,因此在某些地方有點粗糙。 但我希望有人覺得它有用,無論如何。

-

評估規(guī)則時,它會從根到尖端進行評估。

對于每個節(jié)點,它評估所有可能的聯(lián)接并生成一個元組集。 然后,該子元組集將傳遞到子節(jié)點。 傳入的元組集稱為srcTupleSet(用于變量名),然后將所有子級放入trgTupleSet中。 trgTupleSet傳遞到子節(jié)點,在此它成為srcTupleSet。

第245行顯示了此循環(huán): https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java#L245

srcTuples = trgTuples; // previous target, is now the source

輸入節(jié)點后,它具有許多評估該節(jié)點所需的變量。 節(jié)點ID,節(jié)點內(nèi)存,段內(nèi)存,srcTupleSet,trgTupleSet。 通過創(chuàng)建引用這些值的StackEntry,可以暫停和恢復(fù)任何節(jié)點(在稍后的時間進行評估)。 StackEntry放置在堆棧上。 這是StackEntry類: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/StackEntry.java

出于兩個原因需要這樣做,即反向鏈接和子網(wǎng)。 向后鏈接是通過查詢節(jié)點完成的。

當傳播到達查詢節(jié)點時,它需要暫停對當前規(guī)則的評估-因此它創(chuàng)建了StackEntry并將其放置在堆棧中。

第459行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java#L459

查詢只是沒有RHS的規(guī)則,沒有后果。 它收集到達終端節(jié)點的所有結(jié)果,并將它們返回給調(diào)用方。 查詢節(jié)點允許規(guī)則通過傳入?yún)?shù)來調(diào)用查詢。 通過插入DroolsQuery對象(與根模式匹配并觸發(fā)傳播)來完成查詢的調(diào)用:

參見第67行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/PhreakQueryNode.java

LeftInputAdapterNode.doInsertObject(handle, pCtx, lian, wm, lm, false, dquery.isOpen());

像序言一樣,參數(shù)可以綁定或不綁定。 綁定參數(shù)是一個固定變量,而未綁定參數(shù)是一個固定變量。 在實現(xiàn)方面,我們不對未綁定的參數(shù)施加約束。 這允許經(jīng)典的序言“傳遞閉包”類型查詢。 盡管規(guī)則可以調(diào)用查詢,但是查詢也可以調(diào)用查詢(我們沒有制表法來檢測無限循環(huán))。

query isContainedIn( String x, String y )Location( x, y; )or( Location( z, y; ) and isContainedIn( x, z; ) ) end

注意drools支持模式中的位置參數(shù)和空位參數(shù)。 這是通過將所有位置映射到插槽來完成的。

可以在以下位置找到有關(guān)React式和非React式傳遞閉包的上述查詢的逐步說明, 網(wǎng)址為 : https : //www.youtube.com/watch?v=fCjIRVSRFvA

對于評估查詢,當trgTulupleSet到達終端節(jié)點時,它將迭代并將每個元組添加到“收集器”中。

參見第65行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/PhreakQueryTerminalNode.java#L65

收集器創(chuàng)建一個特殊的子元組,可以將其添加到調(diào)用父級。

參見第343行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/reteoo/QueryElementNode.java#L343

查詢完成評估后,它將返回。 然后,重新調(diào)整過程允許執(zhí)行程序訪問堆棧,并在其中彈出StackEntry并恢復(fù)評估-但是現(xiàn)在查詢結(jié)果可用。

參見第166和173行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java

可以React性和非React性地調(diào)用查詢。 非React式意味著沒有剩余內(nèi)存,查詢也沒有打開。 React地意味著有剩余的內(nèi)存,查詢保持打開狀態(tài)。 React式查詢是完全增量式的,并且支持更新和刪除:

參見第143和169行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/PhreakQueryNode.java#L143

我們用于元組和“嵌套”(查詢結(jié)果)元組的數(shù)據(jù)結(jié)構(gòu)高效,“無復(fù)制”和“無搜索”-都是雙鏈表。 這對于使增量查詢有效很有必要。

子網(wǎng)使用類似的技術(shù)。 在到達子網(wǎng)的點上,外部規(guī)則被掛起(放在堆棧上),并創(chuàng)建內(nèi)部網(wǎng)絡(luò)評估。

參見593和604行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java

子網(wǎng)完成后,外部規(guī)則將恢復(fù)并將結(jié)果放入外部子節(jié)點的正確輸入中:

第662行: https : //github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java#L662

如前所述,當前我們提供惰性規(guī)則評估,但不提供增量規(guī)則評估。 一旦開始規(guī)則評估,就會生成所有元組。 但是,由于堆棧條目可以在任何節(jié)點中暫停和恢復(fù),因此它也可以用于提供增量規(guī)則評估-盡管我們現(xiàn)在不這樣做。 實際上,您在正確的輸入上“獲取”了X個對象-可以是1或5或25或100。該數(shù)量允許您調(diào)整延遲與吞吐量。 進行取整后,如果仍然有未評估的正確輸入,則創(chuàng)建一個StackEntry,在當前傳播完成后,強制對該節(jié)點進行重新評估。

參考: Drools: Drools&jBPM博客上來自JCG合作伙伴 Geoffrey De Smet的基于PHREAK堆棧的評估和向后鏈接 。

翻譯自: https://www.javacodegeeks.com/2014/01/drools-phreak-stack-based-evaluations-and-backward-chaining.html

基于drools

總結(jié)

以上是生活随笔為你收集整理的基于drools_Drools:基于PHREAK堆栈的评估和向后链接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。