在控制台中运行FuzzyJess文件可能吗? Jess的新功能

问题描述

我是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)

我几乎可以肯定代码是正确的,但是也许我错了。 我像对jess.jar一样,将FuzzyJ-2.0.jar放在类路径中。但是,“找不到构造函数”使我认为FuzzyJess没有正确安装。 也许无法在控制台中运行此文件?只是在日食? 我是一个乞讨者,请给我任何提示。我想在控制台中制作它的原因是因为我可以制作一个.bat文件来使程序可执行。我不知道在没有日食的情况下是否有可能。

我也尝试这样做:

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

解决方法

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

Here是指向FuzzyJ版本的链接,该版本肯定包含该构造函数,并且还包含Javadocs,以便您可以自己检查代码。希望这可以让您运行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...