我有一組具有屬性和一組規則的對象,當它們應用於對象集時,提供了這些對象的一個子集。爲了使這更容易理解,我將提供一個具體的例子。推理引擎根據內部規則計算匹配集
我的對象是人,每個人都有三個屬性:原籍國,性別和年齡組(所有屬性都是離散的)。我有許多規則,比如「來自美國的所有男性」,這些規則與這組較大的對象的子集相對應。
我正在尋找一個現有的Java「推理引擎」或類似的東西,它將能夠從規則映射到人員子集,或者關於如何去創建我自己的東西的建議。我已經閱讀了規則引擎,但是這個術語似乎專門用於使業務規則具體化的專家系統,並且通常不包括任何高級形式的推理。以下是我需要處理的更復雜場景的一些示例:
我需要規則的連接。因此,當提出「包括所有男性」和「排除10-20歲年齡段的所有美國人」時,我只對美國以外的男性和美國以外的男性感興趣, 20歲年齡段。
規則可能有不同的優先級(明確定義)。因此,一條規定「排除所有男性」的規則將覆蓋一條規定,說「包括所有美國男性」。
規則可能有衝突。因此,我可以同時擁有「包括所有男性」和「排除所有男性」,在這種情況下,優先事項必須解決問題。
規則是對稱的。所以「包括所有男性」相當於「排除所有女性」。
規則(或更確切地說子集)可能有與它們相關的元規則(明確定義)。在應用原始規則或通過推理達到子集的任何情況下,都必須應用這些元規則。因此,如果「排除美國」的元規則附加到規則「包括所有男性」,並且我爲引擎提供了「排除所有女性」的規則,則應該能夠推斷「排除所有女性」子集相當於「包含所有男性」子集,因此另外應用「排除美國」規則。
我完全有可能沒有第5項活,但我確實需要提到的所有其他屬性。我的規則和對象都存儲在數據庫中,並且可以在任何階段進行更新,所以我需要在需要時實例化「推理引擎」,並在之後將其摧毀。
RDBMS中的數據是?爲什麼不在數據級別嘗試這一點?這聽起來更像是你需要一個報告工具給我。 – used2could 2010-05-24 14:05:19
數據在RDBMS中,是的,但我不確定報告工具是否足夠。我幾乎沒有什麼經驗,但似乎複雜性與實時使用而不是報告相結合會使它變得不可行? – Zecrates 2010-05-26 07:48:46
我認爲你可以在業務分析方面做更多的工作。從你的描述中,我發現業務需求翻譯不夠專業術語 - 例如:「因此,一條規定」排除所有男性「的規則將覆蓋一條規定,說」包括所有美國男性「。 - 這可以被解釋爲一條單獨的規則」排除美國以外的所有男性「,並且在任何運行規則引擎的權力範圍內,我建議你閱讀一下NLP和形式邏輯,最後一件事 - 避免優先級和瘟疫,這是最簡單的最終導致無法維護的混亂。訂購也很糟糕,但並不壞。 – ddimitrov 2010-08-04 15:06:55