Class: Fuzzyrb::FuzzyRule
- Inherits:
-
Object
- Object
- Fuzzyrb::FuzzyRule
- Defined in:
- lib/fuzzy_rule.rb
Instance Method Summary collapse
-
#evaluate(values, params) ⇒ Object
Evaluates rule.
-
#initialize(arguments, result) ⇒ FuzzyRule
constructor
Creates rule.
Constructor Details
#initialize(arguments, result) ⇒ FuzzyRule
Creates rule. First argument is an Array of premises (FuzzySet
). Second is result. It is either FuzzySet
or Proc
.
6 7 8 9 |
# File 'lib/fuzzy_rule.rb', line 6 def initialize(arguments, result) @arguments = arguments @result = result end |
Instance Method Details
#evaluate(values, params) ⇒ Object
Evaluates rule. Required parameters:
-
:t_norm
- t_norm to use.:min
for minimum or:mult
for multiplication -
:implication
- implication to use. Either:mamdani
,:larsen
, or:takegiSugeno
. If you use:takegiSugeno
make sure that rule result is a Proc.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fuzzy_rule.rb', line 18 def evaluate(values, params) if params[:t_norm] == :min val = argumentsValues(values).min elsif params[:t_norm] == :mult val = argumentsValues(values).inject(1) { |mult, v| mult*v} elsif raise Exception.new("Invalid t_norm") end if params[:implication] == :mamdani return @result.min(val) elsif params[:implication] == :larsen return @result.scale(val) elsif params[:implication] == :takagiSugeno #rule value and certainity return [@result.call(values), val] else raise Exception.new("Invalid type") end end |