2014-03-06 14 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解决可能遇到的任何问题的帮助。

相关问题