2014-03-06 15 views
0

,當我定義具有超過2的操作者(我不知道)的規則,我收到以下錯誤:模糊石材操作數編號錯誤。邏輯運算<and>需要兩個操作數,但在fuzzylite API發現<3>

03-06 17:19:49.155: W/System.err(712): java.lang.RuntimeException: [syntax error] logical operator <and> expects two operands, but found <3> 

我的規則很喜歡:

RuleBlock ruleBlock = new RuleBlock(); 
        ruleBlock.addRule(Rule.parse("if chestpain is TYPIC and restpress is MIN and serum is MINLEVEL and smoke is LOWPOSSIBILITY and sugar is LEVELNO and maxrate is MINRATE and restrate is LOWRATE then angin is MILD", engine)); 
        ruleBlock.addRule(Rule.parse("if chestpain is ASYMPTOMATIC and restpress is MIN and serum is MAXLEVEL and smoke is LOWPOSSIBILITY and sugar is LEVELNO and maxrate is MINRATE and restrate is HIGHRATE then angin is MASSIVE", engine)); 

完整的錯誤消息是:

03-06 17:19:49.155: W/System.err(712): java.lang.RuntimeException: [syntax error] logical operator <and> expects two operands, but found <3> 
03-06 17:19:49.155: W/System.err(712): at com.fuzzylite.rule.Antecedent.load(Unknown Source) 
03-06 17:19:49.155: W/System.err(712): at com.fuzzylite.rule.Rule.parse(Unknown Source) 
03-06 17:19:49.155: W/System.err(712): at com.example.trsa.RAP1$4.onClick(RAP1.java:253) 
03-06 17:19:49.155: W/System.err(712): at android.view.View.performClick(View.java:2485) 
03-06 17:19:49.155: W/System.err(712): at android.view.View$PerformClick.run(View.java:9080) 
03-06 17:19:49.165: W/System.err(712): at android.os.Handler.handleCallback(Handler.java:587) 
03-06 17:19:49.165: W/System.err(712): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-06 17:19:49.165: W/System.err(712): at android.os.Looper.loop(Looper.java:123) 
03-06 17:19:49.165: W/System.err(712): at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-06 17:19:49.165: W/System.err(712): at java.lang.reflect.Method.invokeNative(Native Method) 
03-06 17:19:49.165: W/System.err(712): at java.lang.reflect.Method.invoke(Method.java:507) 
03-06 17:19:49.175: W/System.err(712): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-06 17:19:49.186: W/System.err(712): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-06 17:19:49.186: W/System.err(712): at dalvik.system.NativeStart.main(Native Method) 

回答

0

這個問題在回答

具體來說,問題是出在規則:

if (chestpain is ASYMPTOMATIC or restpress is MAX or serum is MAXLEVEL) and (smoke is LOWPOSSIBILITY or sugar is LEVELNO or minrate is MINRATE or restrate is HIGHRATE) then angin is MASSIVE

,你指的minrate,但你還沒有添加任何minrate到發動機變量命名。

此外,請確保您已考慮連接器和|或您的規則的優先順序。如果不確定,請像我一樣將括號中的命題分組(如果該分組對您的問題有意義)。

另請注意,既然您正在使用和在您的規則中,您必須設置您選擇的各自的連接和分離運算符。例如,

engine.configure("AlgebraicProduct", "AlgebraicSum", "AlgebraicProduct", "AlgebraicSum", "Centroid");

以供將來參考,請查閱論壇在www.fuzzylite.com解決可能遇到的任何問題的幫助。

相關問題