首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jess和FuzzyJ辅助

Jess和FuzzyJ辅助
EN

Stack Overflow用户
提问于 2011-04-20 03:39:10
回答 1查看 633关注 0票数 2

我正在尝试学习Jess和FuzzyJ,但在运行一个简单的程序时遇到了问题。我已经看了它几个小时了,我不太确定为什么它不能运行。如果有人能给我指明正确的方向,我将不胜感激。

代码语言:javascript
复制
;;;;;;;;;;;;;;;;;;;;;;;;;
Fuzzy Variables
;;;;;;;;;;;;;;;;;;;;;;;;;;

(defglobal ?*income* = 
    (new nrc.fuzzy.FuzzyVariable "income" 0.0 230000.00 "dollars"))
(defglobal ?*stability* =
    (new nrc.fuzzy.FuzzyVariable "stability" 0.0 1.0 "index"))
(defglobal ?*liquidity* =
    (new nrc.fuzzy.FuzzyVariable "liquidity" 0.0 1.0 "index"))



(defrule initial-terms
    (declare (salience 100))
=>
(import nrc.fuzzy.*)
(load-package nrc.fuzzy.jess.FuzzyFunctions)

;;;;;;;;;;;;;;;;;;;;;
Primary Terms
;;;;;;;;;;;;;;;;;;;;;;;


(?*income* addTerm "low" (new ZFuzzySet 30000.00 80000.00))
(?*income* addTerm "medium" (new PIFuzzySet 100000.00 60000.00))
(?*income* addTerm "high" (new SFuzzySet 80000.00 190000.00))

(?*stability* addTerm "low" (new ZFuzzySet .3 .5))
(?*stability* addTerm "medium" (new PIFuzzySet .6 .4))
(?*stability* addTerm "high" (new SFuzzySet .7 .9))

(?*liquidity* addTerm "low" (new ZFuzzySet .3 .5))
(?*liquidity* addTerm "medium" (new PIFuzzySet .6 .4))
(?*liquidity* addTerm "high" (new SFuzzySet .7 . 9))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Fuzzy Rules
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defrule rule-1 "low income => liquidity very low"
    (theIncome ?x &: (fuzzy-match ?x "low"))
=>

    (assert(theLiquidity (new nrc.fuzzy.FuzzyValue ?*liquidity* "very low")))

(defrule rule-2 "high income & high stability => very high liquidity"
    (theIncome ?x &: (fuzzy-match ?x "high"))
    (theStability ?y (fuzzy-match ?y "high"))
=>
    (assert(theLiquidity (new nrc.fuzzy.FuzzyValue ?*liquidity* "very high"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Defuzzification
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defrule defuzzification-and-display-liquidity
    (declare (salience -1))
    ?f <- (theLiquidity ?z)
=>
    (printout t (str-cat "Liquidity: " (?z momentDefuzzify)))
    retract( ?f)
    (halt))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Start up Rule/Fuzzify
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defrule assert-income-and-stability "initialization"
=>
    (printout t "Enter the income(ex. 52000): ")
    (bind ?income-value (float (readline t)))

    (printout t "Enter the stability index(ex. 0.64): ")
    (bind ?stability-value (float(readline t)))


    (assert(theIncome
        (new nrc.fuzzy.FuzzyValue ?*income*
        (new nrc.fuzzy.TriangleFuzzySet
        (- ?income-value 3000.0)
        ?income-value
        (+ ?income-value 3000.0)))))

    (assert(theStability
        (new nrc.fuzzy.FuzzyValue ?*stability*
        (new nrc.fuzzy.TriangleFuzzySet
        (- ?stability-value 3000.0)
        ?stability-value
        (+ ?stability-value 3000.0))))))

(reset)
(run)
EN

回答 1

Stack Overflow用户

发布于 2011-06-01 22:53:11

该程序中有许多小的语法错误;通常,Jess解释器会很好地指出这些错误。首先,在每个评论块中,您都获得了评论的实际文本……未注释。因此,在行的开头添加一个分号,比如“模糊变量”。

第二,上线

代码语言:javascript
复制
(?*liquidity* addTerm "high" (new SFuzzySet .7 . 9))

在最后一个小数点之后不应该有空格。

第三,规则rule-1rule-2的末尾没有足够的右括号。任何能够格式化Lisp代码的像样的程序员编辑器都应该能够帮助您解决这个问题。

第四,上线

代码语言:javascript
复制
(theStability ?y (fuzzy-match ?y "high"))

您在谓词函数之前缺少"&:“--请参阅上一行。

最后,我想,这句话

代码语言:javascript
复制
retract( ?f)

格式不正确--应该是(retract ?f)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5721715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档