nrc.fuzzy.jess
Class FuzzyFunctions.FuzzyRuleSimilarity
java.lang.Object
|
+--nrc.fuzzy.jess.FuzzyFunctions.FuzzyRuleSimilarity
- All Implemented Interfaces:
- jess.Userfunction
- Enclosing class:
- FuzzyFunctions
- public class FuzzyFunctions.FuzzyRuleSimilarity
- extends java.lang.Object
- implements jess.Userfunction
Userfunction class:
Implements the Jess user function (fuzzy-rule-similarity)
The function returns a value between 0.0 and 1.0 which indicates the overall fuzzy
similarity of the patterns that matched on the left hand side (LHS) of a rule, if the
function is called from the right hand side (RHS) of a rule. If not called from the
RHS of a rule it will always return 0.0. The value is determined by calcualting
the minimum (or product -- depends on the current rule's antecedentCombineOperator)
similarity of all of the fuzzy matches that were made on the LHS of
the rule. If there were no fuzzy matches on the LHS of the rule a value of 1.0 is
returned.
This is used in Jess rules to determine the similarity with which fuzzy patterns on
LHS matched. This can serve as the basis for a certainty factor or degree of
confidence for non-fuzzy facts asserted on the RHS of a rule (as in FuzzyCLIPS)
or for other user defined purposes. Consider the simple example below.
;; A simple example to test a complete FuzzyJess program (no Java code at all).
;;
;;
;; Note: future versions (beyond 5.0a5) of Jess will allow us to use --
;;
;; (new FuzzyValue ... )
;; etc.
;;
;; will no longer always need to fully qualify the classes!
;;
;; Example as shown will give result ...
;;
;; Jack is tall with degree (similarity) 0.5363321799307958
;; Jack is tall with degree (match) 0.588235294117647
;; Randy is tall with degree (similarity) 1.0
;; Randy is tall with degree (match) 1.0
;; Ralph is tall with degree (similarity) 0.4117647058823532
;; Ralph is tall with degree (match) 0.49999999999999994
(defglobal ?*heightFvar* = (new nrc.fuzzy.FuzzyVariable "height" 0.0 10.0 "feet"))
(defglobal ?*rlf* = (new nrc.fuzzy.RightLinearFunction))
(defglobal ?*llf* = (new nrc.fuzzy.LeftLinearFunction))
(deftemplate person
(slot name)
(slot height)
)
(defrule init
(declare (salience 100))
=>
(load-package nrc.fuzzy.jess.FuzzyFunctions)
(?*heightFvar* addTerm "short" (new nrc.fuzzy.RFuzzySet 0.0 5.0 ?*rlf*))
(?*heightFvar* addTerm "medium" (new nrc.fuzzy.TrapezoidFuzzySet 4.0 4.8 5.5 6.0))
(?*heightFvar* addTerm "tall" (new nrc.fuzzy.LFuzzySet 5.5 6.0 ?*llf*))
(assert (person (name "Ralph")
(height (new nrc.fuzzy.FuzzyValue ?*heightFvar*
(new nrc.fuzzy.PIFuzzySet 5.7 0.1)))
)
(person (name "Timothy")
(height (new nrc.fuzzy.FuzzyValue ?*heightFvar*
(new nrc.fuzzy.PIFuzzySet 4.0 0.1)))
)
(person (name "Randy")
(height (new nrc.fuzzy.FuzzyValue ?*heightFvar*
(new nrc.fuzzy.PIFuzzySet 6.5 0.1)))
)
(person (name "Jack")
(height (new nrc.fuzzy.FuzzyValue ?*heightFvar*
(new nrc.fuzzy.PIFuzzySet 5.75 0.1)))
)
)
)
(defrule identify-tall-people "determine strength of tallness for a person"
(person (name ?n) (height ?ht&:(fuzzy-match ?ht "tall")))
=>
(printout t ?n " is tall with degree (similarity) " (fuzzy-rule-similarity) crlf)
(printout t ?n " is tall with degree (match) " (fuzzy-rule-match-score) crlf)
)
Note that the similar function 'fuzzy-rule-match-score' returns the overall
(minimum or product) fuzzy-match between patterns on the RHS of the rule (depends on the rule's
antecedentCombineOperator -- minimum or product of the values). In fuzzyCLIPS
this value would be used as the certainty factor for fuzzy facts asserted
on the RHS of rules, and the fuzzy-rule-similarity would be used as the
certainty factor for non-fuzzy (crisp) facts asserted on the RHS of rules.
Method Summary |
jess.Value |
call(jess.ValueVector vv,
jess.Context context)
|
java.lang.String |
getName()
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
FuzzyFunctions.FuzzyRuleSimilarity
public FuzzyFunctions.FuzzyRuleSimilarity()
getName
public java.lang.String getName()
- Specified by:
getName
in interface jess.Userfunction
- Returns:
- String the name of the Jess function
call
public jess.Value call(jess.ValueVector vv,
jess.Context context)
throws jess.JessException
- Specified by:
call
in interface jess.Userfunction
- Parameters:
vv
- a ValueVectorcontext
-
- Returns:
- Value the similarity measure for the rule.
- Throws:
jess.JessException