Java FuzzyJess不';t聚合(模糊并集)规则结果
我正在和FuzzyJess做一个示例项目。首先,我必须能够驾驶机器人避开障碍物。我有一大堆这样的规则:Java FuzzyJess不';t聚合(模糊并集)规则结果,java,fuzzy,expert-system,jess,Java,Fuzzy,Expert System,Jess,我正在和FuzzyJess做一个示例项目。首先,我必须能够驾驶机器人避开障碍物。我有一大堆这样的规则: (defrule avoid-obstacle-left (ProximitySensors (left ?left & :(fuzzy-match ?left "near")) (right ?right & :(fuzzy-match ?right "far" )) (front ?front & :(
(defrule avoid-obstacle-left
(ProximitySensors
(left ?left & :(fuzzy-match ?left "near"))
(right ?right & :(fuzzy-match ?right "far" ))
(front ?front & :(fuzzy-match ?front "far" ))
)
=>
(assert
(Steer (orientation "right"))
)
)
(defrule avoid-obstacle-front
(ProximitySensors
(left ?left & :(fuzzy-match ?left "far" ))
(right ?right & :(fuzzy-match ?right "far" ))
(front ?front & :(fuzzy-match ?front "near"))
)
=>
(assert
(Steer (orientation "left"))
)
)
FuzzyJess文档中写道:
“其次,如果有许多规则影响同一输出变量(这在许多应用程序中很常见),则将所有这些规则的输出变量合并为一个变量通常很有用。这称为全局贡献。常用的策略是使用模糊联合对所有规则的所有结果进行联合。然后,在所有规则触发后,我们得到每个规则对answe贡献的全局效果r、 然后,结果通常会被反模糊化,以提供一个清晰的值来反馈给被控制的系统。模糊淋浴问题就是这个完整过程的一个例子。请注意,在FuzzyJess扩展中,作为规则执行的一部分,此全局贡献会自动为用户完成。
在这方面,我希望有以下规则:
(defrule use-steer
?ref <- (Steer ?steerValue)
=>
(retract ?ref)
(?*robot* steer ?steerValue)
)
(解除规则使用转向)
?参考号
(收回?参考)
(?*机器人*转向?转向值)
)
要仅触发一次,其中?steerValue是由规则先行项生成的模糊割集的模糊并集。取而代之的是,它为每一个事实发射一次,而且似乎没有应用任何全球贡献