2012-09-26 34 views
2

我正在評估業務規則引擎。我用Drools玩了一下,但看起來,我寧願尋找一個查詢驅動的反向鏈接系統。是否可以使用相同的規則回答多個問題?

所以更具體,讓我們看看一個簡單的業務規則是這樣的:

when 
    (amount > 1000 AND amount < 2000 AND currency == USD) 
    OR 
    (amount > 750 AND amount < 1500 AND currency == EUR) 
then 
    approve loan 

是否有可能只使用這條規則和「問」 Drools的回答這些問題:

  1. 如果貨幣是美元,獲得批准貸款的條件是什麼? 我會期待這樣的結果:(amount > 1000) AND (amount < 2000)

  2. 是否有可能獲得2000歐元貸款? (預期回答:false)

  3. 如果不可能,那麼拒絕的主要原因是什麼? (預期的答案:amount >= 1500

Drools的是能夠回答這樣那樣的只使用一個規則的問題嗎? 從理論上講,這些信息都存儲在規則中,但我不知道如何從中「提取」。

如果Drools不是這個場景中最好的規則引擎,那麼是否有任何引擎提供這種功能?

回答

0

Drools與許多其他規則引擎一樣,使用RETE算法來決定運行哪些結果,所有規則的何時必須與要運行的部分相匹配。

對於你的問題1和2: 如果你想多個「答案」,你可以使用多個規則,或使用累積函數。

對於3: 您不知道規則未被調用的原因,您需要將拒絕情況表示爲單獨的規則,並在拒絕情況的特定條件滿足時觸發。

0

在RETE發動機生產包含多個條件,以便基本上我們可以定義規則爲:

P1 = C1^C2^C3,其中C1 =量> 1000; C2 =金額< 2000; C3 =貨幣==美元

我還建議您將您的OR條件分爲兩個不同的製作。 P2 = C4^C5^C6 其中C4 =數量> 750; C5 =金額< 1500; C6 =貨幣== EUR;

(請注意,在生產系統中,你真的沒有OR,其中一些甚至不讓你寫或因tracability條件要求)

並回答您的問題:

  1. 您只需查詢共享C3的所有作品即可作爲條件的一部分。
  2. 用你的輸入執行你的規則,你會得到結果
  3. 查詢你的沒有令牌的beta回憶,並且在網絡的相應alpha存儲器中傳遞C5的判別條件。

並非所有的規則引擎都允許您針對beta內存和令牌進行查詢。檢查Drools是否允許您檢索Alpha,Beta內存和存儲的令牌。基本上你需要遍歷內部的RETE圖。

相關問題