漫話規則引擎 1 推理機和規則引擎

2021-09-08 23:50:24 字數 2129 閱讀 3191

本文最新版已更新至:

假設這樣乙個場景:

某公司生產兩種型號的裝置,m,兩種型號都支援四種功能f,但開放哪些功能取決於出廠設定。在出廠之前需要對裝置進行多方面的測試,目前定義了五種測試t,要執行哪些測試取決於型號。對每台裝置的每種測試都有乙個最晚執行日期d的要求,d取決於裝置要執行的測試項。

由於業務需要,每種型號的裝置要進行哪些測試、d與要執行的測試項的關係會經常變化。比如其中的一組規則是:

測試項規則:

if m=m1, exec(t1,t2,t5)

if m=m2 and m.hasfunction(f1), exec(t2,t3)

if m=m2 and m.hasfunction(f2), exec(t4,t5)

if m=m2 and m.hasfunction(f3), exec(t3,t4)

if m=m2 and m.hasfunction(f4), exec(t1,t3)

測試時間規則(其中d表示天數,如3表示最晚執行日期為3天後)按照優先順序從高到底如下:

if m.todo(t1), d=3

if m.todo(t2),d=7

if m.todo(t3),d=10

if m.todo(t4),d=12

if m.todo(t5),d=14

要實現的功能是,根據給定的規則和一組裝置,得出每個裝置的測試項和測試時間。

即使不考慮規則的變化,要實現這樣的業務規則也是非常繁瑣和乏味的。而為了避免頻繁的部署,規則必須能夠以某種形式進行定義和配置,不能硬編碼實現。(當然,如果你採用osgi架構,定期更新規則的bundle我也無話可說)。

上面例子中的問題是典型的推理問題:根據已有的知識,分析實際情況並給出結論。如果由程式來處理推理過程,那麼這個程式就叫做推理機/推理引擎(inference engine)。推理機是專家系統(專家系統是人工智慧的乙個分支)的核心模組。

推理引擎根據知識表示的不同採取的控制策略也是不同的,常見的型別包括基於神經網路、基於案例和基於規則的推理機。其中,基於規則的推理機易於理解、易於獲取、易於管理,被廣泛採用。這種推理引擎被稱為「規則引擎」。

在規則引擎中,將知識表達為規則(rules),要分析的情況定義為事實(facts)。二者在記憶體中的儲存分別稱為production memory和working memory,如下圖:

rules和facts是規則引擎接受的輸入引數,而規則引擎本身包括兩個組成部分:pattern matcher和agenda。pattern matcher根據facts找到匹配的rules,agenda管理patternmatcher挑選出來的規則的執行次序。在外圍,還會有乙個執行引擎(execution engine)負責根據agenda輸出的rules執行具體的操作。

其中pattern matcher是規則引擎負責推理的核心。和人類的思維相對應,規則引擎中也存在兩種推理方式:正向推理(forward-chaining)和反向推理(backward-chaining)。

正向推理也叫演繹法,由事實驅動,從 乙個初始的事實出發,不斷地應用規則得出結論。首先在候選佇列中選擇一條規則作為啟用規則進行推理,記錄其結論作為下一步推理時的證據。如此重複這個過程,直到再無可用規則可被選用或者求得了所要求的解為止。

反向推理也叫歸納法,由目標驅動,首先提出某個假設,然後尋找支援該假設的證據,若所需的證據都能找到,說明原假設是正確的;若無論如何都找不到所需要的證據,則說明原假設不成立,此時需要另做新的假設。

規則引擎是一種相對簡單的推理機,可以將規則引擎作為一種元件潛入到應用系統中,從而將業務決策從應用程式**中分離出來,並使用預定義的規則語言編寫業務決策。使用規則引擎帶來的好處是:

1. 避免業務規則變化帶來的重新編譯和重新部署的問題;

2. 使用宣告性程式設計方法,大大提高業務規則**的可讀性;

3. 開發人員不需要過多關注業務邏輯(根據各種情況判斷發生了什麼事情),可以專注於應用邏輯(在發生了什麼事情時進行什麼樣的處理)

規則推理引擎簡介

規則推理引擎也叫產生式系統,是由基於規則的專家系統發展而來。基於規則的專家系統是人工智慧領域中專家系統的 乙個分支,它模擬人類的推理方式,使用試探性的方法進行推理,並使用人類能理解的術語解釋和證明它的推理結論。基於規則的專家系統,使用的知識包括 if 條件 then 動作 基於規則的專家系統主要包括...

mysql 規則引擎 為什麼使用規則引擎?

一天,朱斯參加了一場code review研討會。會上的一群人正在討論著如何對祖傳 進行變更,大家你一言,我一語,場面十分熱鬧!突然,只見人群中的乙個人滿面愁容,說道 昨天在專案中看到下面這樣一段 分支太多了!維護起來很煩啊!if day 周一 else if day 周二 else if day ...

規則引擎pyke

1.官網 2.安裝第三方包 pyenv global anaconda3 4.2.0 pip install htmltemplate 3.原始碼安裝pyke pyenv global anaconda3 4.2.0 cd pyke3 1.1.1 python setup.py build pyth...