netica 0.0.6-java → 0.0.7-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -67,6 +67,10 @@ Then, re-read the value of the Belief node.
67
67
 
68
68
  ## Release Notes
69
69
 
70
+ ### Version 0.0.7
71
+
72
+ * Added Node Set identification and collection to BayesNetwork
73
+
70
74
  ### Version 0.0.6
71
75
 
72
76
  * Changed BayesNetwork#getNode to BayesNetwork#node
@@ -3,6 +3,9 @@ module Netica
3
3
 
4
4
  # provides a persistable object container for a Netica Bayes net.
5
5
  class ActiveNetwork
6
+ class ActiveNetwork::NodeNotFound < RuntimeError; end
7
+ class ActiveNetwork::NetworkNotFound < RuntimeError; end
8
+
6
9
  attr_accessor :network, :token
7
10
 
8
11
  def initialize(token, filepath = nil)
@@ -24,7 +27,16 @@ module Netica
24
27
  # @param nodeName [String] name of the node to be incremented
25
28
  # @return [true,false,nil] outcome of the incr() attempt
26
29
  def incr_node(nodeName)
27
- network.node(nodeName).incr() if network
30
+ if network
31
+ node = network.node(nodeName)
32
+ if node
33
+ return node.incr()
34
+ else
35
+ raise ActiveNetwork::NodeNotFound
36
+ end
37
+ else
38
+ raise ActiveNetwork::NetworkNotFound
39
+ end
28
40
  end
29
41
 
30
42
  # Export the state of the ActiveNetwork as a Hash
@@ -56,6 +68,7 @@ module Netica
56
68
  Netica::Environment.instance.active_networks.each do |an|
57
69
  return an if an.token == token
58
70
  end
71
+ Netica::NeticaLogger.info "Network #{token} not found in current instance."
59
72
  if Netica::Environment.instance.redis
60
73
  stored_state = Netica::Environment.instance.redis.get(token)
61
74
  if stored_state
@@ -63,6 +76,8 @@ module Netica
63
76
  active_network = Object.const_get(hash['class']).new(token)
64
77
  active_network.load_from_saved_state(hash)
65
78
  return active_network
79
+ else
80
+ Netica::NeticaLogger.info "Network #{token} not found in redis."
66
81
  end
67
82
  end
68
83
  return nil
@@ -74,7 +89,7 @@ module Netica
74
89
  # @return [Hash] network state and object class name
75
90
  def load_from_saved_state(hash)
76
91
  self.network = BayesNetwork.new(hash["network"]["dne_file_path"])
77
- network.load_from_state(hash["network"])
92
+ self.network.load_from_state(hash["network"])
78
93
  end
79
94
  end
80
95
  end
@@ -1,5 +1,7 @@
1
1
  module Netica
2
2
  class BayesNetwork
3
+ require 'json'
4
+
3
5
  attr_accessor :current_network, :dne_file_path
4
6
 
5
7
  def initialize(dne_file_path = nil)
@@ -30,9 +32,18 @@ module Netica
30
32
  nodes.collect{ |n| n if n.nature_node? }.compact
31
33
  end
32
34
 
35
+ def node_sets
36
+ current_network.getAllNodesets(false).split(",").collect{|ns_name| node_set(ns_name)}
37
+ end
38
+
39
+ def node_set(name)
40
+ nodes.collect{ |n| n if n.isInNodeset(name) }.compact.sort{|a,b| b.beliefs <=> a.beliefs }
41
+ end
42
+
33
43
  def load_from_state(network_hash)
34
- NeticaLogger.info "network_hash => #{network_hash}"
44
+ NeticaLogger.info "Loading state from network_hash => #{network_hash}"
35
45
  network_hash["decision_nodes"].each do |node_name, node_value|
46
+ NeticaLogger.info "Setting #{node_name} => #{node_value}"
36
47
  node(node_name).value = node_value
37
48
  end
38
49
  end
@@ -47,15 +58,29 @@ module Netica
47
58
  node_hash
48
59
  end
49
60
 
61
+ # def analyze(json)
62
+ # analysis_hash = JSON.parse(json)
63
+ # analysis_hash['input_nodes'].each do |nodeName, value|
64
+ # node(nodeName).enterValue(value)
65
+ # end
66
+ #
67
+ # outcome = {}
68
+ # analysis_hash['output_nodes'].each do |nodeName|
69
+ # outcome[nodeName] = node(nodeName).value
70
+ # end
71
+ # outcome
72
+ # #JSON.dump(:results => outcome)
73
+ # end
74
+
50
75
  private
51
76
 
52
77
  def load_dne_file
53
78
  NeticaLogger.info "Looking for BayesNet .dne file at #{dne_file_path}..."
54
79
  streamer = Java::NorsysNetica::Streamer.new(dne_file_path)
55
80
  self.current_network = Java::NorsysNetica::Net.new(streamer)
56
- self.current_network.compile()
57
81
  NeticaLogger.info "Initialized BayesNet -- #{self.current_network.object_id}"
58
82
  self.decision_nodes.each{ |n| n.value = 0 }
83
+ self.current_network.compile()
59
84
  end
60
85
  end
61
86
  end
data/lib/netica/node.rb CHANGED
@@ -7,12 +7,12 @@ class Java::NorsysNetica::Node
7
7
  Java::NorsysNetica::Node::DECISION_NODE => :decision,
8
8
  Java::NorsysNetica::Node::UTILITY_NODE => :utility,
9
9
  Java::NorsysNetica::Node::CONSTANT_NODE => :constant,
10
- Java::NorsysNetica::Node::DISCONNECTED_NODE => :disconnected,
10
+ Java::NorsysNetica::Node::DISCONNECTED_NODE => :disconnected
11
11
  }
12
12
 
13
13
  NODE_TYPES = {
14
14
  Java::NorsysNetica::Node::DISCRETE_TYPE => :nature,
15
- Java::NorsysNetica::Node::CONTINUOUS_TYPE => :decision,
15
+ Java::NorsysNetica::Node::CONTINUOUS_TYPE => :decision
16
16
  }
17
17
 
18
18
  def name
@@ -60,11 +60,14 @@ class Java::NorsysNetica::Node
60
60
  end
61
61
 
62
62
  def value=(new_value)
63
- Netica::NeticaLogger.info "Setting #{self.name} to #{new_value}"
64
63
  if decision_node?
64
+ Netica::NeticaLogger.info "Decision Node: Setting #{kind} #{type} node #{self.name} to #{new_value}"
65
65
  finding().setReal(new_value)
66
66
  elsif nature_node?
67
+ Netica::NeticaLogger.info "Nature Node: Setting #{kind} #{type} node #{self.name} to #{new_value}"
67
68
  finding.enterState(new_value)
69
+ else
70
+ throw "Could not set value for #{kind} #{type} node #{self.name} to #{new_value}"
68
71
  end
69
72
  end
70
73
 
@@ -1,3 +1,3 @@
1
1
  module Netica
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netica
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: java
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-23 00:00:00.000000000 Z
12
+ date: 2013-05-16 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Netica Bayes Network Management
15
15
  email: