class Bayesnet::Node
Attributes
factor[R]
name[R]
parent_nodes[R]
Public Class Methods
new(name, parent_nodes)
click to toggle source
# File lib/bayesnet/node.rb, line 5 def initialize(name, parent_nodes) @name = name @parent_nodes = parent_nodes @values = [] end
Public Instance Methods
as(distribution, given:)
click to toggle source
# File lib/bayesnet/node.rb, line 54 def as(distribution, given:) @values.zip(distribution).each do |value, probability| @factor.val [value] + given + [probability] end end
distributions(&block)
click to toggle source
# File lib/bayesnet/node.rb, line 46 def distributions(&block) instance_eval(&block) end
parameters()
click to toggle source
# File lib/bayesnet/node.rb, line 50 def parameters (values.size - 1) * parent_nodes.values.reduce(1) { |mul, n| mul * n.values.size } end
resolve_factor(parent_nodes)
click to toggle source
# File lib/bayesnet/node.rb, line 31 def resolve_factor(parent_nodes) @parent_nodes = parent_nodes if @factor.is_a?(Proc) proc = @factor node = self @factor = Factor.build do scope node.name => node.values node.parent_nodes.each do |parent_node_name, parent_node| scope parent_node_name => parent_node.values end end instance_eval(&proc) end end
values(hash_or_array = nil, &block)
click to toggle source
# File lib/bayesnet/node.rb, line 11 def values(hash_or_array = nil, &block) case hash_or_array when NilClass @values when Hash @values = hash_or_array.keys node = self @factor = Factor.build do scope node.name => node.values hash_or_array.each do |value, probability| val [value, probability] end end when Array raise Error, "DSL error, #values requires a &block when first argument is an Array" unless block @values = hash_or_array @factor = block end end