使用修饰符时无法使用模糊变量过滤事实

I can't filter facts with fuzzyvariables when using modifiers

您好,我正在使用 FuzzyClips v6。10.d,我正在阅读有关对模糊变量使用修饰符的内容并进行了尝试:

(deftemplate temperature 
0.0 1.0 ; 
(
    (cold (z 0.1 0.2))
    (warm(PI 0.3 0.6))
    (hot (s 0.7 0.9))
    (hyperhot very hot)
)
)

(deftemplate temp-day
(slot day (type SYMBOL) (allowed-symbols Monday Thursday Friday Sunday))
(slot day-temp (type FUZZY-VALUE temperature))
)

(deffacts fuzzyfacts

(temp-day (day Sunday) (day-temp warm))
(temp-day (day Monday) (day-temp cold))
(temp-day (day Thursday) (day-temp hot))
(temp-day (day Friday) (day-temp hyperhot))

)

(defrule select
(temp-day (day ?x) (day-temp hyperhot))
=>
(assert(was-so-hyper-hot ?x))
)

我只希望得到天气炎热的日子(星期五),但我却得到了:

所以问题是:为什么如果我按过热温度过滤,Clips 又给我几天不同的温度?我知道它们之间的 CF 不同(1.00、0.88 和 0.12),但我预计 Clips 甚至不会考虑温度不同于 hyperhot 的事实。我是否误解了如何使用修饰符过滤变量?谢谢!

您误解了模糊值的工作原理。它们很模糊,所以当你说某样东西很热时,它可能只是热的或暖的(正如你的例子中的事实所示)。如果您更改指示温暖的范围,使其远离炎热,您将看到 (was-so-hyper-hot Sunday) 事实不再有效。

(deftemplate temperature 
0.0 1.0 ; 
(
    (cold (z 0.1 0.2))
    (warm(PI 0.3 0.4))
    (hot (s 0.7 0.9))
    (hyperhot very hot)
)
)

如果您希望您的规则匹配精确值,则不应使用模糊值。