如何模糊化清晰变量?在FuzzyClips中实践遇异常求解析
排查FuzzyClips模糊化变量的异常问题
嘿,我仔细看了你写的FuzzyClips代码,发现几个关键问题,这些应该就是导致异常行为的原因,咱们一个个来修正:
1. 模糊集定义用错指令
你用deftemplate来定义模糊变量的论域和模糊集合,这是不对的——FuzzyClips里专门用来定义模糊结构的指令是deffuzzy,而不是deftemplate。deftemplate是用来定义事实模板的,不能用来声明模糊集。
正确的模糊集定义应该是这样:
(deffuzzy age-template 0 100 years ; 论域范围0-100岁 (young (15 0.75) (17 1) (19 1)) (mature (18 0.75) (25 1) (30 0.25)) (adult (30 0.5) (40 1) (50 0.75)) (old (40 0.25) (50 0.75) (65 1)) )
2. 事实模板未关联模糊集
你的person模板里的age槽只是声明了INTEGER类型,但没有指定它要关联你定义的模糊集age-template。这会导致CLIPS无法识别这个槽需要进行模糊化处理。
修正后的person模板:
(deftemplate person (slot name (type STRING)) (slot age (type INTEGER) (fuzzy age-template)) ; 关联模糊集 (slot city (type STRING)) )
3. 事实定义不完整
你在deffacts里的Mike条目(person (name "Mike") (...))没有补全age和city的取值,这会导致语法错误,CLIPS无法正确加载这个事实。比如可以补全成:
(deffacts start (person (name "John") (age 25) (city "London")) (person (name "Mike") (age 35) (city "Paris")) )
修正后的完整代码
把上面的修正整合起来,完整的代码应该是这样:
(deffuzzy age-template 0 100 years (young (15 0.75) (17 1) (19 1)) (mature (18 0.75) (25 1) (30 0.25)) (adult (30 0.5) (40 1) (50 0.75)) (old (40 0.25) (50 0.75) (65 1)) ) (deftemplate person (slot name (type STRING)) (slot age (type INTEGER) (fuzzy age-template)) (slot city (type STRING)) ) (deffacts start (person (name "John") (age 25) (city "London")) (person (name "Mike") (age 35) (city "Paris")) )
你可以试试运行这段修正后的代码,应该就能正常进行模糊变量的处理了。如果还有其他异常,可以再补充具体的错误信息哦~
内容的提问来源于stack exchange,提问作者Keka Bron
相关产品推荐
相关产品推荐

