Class: FuzzyLogic
- Inherits:
-
Object
- Object
- FuzzyLogic
- Defined in:
- lib/fuzzy_logic.rb
Overview
player_logic.hp(15) => [[:dieing, 0.75], [:healthy, 0.0]]
Instance Attribute Summary collapse
-
#consequences ⇒ Object
readonly
:nodoc:.
Instance Method Summary collapse
- #add_classification(attribute, classification, options = {}) ⇒ Object
- #add_consequence(consequence, classifications = {}) ⇒ Object
- #consequences_of(options = {}) ⇒ Object
-
#initialize ⇒ FuzzyLogic
constructor
A new instance of FuzzyLogic.
- #parse_fuzzy_file(file_name) ⇒ Object
-
#update(object) ⇒ Object
The algorithm always performs an action on update.
Constructor Details
#initialize ⇒ FuzzyLogic
Returns a new instance of FuzzyLogic.
11 12 13 14 |
# File 'lib/fuzzy_logic.rb', line 11 def initialize @attributes = {} @consequences = {} end |
Instance Attribute Details
#consequences ⇒ Object (readonly)
:nodoc:
10 11 12 |
# File 'lib/fuzzy_logic.rb', line 10 def consequences @consequences end |
Instance Method Details
#add_classification(attribute, classification, options = {}) ⇒ Object
21 22 23 24 |
# File 'lib/fuzzy_logic.rb', line 21 def add_classification( attribute, classification, = {} ) define_attribute(attribute) if(@attributes[attribute].nil?) define_interpolator(attribute,classification,) end |
#add_consequence(consequence, classifications = {}) ⇒ Object
16 17 18 19 |
# File 'lib/fuzzy_logic.rb', line 16 def add_consequence( consequence, classifications={} ) @consequences[classifications] ||= [] @consequences[classifications] += [consequence] end |
#consequences_of(options = {}) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/fuzzy_logic.rb', line 26 def consequences_of(={}) # transform the passed in attributes to probability sets valid_sequences = [] .each_pair do |attribute, value| valid_sequences << {attribute => classifications_of(attribute,value)} end # combine the probability sets valid_combinations = compile_consequence_combinations(valid_sequences) # realize the consequences of the combined probability sets return consequences_of_combinations(valid_combinations) end |
#parse_fuzzy_file(file_name) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/fuzzy_logic.rb', line 38 def parse_fuzzy_file( file_name ) file_name += ".yaml" if not(file_name =~ /\.yaml$/) raise ArgumentError, "Cannot find #{file_name}" if not(File.file? file_name) begin fuzzy_file = YAML::load(File.open(file_name)) rescue ArgumentError => bang raise ArgumentError, "Error when loading #{file_name} : #{bang.}" end parse_attributes(fuzzy_file) add_consequences_from_parsed(parse_consequences(fuzzy_file['consequences'])) end |
#update(object) ⇒ Object
The algorithm always performs an action on update.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/fuzzy_logic.rb', line 51 def update(object) status = {} @attributes.each_pair do |attribute, classifications| status.merge!({attribute => object.send(attribute)}) end consequences = consequences_of(status) total_probability = 0 consequences.each_pair do |actions, probability| total_probability+=probability end action_at_probability = rand*total_probability total_probability = 0 consequences.each_pair do |actions, probability| total_probability += probability if( action_at_probability < total_probability ) actions.each do |action| object.send(action) end break end end end |