Я новичок в 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