余文姣,黃夢醒,朱東海
(海南大學(xué) 信息科學(xué)與技術(shù)學(xué)院,海南 海口570228)
隨著市場經(jīng)濟和農(nóng)業(yè)現(xiàn)代化的發(fā)展,農(nóng)村地區(qū)對農(nóng)業(yè)種養(yǎng)殖和病蟲害等農(nóng)業(yè)知識的需求也越來越迫切。如何實現(xiàn)在最恰當?shù)臅r間向農(nóng)民提供他們最希望得到的正確的農(nóng)業(yè)知識,是農(nóng)業(yè)生產(chǎn)領(lǐng)域亟待解決的問題。這個問題的解決可以參考當前在商業(yè)上廣為流行的推薦機制,即通過推薦系統(tǒng)向用戶推薦相關(guān)的信息。
當前在商業(yè)領(lǐng)域有很多比較成功的推薦系統(tǒng),例如基于內(nèi)容的推薦系統(tǒng),基于協(xié)作過濾的推薦系統(tǒng),基于關(guān)聯(lián)規(guī)則的推薦系統(tǒng),還有結(jié)合了多種推薦算法的混合推薦系統(tǒng)等等。但是面向農(nóng)民的農(nóng)業(yè)知識推薦算法和應(yīng)用在商業(yè)上的推薦算法存在很大差異。因此雖然之前也有一些針對農(nóng)民用戶而設(shè)計的推薦系統(tǒng),但是效果都不理想。歸結(jié)其原因有以下兩點:首先由于信息基礎(chǔ)設(shè)施較差,農(nóng)民很少上網(wǎng)瀏覽網(wǎng)頁,系統(tǒng)很難獲得農(nóng)民對于產(chǎn)品的打分信息或者瀏覽記錄。其次是農(nóng)民獲得的信息要求準確性高,例如種植技術(shù)、衛(wèi)生防疫等等,而協(xié)作過濾推薦和其它推薦算法只是推薦相似的信息,因此不能夠確保其準確性和正確性。另外由于農(nóng)民判斷能力較差,如果推薦的信息中存在錯誤,就有可能造成不可挽回的經(jīng)濟損失。
針對這種現(xiàn)狀,本文通過對現(xiàn)有推薦模式和規(guī)則引擎的研究,結(jié)合農(nóng)業(yè)領(lǐng)域知識推薦的特點,對傳統(tǒng)的規(guī)則引擎進行改進,并將其應(yīng)用到農(nóng)業(yè)知識推薦系統(tǒng)中去,改進后的推薦系統(tǒng)在推薦知識的正確性和準確性上都有較大提高,使農(nóng)民能夠更加高效的獲得需要的農(nóng)業(yè)知識。
規(guī)則引擎起源于推理引擎,可以通過組件的形式嵌入到應(yīng)用程序中,規(guī)則引擎的功能是將當前提交到引擎中的事實對象和加載到引擎中的規(guī)則進行匹配,激活那些符合事實對象的規(guī)則,從而根據(jù)規(guī)則中定義的執(zhí)行動作,觸發(fā)應(yīng)用程序做出響應(yīng)。一個典型的規(guī)則引擎包含3個部分:工作存儲器、規(guī)則集容器、推理機。推理機包含匹配器、議程和執(zhí)行引擎。
其結(jié)構(gòu)圖如圖1所示。
圖1 規(guī)則引擎結(jié)構(gòu)
工作存儲器即規(guī)則引擎的綜合數(shù)據(jù)庫,也稱為事實庫,存儲當前需要匹配的業(yè)務(wù)信息。規(guī)則集容器用于存放在規(guī)則庫中獲得的一系列規(guī)則,可以根據(jù)工作存儲器中事實集的變化進行調(diào)整。匹配器通過決定哪些規(guī)則滿足事實或目標,并授予規(guī)則優(yōu)先級,使?jié)M足事實或目標的規(guī)則被加入議程。議程對匹配生成的規(guī)則沖突集進行排序。然后議程中首條規(guī)則的結(jié)論或動作部分將會執(zhí)行,這可能會產(chǎn)生新的事實,從而改變工作存儲器的內(nèi)容。接下來執(zhí)行引擎會根據(jù)議程中的優(yōu)先順序逐條執(zhí)行規(guī)則實例和其他動作。
通過使用規(guī)則引擎,可以將規(guī)則從具體的程序代碼中剝離出來。管理人員可以像管理數(shù)據(jù)一樣對規(guī)則進行管理,比如查詢、添加、刪除、更新、提交規(guī)則等,規(guī)則被加載到規(guī)則引擎中供系統(tǒng)調(diào)用。
雖然采用規(guī)則引擎可以方便有效的修改規(guī)則文件和管理需求,但是這也給規(guī)則引擎帶來了額外的性能消耗。這些消耗主要包括以下部分:編譯規(guī)則文件的時間,規(guī)則匹配的時間,解決規(guī)則沖突的時間。本文中提出了規(guī)則文件的結(jié)構(gòu)化,并采用了規(guī)則文件的運行前編譯方式,提高了規(guī)則引擎的性能。
一般來說規(guī)則文件的編譯存在兩種模式:運行前編譯和運行時編譯,而規(guī)則文件的編譯模式對系統(tǒng)的性能具有很大的影響。運行時編譯是指當運行系統(tǒng)時才對規(guī)則文件進行編譯,雖然這種編譯模式具有簡單直接的特點,但是這種編譯模式不利于系統(tǒng)的效率。相對而言,運行前編譯模式是指規(guī)則文件在系統(tǒng)運行前就已經(jīng)編譯完成,所以系統(tǒng)能夠直接調(diào)用經(jīng)過編譯之后的規(guī)則。雖然這種模式在實現(xiàn)上有些困難,但是因為其獨立的運行機制,不會影響系統(tǒng)的整體性能。所以,對于具有相當多的規(guī)則文件的農(nóng)業(yè)知識推薦系統(tǒng),采用運行前編譯模式可以有效地減小規(guī)則文件的編譯對系統(tǒng)性能的影響。同時,當系統(tǒng)運行時,也需要對規(guī)則文件進行監(jiān)控,在規(guī)則文件有改變的情況下觸發(fā)對規(guī)則文件的再編譯。這樣既保證了系統(tǒng)的完整性,有減少了大量的規(guī)則文件的編譯作業(yè)帶來的時間消耗。
因為農(nóng)業(yè)知識推薦系統(tǒng)涉及的農(nóng)業(yè)知識具有很完整的系統(tǒng)性,可以對農(nóng)業(yè)行業(yè)進行分類,例如,稻谷屬于農(nóng)作物種植業(yè)-谷物及其它作物的種植-谷物的種植,由此將規(guī)則庫中的規(guī)則文件進行分類,從而減少系統(tǒng)查找規(guī)則的時間。通過不斷的分類我們可以把規(guī)則庫中的規(guī)則文件組成一個樹形結(jié)構(gòu),樹形結(jié)構(gòu)的終端節(jié)點就是實際的規(guī)則文件。圖2顯示了農(nóng)業(yè)知識推薦系統(tǒng)規(guī)則庫的樹形結(jié)構(gòu)。當系統(tǒng)調(diào)用相應(yīng)函數(shù)的時候,我們可以通過樹的遍歷查找規(guī)則文件,建立規(guī)則網(wǎng)絡(luò),這樣可以減少在規(guī)則匹配過程中需要匹配的文件。同時通過樹形結(jié)構(gòu)組織的規(guī)則文件庫,也方便我們進行管理。
圖2 農(nóng)業(yè)知識推薦系統(tǒng)規(guī)則庫的樹形結(jié)構(gòu)
我們將遵循以下原則將規(guī)則文件庫組織成樹形結(jié)構(gòu)。首先各子樹包含的元素之間不能存在交集,即屬于子樹Tree_A的規(guī)則Rule_a不能和屬于子樹Tree_B的規(guī)則Rule_b相同,這樣可以減少系統(tǒng)在查找規(guī)則文件的時候出現(xiàn)歧義。其次是子樹的劃分應(yīng)該與實際的實際系統(tǒng)的功能相一致,即當系統(tǒng)調(diào)用某個功能函數(shù)的時候,可以通過載入某個子樹的規(guī)則完成其功能。這樣就避免了系統(tǒng)由于加載了過多規(guī)則導(dǎo)致的性能下降。
針對農(nóng)業(yè)知識推薦系統(tǒng)的模型,本文分別實現(xiàn)了傳統(tǒng)的經(jīng)典規(guī)則引擎(使用Drools5.0規(guī)則引擎)和改進后的規(guī)則引擎,通過兩個規(guī)則系統(tǒng)的對比,說明本文提出的優(yōu)化方法的優(yōu)勢。由于規(guī)則引擎中對于性能影響最大的是規(guī)則文件的編譯和規(guī)則的匹配,所以以下測試用例專門針對這兩個方面進行測試。
2.3.1 編譯規(guī)則文件的測試
為了分析文件數(shù)目、規(guī)則數(shù)目與編譯時間三者之間的關(guān)系,下面對5個用例進行編譯測試,對每個用例進行3次測試,記錄編譯時間,然后獲得3次測試時間的均值,測試結(jié)果見表1。
表1 規(guī)則文件編譯測試結(jié)果
通過比較用例1和用例2,我們可以發(fā)現(xiàn)當規(guī)則文件數(shù)相同時,每增加1條規(guī)則會使編譯的時間增加20ms。對比用例2和用例3,或者用例4和用例5,當規(guī)則數(shù)相同,規(guī)則文件數(shù)增加時,由于I/O操作,會導(dǎo)致編譯時間增加40ms。雖然當規(guī)則較少時這些時間的消耗對與系統(tǒng)性能影響不大,但是當規(guī)則文件和規(guī)則的數(shù)量大量增加時,這些時間將會相當可觀。因此一般情況下,當規(guī)則數(shù)一定時,我們更傾向于劃分更少的規(guī)則文件。但是需要對規(guī)則庫中的規(guī)則文件進行樹形結(jié)構(gòu)的組織,那么就必然導(dǎo)致規(guī)則文件的增加。我們可以采用運行前編譯這種模式解決規(guī)則文件增加的弊端。通過采用運行前編譯的模式我們可以在系統(tǒng)運行就對規(guī)則文件進行編譯,雖然過多的規(guī)則文件會耗費很長的編譯時間,但是對系統(tǒng)運行卻沒有影響。
2.3.2 規(guī)則匹配的測試
為了測試規(guī)則匹配部分改進之后的性能,設(shè)置如下4個測試用例,用例1和用例2是通過構(gòu)造好的規(guī)則庫樹形結(jié)構(gòu)來查找規(guī)則文件和匹配,存在三級地址,用例3和用例4是通過的經(jīng)典的規(guī)則網(wǎng)絡(luò)進行匹配(使用Drools5.0規(guī)則引擎)。每個用例進行3次測試,記錄每次的匹配成功的時間,然后求均值,同時獲得所占內(nèi)存的平均值,測試結(jié)果見表2。
表2 規(guī)則匹配測試結(jié)果
通過對比我們可以發(fā)現(xiàn)用例1比用例3在時間上減少了40%,在空間上減少了21%。用例2比用例4時間上減少了23%,在空間上減少了17%。因此可以說改進后的規(guī)則引擎不管是在時間消耗上,還是在空間消耗上都要比傳統(tǒng)的規(guī)則引擎小。這是因為前者是通過構(gòu)造好的樹形結(jié)構(gòu)進行規(guī)則文件的搜索,需要加載和匹配的規(guī)則文件少,而后者是通過規(guī)則網(wǎng)絡(luò)進行規(guī)則的匹配,需要加載和匹配的規(guī)則文件多,所以前者具有比后者更好的時間效率和空間效率。
2.3.3 綜合分析
總結(jié)以上兩個部分的測試結(jié)果,可以看出規(guī)則編譯對規(guī)則引擎的時間性能影響最大。雖然采用樹形結(jié)構(gòu)來對規(guī)則文件進行組織有可能會增加規(guī)則文件的數(shù)目,但是通過樹形結(jié)構(gòu)可以極大的縮小規(guī)則匹配的搜索范圍,這樣使系統(tǒng)不管在時間效率還是在空間效率上都有很大改善。同時因為系統(tǒng)采用運行前編譯,可以在系統(tǒng)運行前就對規(guī)則文件進行編譯,減少系統(tǒng)運行時I/O操作帶來的時間消耗,消除由于采用樹形結(jié)構(gòu)組織規(guī)則文件給系統(tǒng)帶來的負面影響。
基于改進引擎的農(nóng)業(yè)知識推薦系統(tǒng)借鑒了商業(yè)上流行的推薦系統(tǒng)模式,并將改進后的規(guī)則引擎應(yīng)用到推薦系統(tǒng)中去,利用已有的農(nóng)戶數(shù)據(jù)庫,獲得精準的農(nóng)戶信息,從而避免了直接將商業(yè)上的推薦系統(tǒng)應(yīng)用到農(nóng)業(yè)上的不足。
基于規(guī)則引擎的農(nóng)業(yè)知識推薦系統(tǒng)包含4個部分:數(shù)據(jù)層、持久層、應(yīng)用層、表現(xiàn)層,如圖3所示。
圖3 基于規(guī)則引擎的農(nóng)業(yè)知識推薦系統(tǒng)的結(jié)構(gòu)
(1)數(shù)據(jù)層:包含規(guī)則庫和農(nóng)戶數(shù)據(jù)庫,規(guī)則庫采用關(guān)系表的形式進行規(guī)則的存儲,當系統(tǒng)運行時,根據(jù)系統(tǒng)需求將關(guān)系表轉(zhuǎn)化為規(guī)則文件。農(nóng)戶數(shù)據(jù)庫用來存儲農(nóng)戶的信息,包含個人基本信息、種養(yǎng)殖信息、地理信息等等,特別是當前各地都建立自己的農(nóng)戶數(shù)據(jù)庫,能夠提供精準的農(nóng)戶信息,因此為系統(tǒng)的使用提供了很好的應(yīng)用基礎(chǔ)。
(2)持久層:采用Hibernate技術(shù)實現(xiàn),Hibernate是一個開放源代碼的對象關(guān)系映射框架,通過Hibernate我們可以很容易的實現(xiàn)規(guī)則庫和農(nóng)戶數(shù)據(jù)庫的操作。
(3)應(yīng)用層:包含規(guī)則編輯器、規(guī)則引擎和推薦服務(wù)器3個部分。規(guī)則編輯器提供規(guī)則的編輯功能,管理人員可以使用非過程化的語言,通過規(guī)則編輯器對規(guī)則庫中的規(guī)則進行增加、刪除、修改、查詢操作,有利于系統(tǒng)的后期維護。規(guī)則引擎通過讀入規(guī)則文件構(gòu)建規(guī)則網(wǎng)絡(luò),根據(jù)農(nóng)戶的信息,做出決策。推薦服務(wù)器根據(jù)規(guī)則引擎的執(zhí)行結(jié)果和農(nóng)戶信息向農(nóng)戶提供相應(yīng)的推薦信息。
(4)表現(xiàn)層:為終端用戶提供信息的表示,這些信息的形式可以有多種形式,例如短信、網(wǎng)頁、郵件、電視等等。其中尤其以短信為主,因為現(xiàn)在由于通信費用和手機購買費用的減少,農(nóng)民使用手機的比例也大大提高,基本上一個家庭就有一部或者兩部手機,農(nóng)民通過手機就可以輕松的獲得系統(tǒng)發(fā)送的推薦短信。
對于基于規(guī)則引擎的農(nóng)業(yè)知識推薦系統(tǒng)是如何根據(jù)規(guī)則庫和農(nóng)戶信息向農(nóng)戶推薦信息的過程,我們可以通過種植卡因類菠蘿的例子描述,例如農(nóng)戶數(shù)據(jù)庫中有以下字段,見表3。
以因類菠蘿的追肥信息為例,追肥信息如下:
(1)11月份發(fā)送施肥信息,施花芽分化肥,以磷鉀為主,適當控制氮肥的用量,具體信息略。
(2)12月到次年1月間發(fā)送施肥信息,施催蕾肥。每株施圈肥10-15公斤和0.5公斤磷肥,具體信息略。
(3)4-5月發(fā)送施肥信息,施攻果催芽肥。此期以中量氮、高量鉀促進果實長大,保證果實品質(zhì),具體信息略。
表3 農(nóng)戶數(shù)據(jù)
通過提取菠蘿的追肥信息,經(jīng)過管理人員的編輯,形成規(guī)則文件如下。
例如,當系統(tǒng)時間為11月時,系統(tǒng)通過規(guī)則引擎發(fā)現(xiàn)用戶張三的條件符合追肥規(guī)則"rule_1"的前件,則觸發(fā)相應(yīng)的動作,從農(nóng)業(yè)知識庫中獲得 “施花芽分化肥”相關(guān)的農(nóng)業(yè)知識,查詢農(nóng)戶數(shù)據(jù)獲得農(nóng)戶信息。推薦服務(wù)器結(jié)合農(nóng)戶的信息和相應(yīng)的農(nóng)業(yè)知識,通過短信等形式向指定的農(nóng)戶進行農(nóng)業(yè)知識的推薦。
在當前市場經(jīng)濟和農(nóng)業(yè)現(xiàn)代化迅速發(fā)展的大背景下,農(nóng)民迫切的需要一種高效的獲取信息的途徑。本文根據(jù)農(nóng)業(yè)領(lǐng)域的特點對規(guī)則引擎進行了改進,提出了規(guī)則庫的樹形結(jié)構(gòu)化方法,并采用規(guī)則的運行前編譯,提高了引擎的運行效率。將規(guī)則引擎技術(shù)應(yīng)用于農(nóng)業(yè)知識推薦系統(tǒng)中,與傳統(tǒng)推薦系統(tǒng)相比增強了推薦結(jié)果的準確性和正確性,使系統(tǒng)能夠在最恰當?shù)臅r間向農(nóng)民提供他們最希望得到的正確的農(nóng)業(yè)知識。同時由于規(guī)則引擎具有將程序和業(yè)務(wù)邏輯分離的特性,管理人員能夠根據(jù)實際情況進行規(guī)則的更新,因此增加了系統(tǒng)的靈活性和適用性??梢灶A(yù)見規(guī)則引擎的引入將會導(dǎo)致推薦系統(tǒng)在農(nóng)業(yè)領(lǐng)域更大的發(fā)展。
[1]LIU Jianguo,ZHOU Jiantao,WANG Binghong.The progress of personalized recommendation system research [J].Progress in Natural Science,2009,19(1):1-15(in Chinese).[劉建國,周建濤,汪秉宏.個性化推薦系統(tǒng)的研究進展 [J].自然科學(xué)進展,2009,19(1):1-15.]
[2]CHEN Hua,LI Renfa,LIU Yufeng.Algorithms recommend research on personalized search engine [J].Application Research of Computers,2010,27(1):48-53(in Chinese).[陳華,李仁發(fā),劉鈺峰.個性化搜索引擎推薦算法研究 [J].計算機應(yīng)用研究,2010,27(1):48-53.]
[3]CUI Chunsheng,WU Qizong.Research on content-based recommendation based on vague sets [J].Application Research of Computers,2010,27(6):2109-2113(in Chinese).[崔春生,吳祈宗.基于Vague集的內(nèi)容推薦算法研究 [J].計算機應(yīng)用研究,2010,27(6):2109-2113.]
[4]MA Hongwei,ZHANG Guangwei,LI Peng.Survey of collaborative filtering algorithms [J].Journal of Chinese Computer Systems,2009,30(7):1283-1288(in Chinese).[馬宏 偉,張光衛(wèi),李鵬.協(xié)同過濾推薦算法綜述 [J].小型微型計算機系統(tǒng),2009,30(7):1283-1288.]
[5]DONG Xianghe,QI Lili,ONG Ronghe.Optimization algorithm based on collaborative filtering [J].Computer Engineering and Applications,2009,45(8):229-232(in Chinese).[董祥和,齊莉麗,董榮和.優(yōu)化的協(xié)作過濾推薦算法 [J].計算機工程與應(yīng)用,2009,45(8):229-232.]
[6]HE Keqin,HE Lianglin,XIN Luwei.Social view based user modeling for recommendation in tagging systems by association rules [C].Intelligent Systems and Applications 2nd International Workshop.Washington DC:IEEE Computer Society Press,2010,27(5):1-5.
[7]Sang Hyun Choi,Young-Seon Jeong,Jeong M K.A hybrid recom-mendation method with reduced data for large-scale application [C].IEEE Transactions on Systems Man and Cybernetics Part C:Applications and Reviews,2010,40(5):557-566.
[8] WANG Hen.E-agriculture recommender system model based on collaborative filtering algorithm [J].Journal of Ningxia University,2009,30(4):358-359(in Chinese).[王恒.基于協(xié)同過濾的電子農(nóng)務(wù)推薦系統(tǒng)模型研究 [J].寧夏大學(xué)學(xué)報,2009,30(4):358-359.]
[9]MA Xiuli,WANG Hongxia,ZHANG Lingyun.Application of drools in network fault management system [J].Computer Engineering and Design,2009,30(8):1859-1862(in Chinese).[馬秀麗,王紅霞,張凌云.Drools在網(wǎng)絡(luò)故障管理系統(tǒng)中的應(yīng)用 [J].計算機工程與設(shè)計,2009,30(8):1859-1862.]
[10]LI Chunfang,TAN Qingping,XU Jianjun,et al.Design and realization of rule-based workflow task assignment system [J].Computer Engineering and Design,2008,29(21):5572-5579(in Chinese).[李春芳,譚慶平,徐建軍,等.基于業(yè)務(wù)規(guī)則的工作流任務(wù)分派設(shè)計與實現(xiàn) [J].計算機工程與設(shè)計,2008,29(21):5572-5579.]
[11]WANG Chengliang,ZHOU Yaxin,CHEN Juanjuan.Improved rete algorithm based on industry condition [J].Computer Engineering and Design,2009,30(19):5443-4543(in Chinese).[汪成亮,周亞鑫,陳娟娟.基于工業(yè)環(huán)境的改進Rete算法 [J].計算機工程與設(shè)計,2009,30(19):5443-4543.]
[12]HE Kai.The design and implementation of the medical costs control system of the social medical insurance based-on rule[D].Changsha:Graduate School of National University of Defense Technology,2006(in Chinese).[賀凱.基于規(guī)則的社會醫(yī)療保險費用監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn) [D].長沙:國防科學(xué)技術(shù)大學(xué)研究生學(xué)院,2006.]
[13]PENG Lei,XIAO Yanli,SUN Jing,et al.Applying improved rule engine in wireless value-added services [J].Computer Applications and Software,2010,27(2):222-223(in Chinese).[彭磊,肖延麗,孫靜,等.改進的規(guī)則引擎在無線增值業(yè)務(wù)中的應(yīng)用 [J].計算機應(yīng)用與軟件,2010,27(2):222-223.]
[14]WANG Lijun,TAO Ming1iang,ZHANG Shu,et al.Research on business rule engine [J].Computer Engineering,2007,33(24):52-56(in Chinese).[王李軍,陶明亮,張曙,等.面向業(yè)務(wù)規(guī)則引擎研究 [J].計算機工程,2007,33(24):52-56.]
[15]LIU Jian,CHEN Yichao,JIANG Hong.Universal fault and diagnosis method of expert KB on regulation [J].Computer &Digital Engineering,2010,38(36):72-76(in Chinese).[劉劍,陳一超,江虹.基于規(guī)則的通用專家知識庫故障診斷方法 [J].計算機與數(shù)字工程,2010,38(36):72-76.]
[16]ZHANG Gang,SHAN Wenwei,WANG Feng.Research on the promotion of rule engine performance [C].2nd International Workshop on Intelligent Systems and Applications.Washington DC:IEEE Computer Society Press,2010:392-395.
[17]LIU Chen,DONG Xupeng,YANG Zhengqiu.Research of modern enterprise intelligent system based on rule engine and workflow [C].IEEE International Conference on Intelligent Computing and Intelligent Systems.Washington DC:IEEE Computer Society Press,2010:494-49.