Sha256: aabfbe1a7e602d2e2775d704b6266eef6eee04fe291c5b85ba856e01abd6e5c8

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

module Sbn
  class Net
    attr_reader :name, :variables
    
    def initialize(name = '')
      @@net_count ||= 0
      @@net_count += 1
      @name = (name.empty? ? "net_#{@@net_count}" : name.to_underscore_sym)
      @variables = {}
      @evidence = {}
    end

    def ==(obj); test_equal(obj); end
    def eql?(obj); test_equal(obj); end
    def ===(obj); test_equal(obj); end
  
    def add_variable(variable)
      name = variable.name
      if @variables.has_key? name
        raise "Variable of name #{name} has already been added to this net"
      end
      @variables[name] = variable
    end
    
    def symbolize_evidence(evidence) # :nodoc:
      newevidence = {}
      evidence.each do |key, val|
        key = key.to_underscore_sym
        raise "Invalid variable name #{key}." unless @variables.has_key?(key)
        newevidence[key] = @variables[key].transform_evidence_value(val)
      end
      newevidence
    end
    
    def set_evidence(event)
      @evidence = symbolize_evidence(event)
    end

  private
    def test_equal(net)
      returnval = true
      returnval = false unless net.class == self.class and self.class == Net
      returnval = false unless net.name == @name
      returnval = false unless @variables.keys.map {|k| k.to_s}.sort == net.variables.keys.map {|k| k.to_s}.sort
      net.variables.each {|name, variable| returnval = false unless variable == @variables[name] }
      returnval
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sbn-0.9.1 lib/sbn/net.rb