rbrain 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/lib/rbrain.rb +85 -81
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e4a24336e395eb28572c7aae82fbc8e4dc90d2cd582e25cb5f0a70a2bedaba6
|
4
|
+
data.tar.gz: e3c8a27c2f788bb849abb78f7be8a60cb15630f0859caa3c3c2f9bc1e670bbb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ca160b64ba9fe15cf4faf38164a59a57b0774b28b8a5690705f486aa27d953610463d42718bc03056ebe7ed12467fc2d8b396cba0820e643165ef28c1fa9b91
|
7
|
+
data.tar.gz: 314e842c0ab79e74a715a741066537d3fa3fbab409c736c9e93eb70e1f49835e79bb205d3d64d4a4f08f6229b742e7f1644066750e937d8b7b95f81d4aa8e3a4
|
data/lib/rbrain.rb
CHANGED
@@ -1,108 +1,112 @@
|
|
1
1
|
class Rbrain
|
2
2
|
|
3
|
-
@threshold = 30
|
4
|
-
def self.init_neuron(id)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
3
|
+
@threshold = 30
|
4
|
+
def self.init_neuron(id)
|
5
|
+
#neuron[id, links, weights, thisstate, nextstate, fired?]
|
6
|
+
neuron = [id, [], [], 0, 0, false]
|
7
|
+
return neuron
|
8
|
+
end
|
9
9
|
|
10
|
-
def self.init_brain(n_count)
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
def self.init_brain(n_count)
|
11
|
+
neurons = []
|
12
|
+
for i in 0..(n_count-1) do
|
13
|
+
neurons << init_neuron(i)
|
14
|
+
end
|
15
|
+
return neurons
|
14
16
|
end
|
15
|
-
return neurons
|
16
|
-
end
|
17
17
|
|
18
|
-
def self.make_connections(brain)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
18
|
+
def self.make_connections(brain)
|
19
|
+
num_conn = 0
|
20
|
+
brain.each do |neuron|
|
21
|
+
0..(rand(1..10)).times do
|
22
|
+
link = rand(1..brain.size-1)
|
23
|
+
weight = rand(1..5)
|
24
|
+
if not neuron[1].include?(link)
|
25
|
+
neuron[1] << link
|
26
|
+
neuron[2] << weight
|
27
|
+
num_conn += 1
|
28
|
+
end
|
28
29
|
end
|
29
30
|
end
|
31
|
+
return num_conn
|
30
32
|
end
|
31
|
-
return num_conn
|
32
|
-
end
|
33
33
|
|
34
|
-
def self.accum_rand_neuron(brain, wt)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
34
|
+
def self.accum_rand_neuron(brain, wt)
|
35
|
+
n = rand(brain.size)
|
36
|
+
brain[n][4] += wt
|
37
|
+
return n
|
38
|
+
end
|
39
39
|
|
40
|
-
def self.fire_neuron(neuron, brain)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
def self.fire_neuron(neuron, brain)
|
41
|
+
fired = false
|
42
|
+
neuron[1].each do |n_link|
|
43
|
+
brain[n_link][4] += neuron[2][n_link] if not neuron[2][n_link].nil?
|
44
|
+
neuron[3] = 0
|
45
|
+
neuron[4] = 0
|
46
|
+
fired = true
|
47
|
+
end
|
48
|
+
return fired
|
47
49
|
end
|
48
|
-
return fired
|
49
|
-
end
|
50
50
|
|
51
|
-
def self.accum_all_neurons(brain, wt)
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
def self.accum_all_neurons(brain, wt)
|
52
|
+
neurons = brain
|
53
|
+
neurons.each do |n|
|
54
|
+
n[4] += wt
|
55
|
+
end
|
55
56
|
end
|
56
|
-
|
57
|
-
def self.update_neuron(
|
57
|
+
|
58
|
+
def self.update_neuron(neuron, brain)
|
58
59
|
fired = false
|
59
|
-
if
|
60
|
-
self.fire_neuron(
|
60
|
+
if neuron[3] >= @threshold
|
61
|
+
self.fire_neuron(neuron, brain)
|
61
62
|
fired = true
|
62
63
|
end
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
neuron[3] += neuron[4]
|
65
|
+
neuron[4] = 0
|
66
|
+
neuron[5] = true
|
66
67
|
return fired
|
67
|
-
end
|
68
|
+
end
|
69
|
+
|
68
70
|
|
69
|
-
def self.print_fired_neurons(neurons)
|
70
|
-
|
71
|
-
|
71
|
+
def self.print_fired_neurons(neurons)
|
72
|
+
neurons.each do |n|
|
73
|
+
puts "Fired #{n[0]}"
|
74
|
+
end
|
72
75
|
end
|
73
|
-
end
|
74
76
|
|
75
|
-
def self.set_threshold(
|
76
|
-
|
77
|
-
end
|
77
|
+
def self.set_threshold(value)
|
78
|
+
@threshold = value
|
79
|
+
end
|
78
80
|
|
79
|
-
def self.get_threshold
|
80
|
-
|
81
|
-
end
|
81
|
+
def self.get_threshold
|
82
|
+
@threshold
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.csv_init_brain(file)
|
86
|
+
data ||= CSV.read(file)
|
87
|
+
neuron_data = {}
|
88
|
+
data.each do |n|
|
89
|
+
k = n[0]
|
90
|
+
v = n[1].to_i
|
91
|
+
neuron_data[k] = v
|
92
|
+
end
|
82
93
|
|
83
|
-
|
84
|
-
|
85
|
-
@neuron_data = {}
|
86
|
-
data.each do |n|
|
87
|
-
k = n[0]
|
88
|
-
v = n[1].to_i
|
89
|
-
@neuron_data[k] = v
|
94
|
+
brain = self.init_brain(neuron_data.size - 1)
|
95
|
+
return neuron_data, brain
|
90
96
|
end
|
91
|
-
return @neuron_data
|
92
|
-
end
|
93
97
|
|
94
|
-
def self.csv_make_connections(brain,
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
98
|
+
def self.csv_make_connections(brain, data, file)
|
99
|
+
no_conn = 0
|
100
|
+
conn_file_data ||= CSV.read(file)
|
101
|
+
conn_file_data.each do |connection|
|
102
|
+
from_id = connection[0]
|
103
|
+
to_id = connection[1]
|
104
|
+
weight = connection[2]
|
105
|
+
brain[data[from_id].to_i][1] << data[to_id].to_i
|
106
|
+
brain[data[from_id].to_i][2] << weight.to_i
|
107
|
+
no_conn += 1
|
108
|
+
end
|
109
|
+
return no_conn
|
104
110
|
end
|
105
|
-
return no_conn
|
106
|
-
end
|
107
111
|
|
108
112
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbrain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Auxilus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: csv
|
@@ -31,7 +31,7 @@ extensions: []
|
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
33
|
- lib/rbrain.rb
|
34
|
-
homepage: https://
|
34
|
+
homepage: https://github.com/Auxilus/rbrain
|
35
35
|
licenses:
|
36
36
|
- MIT
|
37
37
|
metadata: {}
|