Rules Engine 規則引擎

更新於 2021/10/04閱讀時間約 4 分鐘
圖片來自 Tim Mossholder
最近在某些機緣下認識了規則引擎,以華文介紹規則引擎的文章好像不多,這邊試著粗淺的記下我對規則引擎的認識。

什麼是規則引擎?

在程式的世界,規則引擎通常以套件的方式存在,在系統內藉由規引擎套件的引入,可以利用規則引擎提供的特定方法來定義一系列的商業邏輯,包括每個商業邏輯被觸發的條件,以及被觸發後的行為。
一個最典型的例子:評分機制,九十分以上的為甲級,享有某些特殊優惠;七十至九十分的為乙級,享有略低於甲級的優惠;七十分以下的為丙級,不享有優惠。生活中常見的會員分級、銀行的信用評分都是類似的評分機制的實際應用。

和 if / else、switch / case 有什麼不同?

上面的例子看起來好像用原生的 if / else 或 switch / case 就可以做到同樣的事?然而在某些不同的場景上,用 if / else 是不適合的。
首先是關注的焦點不同,不論是 if / else 或 switch / case,他們的語法都專為判斷程式運作邏輯而設計,並不適合拿來做商業邏輯的判斷,因為商業邏輯的規則往往更複雜;規則引擎的關注焦點就是商業邏輯而非程式邏輯。硬要用 if / else 來做商業邏輯很有可能長出多層巢狀的 if / else,並且在商業邏輯上,隨著規則的複雜化,系統要做的可能不只是單純的判斷,而是推斷,根據一系列的指標數據由系統協助推斷後續的動作,以銀行系統為例,根據客戶的各項指標(年齡、職業、性別、家庭、地區、資產、收入、信用、健康)來推斷他的風險值,並進一步決定他的借貸利率,像這樣的規則引擎的應用被稱為專家系統,專家系統的推斷可以用演算法或是人工智慧的方式實現。
第二點,規則引擎提供更靈活的參數調整方式,在 if / else 裡面的判斷條件都是死的,難以被開發者以外的營運人員變更,或是必須由開發者手動刻出參數調整的程式、介面,而規則引擎在這方面都提供更靈活的調整方法,可能是用讀入特定格式的檔案(csv 或 xls 或 json)來實現規則的設定,並且這些格式同時是人機可讀的,讓營運人員更簡易的自行調控。第二種做法就是由規則引擎提供程式介面,由開發人員實現操作介面給營運人員使用,這當然有一定的複雜度,需要花費心力去讀規則引擎的文件,但以一個商業用系統的長遠來看,用規則引擎來實現應該是可以有更低的長期維運成本。

規則引擎的應用

  • 金融信用評分系統
  • 保險風險評估系統
  • 交易行為異常監控系統
  • 會員分級系統
  • 交易優惠系統
以上這些系統的共同特色:參數多、規則複雜。

規則引擎的套件

規則引擎在 Java 生態系內是最多的,大概是因為上面的應用大多是大型系統,而大型系統也都是 Java 的世界的緣故吧!不過其實其它語言也都有規則引擎套件,去 PyPI、npm、Crates.io、RubyGems 等站台搜尋 rules engine 應該都會有相對應的套件,不過成熟度、維護程度各異,服用前需要評估。

規則引擎的實做分纇

前面提到過,規則引擎在各語言都有,並且是以第三方套件的形式提供,但以每個規則引擎套件的實做方式來說,有兩大種分別:是否以 Rete 演算法為基礎。
較簡單的規則引擎套件並不以 Rete 演算法實現,而是用作者自己的做法實現,通常這種規則引擎不會具有自行推斷的能力,而只是實現了一層較適合商業邏輯的設定與撰寫的程式介面供我們使用,較好上手功能也較少,較適合簡單的商業場景。
第二種規則引擎套件即以 Rete 演算法為基礎實現,關於 Rete 演算法,可以簡單的理解為用於比對多個事實(條件)與多個規則,並做出最終推斷的一種演算法,這種規則引擎適用於更複雜的場景。

商業化的產品

商業化的產品因為是要賣錢錢的,不會只有 rules engine,而是再加上一些人機介面輔助等等的週邊元件包裝成完整的產品。

參考資料

為什麼會看到廣告
avatar-img
14會員
64內容數
Where I go and what I get.
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Leon的沙龍 的其他內容
介紹 KeePass 這個簡單安全輕巧的密碼管理器,以及它的兄弟們。
你會寫 Jira 的 user story 嗎?我不會,所以我用自己的方式來理解與制定 story 的用法。
Electron 是把 web 封裝並發布成桌面 app 的框架,同時也提供了存取本機的 API,但卻帶來難以使用傳統自動測試工具的問題,而透過 Electron 的測試框架 Spectron,讓我們得以操控 app 內的 UI 元件,進而達成自動化測試的目的。
古早的年代想在網頁內埋 Java 還有 Java applet 可以用,在 Java applet 式微後,找來找去比較可以的辦法大概就是編譯成 WebAssembly 了吧! 想要把 Java 編譯成 WebAssembly,有下面三個工具可以選用
介紹 KeePass 這個簡單安全輕巧的密碼管理器,以及它的兄弟們。
你會寫 Jira 的 user story 嗎?我不會,所以我用自己的方式來理解與制定 story 的用法。
Electron 是把 web 封裝並發布成桌面 app 的框架,同時也提供了存取本機的 API,但卻帶來難以使用傳統自動測試工具的問題,而透過 Electron 的測試框架 Spectron,讓我們得以操控 app 內的 UI 元件,進而達成自動化測試的目的。
古早的年代想在網頁內埋 Java 還有 Java applet 可以用,在 Java applet 式微後,找來找去比較可以的辦法大概就是編譯成 WebAssembly 了吧! 想要把 Java 編譯成 WebAssembly,有下面三個工具可以選用
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
在程式語言裡,對應到多重選擇路徑判斷的語法, 最通俗也最常見的就是if ... else ... 語法。 今天,我們將從最基本的 若A條件成立 則...否則 ... 的 if ... else ...開始講起, 搭配幾個範例做說明,最後以一個經典的閏年判定最為結尾的Demo
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
在人工智能的發展歷程中,早期的研究主要側重於將解決問題的規則輸入計算機,試圖通過啟蒙運動理性的思路模擬人類的智能行為。然而,這條路逐漸變得艱難,因為規則過於繁多,無法應對複雜的情境和語境。在這個背景下,一些科學家轉向了神經網絡算法,試圖模擬人腦的感知能力。
※ 條件判斷語法 決策中需要處理分歧的狀況,就會用到「if」、「else if」、「else」。 ※ 語法結構: 條件式使用小括號(),裡面放判斷式。 要執行的程式碼放在大括號{}裡。 條件式只會有 true 或 false 兩種結果。 ※ 常用的比較運算子: > 大於 < 小於
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
什麼是「Rule-based bidding」? 基於規則的競價(Rule-Based Bidding),是一種以RoAS為目標,利用機器學習演算法將一系列影響效果的參數(時間、受眾群體、展示位置等)考慮在內,並依據大規模數據幫助賣家更準確地出價的功能。 為什麼Rule-based biddi
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
IF,Switch,三元運算子語法說明 IF條件選擇結構說明 IF為布林條件,當()內條件式滿足True執行if區塊的程式碼,不滿足則執行else區塊的程式碼,若無else也行。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
在程式語言裡,對應到多重選擇路徑判斷的語法, 最通俗也最常見的就是if ... else ... 語法。 今天,我們將從最基本的 若A條件成立 則...否則 ... 的 if ... else ...開始講起, 搭配幾個範例做說明,最後以一個經典的閏年判定最為結尾的Demo
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
在人工智能的發展歷程中,早期的研究主要側重於將解決問題的規則輸入計算機,試圖通過啟蒙運動理性的思路模擬人類的智能行為。然而,這條路逐漸變得艱難,因為規則過於繁多,無法應對複雜的情境和語境。在這個背景下,一些科學家轉向了神經網絡算法,試圖模擬人腦的感知能力。
※ 條件判斷語法 決策中需要處理分歧的狀況,就會用到「if」、「else if」、「else」。 ※ 語法結構: 條件式使用小括號(),裡面放判斷式。 要執行的程式碼放在大括號{}裡。 條件式只會有 true 或 false 兩種結果。 ※ 常用的比較運算子: > 大於 < 小於
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
什麼是「Rule-based bidding」? 基於規則的競價(Rule-Based Bidding),是一種以RoAS為目標,利用機器學習演算法將一系列影響效果的參數(時間、受眾群體、展示位置等)考慮在內,並依據大規模數據幫助賣家更準確地出價的功能。 為什麼Rule-based biddi
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
IF,Switch,三元運算子語法說明 IF條件選擇結構說明 IF為布林條件,當()內條件式滿足True執行if區塊的程式碼,不滿足則執行else區塊的程式碼,若無else也行。