0

在fuzzylite API中,当我使用超过2个运算符定义规则时(我不确定),我收到以下错误:

 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)
4

1 回答 1

0

这个问题在http://www.fuzzylite.com/forums/topic/logical-operators-grammers-error-in-numbers-of-operands/中得到了回答

具体来说,问题在于规则:

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 的变量。

此外,请确保您已经考虑了连接器的优先顺序和/或在您的规则中。如果不确定,请像我所做的那样将括号中的命题分组(如果该分组对您的问题有意义)。

另请注意,由于您在规则中使用 and|or,因此您必须设置您选择的相应合取和析取运算符。例如,

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

为了将来参考,请参阅 www.fuzzylite.com 上的论坛,以帮助解决您可能遇到的任何问题。

于 2014-05-09T12:48:11.380 回答