lib/bayesnet/node.rb in bayesnet-0.0.3 vs lib/bayesnet/node.rb in bayesnet-0.1.0
- old
+ new
@@ -22,22 +22,34 @@
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
+
+ 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(&block)
+ instance_eval(&proc)
end
end
def distributions(&block)
instance_eval(&block)
+ end
+
+ def parameters
+ (values.size - 1) * parent_nodes.values.reduce(1) { |mul, n| mul * n.values.size }
end
def as(distribution, given:)
@values.zip(distribution).each do |value, probability|
@factor.val [value] + given + [probability]