【问题标题】:Run FuzzyJess files in console. Is it possible? (new in Jess)在控制台中运行 FuzzyJess 文件。可能吗? (杰斯的新功能)
【发布时间】:2020-12-21 02:06:45
【问题描述】:

我是 Jess 的新手,我正在 Windows 10 控制台上执行我的 .clp 文件:

java jess.Main example.clp

现在我正在学习模糊逻辑并阅读它来执行fuzzyjess .clp 必须使用:

java nrc.fuzzy.jess.FuzzyMain fuzzyE.clp

但它会启动此错误:

Jess reported an error in routine new
        while executing (new FuzzyVariable "temperature" 0 100 "┬░C")
        while executing (bind ?temperature (new FuzzyVariable "temperature" 0 100 "┬░C")).
  Message: Constructor not found: (new FuzzyVariable "temperature" 0 100 "┬░C").
  Program text: ( bind ?temperature ( new FuzzyVariable "temperature" 0 100 "┬░C" ) )  at line 8.
Nested exception is:
nrc.fuzzy.FuzzyVariable
java.lang.NoSuchMethodException: nrc.fuzzy.FuzzyVariable
        at jess.c6.call(Unknown Source)
        at jess.ep.a(Unknown Source)
        at jess.Funcall.execute(Unknown Source)
        at jess.FuncallValue.resolveValue(Unknown Source)
        at jess.c1.call(Unknown Source)
        at jess.ep.a(Unknown Source)
        at jess.Funcall.execute(Unknown Source)
        at jess.Jesp.a(Unknown Source)
        at jess.Jesp.for(Unknown Source)
        at jess.Jesp.parse(Unknown Source)
        at jess.Jesp.parse(Unknown Source)
        at jess.Main.execute(Unknown Source)
        at nrc.fuzzy.jess.FuzzyMain.main(Unknown Source)

这是fuzzyE.clp的代码(我在网上找到的,试试看是否可以运行):

;; Load
(load-package nrc.fuzzy.jess.FuzzyFunctions)

(import nrc.fuzzy.*)

(bind ?temperature (new FuzzyVariable "temperature" 0 100 "°C"))
(bind ?pressure (new FuzzyVariable "pressure" 0.1 50 "MPa"))

(?temperature addTerm "cold" (new RightLinearFuzzySet 6 20))
(?temperature addTerm "warm" (new TrapezoidFuzzySet 15 20 25 30))
(?temperature addTerm "hot"  (new LeftLinearFuzzySet 25 50))

(?pressure addTerm "low"    (new RightLinearFuzzySet 0.9 5))
(?pressure addTerm "medium" (new TrapezoidFuzzySet 2 8 14 28))
(?pressure addTerm "high"  (new LeftLinearFuzzySet 22 50))

(deffunction about (?number ?fuzzyVariable)
    (bind ?delta (- (?fuzzyVariable getMaxUOD) (?fuzzyVariable getMinUOD)))
    (new FuzzyValue ?fuzzyVariable 
        (new TriangleFuzzySet 
            (- ?number (* ?delta 0.01))
        ?number   
            (+ ?number (* ?delta 0.01)) 
        )
    )
)

(assert (Temperature (about 43 ?temperature)))

(defrule trivial-rule
    (Temperature ?t & :(fuzzy-match ?t "hot"))
    =>
    (assert (Pressure (new FuzzyValue ?pressure "low")))    
)

(defrule printing
    (Pressure ?p)
    =>
    (printout t (?p plotFuzzyValue "*"))    
)

; (reset)
(run)

我几乎可以肯定代码是正确的,但也许我错了。 我将fuzzyJ-2.0.jar 放在类路径中,就像对jess.jar 所做的那样。但是“找不到构造函数”让我觉得 FuzzyJess 没有正确安装。 也许无法在控制台中运行此文件?只是在日食? 我是一个初学者,请任何提示都会非常有帮助。我想在控制台中制作它的原因是因为我可以制作一个 .bat 来使程序可执行。如果不依赖 Eclipse,我不知道这是否可能。

我也试试这个:

java -classpath "%classpath%";c:\Jess61p4\fuzzyJ-2.0.jar;.\ nrc.fuzzy.jess.FuzzyMain fuzzyE.clp

【问题讨论】:

  • 我不喜欢错误消息中明显的字符编码问题:“??C”。如果没有度数符号,你会得到同样的错误吗?
  • 是的,我删除了度数符号,错误仍然存​​在

标签: java expert-system jess


【解决方案1】:

这看起来只是 FuzzyJ API 的问题,而不是 Jess 的问题;我的意思是错误消息表明您已经正确加载了 FuzzyJ 类,但是您正在运行的 Jess 代码正在寻找您正在使用的 FuzzyJ 库中不存在的方法。多年来有多个版本的 FuzzyJ,而您拥有的版本似乎与您尝试运行的示例代码不匹配。

Here 是一个指向 FuzzyJ 版本的链接,该版本肯定包含该构造函数,还包含 Javadocs,以便您可以自己检查代码;希望这能让你跑步。

【讨论】:

  • 我安装了这个版本,但错误仍然存​​在。也许这是我的类路径?我在同一个变量CLASSPATH中有jess.jar和fuzzyJ110a.jar:C:\Jess61p4\jess.jar;C:\Jess61p4\FuzzyJToolkit\fuzzyJ110a.jar;这样对吗?我认为我没有以正确的方式安装它。 docs zip 中的文件夹呢?我也复制了它们,但在 \FuzzyJToolkit\fuzzyJDocs\APIdocs\nrc\fuzzy\jess 文件是 .html 对吗?
  • 我尝试使用来自 Jess7.1p2(最新版本)的构造函数和 FuzzyJ jar,它工作正常;我想问题是将近 20 年的 Jess 6 不能与 FuzzyJ 一起使用。
  • 你是对的,我用 Jess7.1p2 证明了这一点并且它有效。非常感谢!
猜你喜欢
  • 2023-03-13
  • 2022-01-21
  • 2021-12-08
  • 1970-01-01
  • 2018-10-11
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
相关资源
最近更新 更多