我制作了一个模糊模板,代表学生在某个领域的知识。问题是,在将学生John
声明为low
时,他也将被宣布为med
,因为低学生也在30到40之间。
如何在不low
的情况下宣布学生为med
?
请注意,我知道我可以执行类似(student (name John) (knowledge (20 0) (21 1) (22 0)))
的操作,但如果我想使用模糊值声明他该怎么办?
(deftemplate fz-knowledge
0 100
( (low (20 1) (40 0))
(med (30 0) (50 1) (70 0))
(high (60 0) (80 1))
))
(deftemplate student
(slot name)
(slot knowledge (type FUZZY-VALUE fz-knowledge))
)
(deffacts students
(student (name John) (knowledge low) )
)
答案 0 :(得分:1)
通过重叠范围,这是有道理的。但也许重叠不是你想要做的。怎么样:
(deftemplate fz-knowledge
0 100
( (low (20 1) (40 0))
(high (60 0) (80 1))
(med NOT [ low OR high ] )
))
通过这种方式,你可以清楚地分辨得分何时低或高,而松散的挑剔med
只是填补了裂缝。