Class: Rbrain

Inherits:
Object
  • Object
show all
Defined in:
lib/rbrain.rb

Class Method Summary collapse

Class Method Details

.accum_all_neurons(brain, wt) ⇒ Object



51
52
53
54
55
56
# File 'lib/rbrain.rb', line 51

def self.accum_all_neurons(brain, wt)
  neurons = brain
  neurons.each do |n|
    n[4] += wt
  end
end

.accum_rand_neuron(brain, wt) ⇒ Object



34
35
36
37
38
# File 'lib/rbrain.rb', line 34

def self.accum_rand_neuron(brain, wt)
  n = rand(brain.size)
  brain[n][4] += wt
  return n
end

.csv_init_brain(file) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/rbrain.rb', line 85

def self.csv_init_brain(file)
  data ||= CSV.read(file)
  neuron_data = {}
  data.each do |n|
    k = n[0]
    v = n[1].to_i
    neuron_data[k] = v
  end

  brain = self.init_brain(neuron_data.size - 1)
  return neuron_data, brain
end

.csv_make_connections(brain, data, file) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/rbrain.rb', line 98

def self.csv_make_connections(brain, data, file)
  no_conn = 0
  conn_file_data ||= CSV.read(file)
  conn_file_data.each do |connection|
    from_id = connection[0]
    to_id   = connection[1]
    weight  = connection[2]
    brain[data[from_id].to_i][1] << data[to_id].to_i
    brain[data[from_id].to_i][2] << weight.to_i
    no_conn += 1
  end
  return no_conn
end

.fire_neuron(neuron, brain) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/rbrain.rb', line 40

def self.fire_neuron(neuron, brain)
  fired = false
  neuron[1].each do |n_link|
    brain[n_link][4] += neuron[2][n_link] if not neuron[2][n_link].nil?
    neuron[3] = 0
    neuron[4] = 0
    fired = true
  end
  return fired
end

.get_thresholdObject



81
82
83
# File 'lib/rbrain.rb', line 81

def self.get_threshold
  @threshold
end

.init_brain(n_count) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/rbrain.rb', line 10

def self.init_brain(n_count)
  neurons = []
  for i in 0..(n_count-1) do
    neurons << init_neuron(i)
  end
  return neurons
end

.init_neuron(id) ⇒ Object



4
5
6
7
8
# File 'lib/rbrain.rb', line 4

def self.init_neuron(id)
  #neuron[id, links, weights, thisstate, nextstate, fired?]
  neuron = [id, [], [], 0, 0, false]
  return neuron
end

.make_connections(brain) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rbrain.rb', line 18

def self.make_connections(brain)
  num_conn = 0
  brain.each do |neuron|
    0..(rand(1..10)).times do  
      link = rand(1..brain.size-1)
      weight = rand(1..5)
      if not neuron[1].include?(link)
        neuron[1] << link
        neuron[2] << weight
 num_conn += 1
      end
    end
  end
  return num_conn
end


71
72
73
74
75
# File 'lib/rbrain.rb', line 71

def self.print_fired_neurons(neurons)
  neurons.each do |n|
    puts "Fired #{n[0]}" if n[5]
  end
end

.set_threshold(value) ⇒ Object



77
78
79
# File 'lib/rbrain.rb', line 77

def self.set_threshold(value)
  @threshold = value
end

.update_neuron(neuron, brain) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rbrain.rb', line 58

def self.update_neuron(neuron, brain)
  fired = false
  if neuron[3] >= @threshold
    self.fire_neuron(neuron, brain)
    fired = true
  end
  neuron[3] += neuron[4]
  neuron[4] = 0
  neuron[5] = true if fired
  return fired
end