Запустите файлы FuzzyJess в консоли. Является ли это возможным? (новое в Джесс)

Я новичок в Jess, и я выполнял свои файлы .clp на консоли Windows 10 с помощью:

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, чтобы сделать программу исполняемой. Я не знаю, возможно ли это без зависимости от затмения.

Я также пытаюсь с этим:

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

person Madneo31    schedule 01.09.2020    source источник
comment
Мне не нравится проблема с кодировкой символов, очевидная в сообщении об ошибке: ??C. Вы получаете ту же ошибку без знака градуса?   -  person laune    schedule 02.09.2020
comment
Да, я убираю знак градуса, и ошибка продолжается   -  person Madneo31    schedule 02.09.2020


Ответы (1)


Похоже, это просто проблема с FuzzyJ API, а не проблема с Jess; под этим я подразумеваю, что сообщения об ошибках указывают на то, что вы правильно загрузили классы FuzzyJ, но код Jess, который вы запускаете, ищет методы, которых нет в используемой вами библиотеке FuzzyJ. За прошедшие годы было несколько версий FuzzyJ, и ваша версия, похоже, не соответствует коду примера, который вы пытаетесь запустить.

Вот ссылка на версию FuzzyJ, которая определенно содержит это конструктор, а также включает Javadocs, так что вы можете проверить свой код самостоятельно; надеюсь, это заставит вас бежать.

person Ernest Friedman-Hill    schedule 02.09.2020
comment
Я устанавливаю эту версию, но ошибка продолжается. Может быть, это мой classpath? у меня есть и jess.jar, и fuzzyJ110a.jar в одной и той же переменной CLASSPATH: C:\Jess61p4\jess.jar;C:\Jess61p4\FuzzyJToolkit\fuzzyJ110a.jar; Это правильно? Я думаю, что я не устанавливаю это правильно. А как насчет папок в архиве с документами? Я их тоже скопировал, но в \FuzzyJToolkit\fuzzyJDocs\APIdocs\nrc\fuzzy\jess файлы .html, верно? - person Madneo31; 02.09.2020
comment
Я попытался использовать этот конструктор из Jess7.1p2 (последняя версия) и банку FuzzyJ, и он работал нормально; Я предполагаю, что проблема в том, что Jess 6, которой почти 20 лет, не работает с FuzzyJ. - person Ernest Friedman-Hill; 02.09.2020
comment
Вы были правы, я доказываю это с помощью Jess7.1p2, и это работает. Большое спасибо! - person Madneo31; 02.09.2020