【发布时间】: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