最近可能會接觸expert system,經過一些study,焦點放在三個
參考了一些評比
- http://illation.com/banking-benchmark-performance-jess-vs-drools/
- http://www.integratingstuff.com/2010/07/18/rule-engines-in-java-jboss-drools/
下載與安裝
Drools的下載頁 http://www.jboss.org/drools/downloads
由於目標是在Drools Expert上,依據description的描述,就下載Drools。我下載的是6.0.0 beta 5,大小約114M。6.0版與前版之差別可以參考這裡。解開壓縮檔後,裡面包含開發所需要的jar files, 還有原始碼、javadoc、參考文件與範例等。
- 參考http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html_single/index.html#d0e95,先以2.1.3.1方式安裝GEF
- 安裝Drools plug-in:以eclipse的 Help | Install New Software,在Location輸入 http://download.jboss.org/drools/release/6.0.0.Beta5/org.drools.updatesite 來進行安裝。(或是先用瀏覽器到http://download.jboss.org/drools/release去尋找相對應的版本目錄)
- 在 http://www.jboss.org/drools/downloads.html 下載 Drools and jBPM tools,解壓縮至硬碟
- 再以1.中文件 2.1.3.4 所述方法,設定 drools runtime
接下來我們來進行程式的開發。先在eclipse中建立新的專案,記得在專案的properties之Java Build Path裡,新增一個library,把上圖中binaries下所有的jar files都加進來。
首先我們來撰寫rule的部份:
首先我們來撰寫rule的部份:
colorRule.drl rule "red" when color:Color(color=='red') then System.out.println("#ff0000"); end rule "green" when color:Color(color=='green') then System.out.println("#00ff00"); end rule "blue" when color:Color(color=='blue') then System.out.println("#0000ff"); end |
這裡我們定義了三個rule,讓三種顏色的名稱對應到其color code。
接下來Java來開發程式。首先需要一個entity object
接下來Java來開發程式。首先需要一個entity object
Color.java
public class Color { private String color; public Color(){} public Color(String color) { this.color = color; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } } |
然後再一個帶有main()的可執行程式
DrColor.java
import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import org.drools.compiler.compiler.DroolsError; import org.drools.compiler.compiler.DroolsParserException; import org.drools.compiler.compiler.PackageBuilder; import org.drools.compiler.compiler.PackageBuilderErrors; import org.drools.core.RuleBase; import org.drools.core.RuleBaseFactory; import org.drools.core.StatefulSession; public class DrColor { private RuleBase rbase = RuleBaseFactory.newRuleBase(); private PackageBuilder pbuilder = new PackageBuilder(); private String DRL_FILE = "colorRule.drl"; private void initDrools() { // read DRL file and add to package builder try { Reader reader = new InputStreamReader(DrColor.class.getResourceAsStream(DRL_FILE)); pbuilder.addPackageFromDrl(reader); } catch (DroolsParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } PackageBuilderErrors errors = pbuilder.getErrors(); if (errors.getErrors().length > 0) { System.out.println("ERROR:"); for (DroolsError err: errors.getErrors()) { System.out.println(err); } throw new IllegalArgumentException("Could not parse knowledge"); } // add package to rule base rbase.addPackage(pbuilder.getPackage()); } private void determineColor(String col) { Color c = new Color(col); StatefulSession session = rbase.newStatefulSession(); session.insert(c); session.fireAllRules(); } public static void main(String[] args) { DrColor m = new DrColor(); m.initDrools(); m.determineColor("blue"); m.determineColor("red"); } } |
當執行時,若能看到#0000ff與#ff0000,就表示Drools Expert可以正常執行了。
接下來,就要由你來發揮想像力,讓這專家系統發揮效力了。
參考文件:
Drools Expert User Guide 6.0 beta
Drools Documents
沒有留言:
張貼留言