Class: Fuzzyrb::FuzzyRule

Inherits:
Object
  • Object
show all
Defined in:
lib/fuzzy_rule.rb

Instance Method Summary collapse

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