@@ -56,14 +56,17 @@ public override void Initialize()
5656 private void AddSynapses ( )
5757 {
5858 //rows with hard-coded functionality
59- int inputRow = 6 ;
60- int outputRow = 8 ;
61- int thisCol = 9 ;
62- int recur = 10 ;
63- int isa = 11 ;
64- int has_inst = 12 ;
65- int has_a = 13 ;
66- int part_of = 14 ;
59+ const int activateRow = 4 ;
60+ const int deActivateRo2 = 5 ;
61+ const int inputRow = 6 ;
62+ const int desOutRow = 7 ; //desired output
63+ const int outputRow = 8 ;
64+ const int thisCol = 9 ;
65+ const int recur = 10 ;
66+ const int isa = 11 ;
67+ const int has_inst = 12 ;
68+ const int has_a = 13 ;
69+ const int part_of = 14 ;
6770
6871 Init ( ) ;
6972 //ClearNeurons(false);
@@ -72,74 +75,76 @@ private void AddSynapses()
7275 int colNum = 0 ;
7376 foreach ( var module in theNeuronArray . modules )
7477 {
75- if ( module . Label == "CorticalColumn" && module . FirstNeuron < mv . FirstNeuron )
78+ if ( module . Label == "CorticalColumn" && module . FirstNeuron < mv . FirstNeuron )
7679 colNum ++ ;
7780 }
7881
79- mv . GetNeuronAt ( 0 , 0 ) . Label = "Col" + colNum ;
82+ mv . GetNeuronAt ( 0 ) . Label = "Col" + colNum ;
8083 Neuron n = theNeuronArray . GetNeuron ( "Request" ) ;
8184 if ( n != null )
82- n . AddSynapse ( mv . GetNeuronAt ( 0 , 0 ) . id , 1 ) ;
85+ n . AddSynapse ( mv . GetNeuronAt ( 0 ) . id , 1 ) ;
8386
84- mv . GetNeuronAt ( 0 , 0 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 1 ) . id , .2f , Synapse . modelType . Hebbian3 ) ;
85- mv . GetNeuronAt ( 0 , 0 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 2 ) . id , 1 ) ;
86- mv . GetNeuronAt ( 0 , 1 ) . Model = Neuron . modelType . LIF ;
87- mv . GetNeuronAt ( 0 , 1 ) . LeakRate = 0.3f ;
88- mv . GetNeuronAt ( 0 , 1 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 2 ) . id , - 1 ) ;
89- mv . GetNeuronAt ( 0 , 1 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 3 ) . id , - 1 ) ;
90- mv . GetNeuronAt ( 0 , 2 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 3 ) . id , 1 ) ;
91- mv . GetNeuronAt ( 0 , 3 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 4 ) . id , 1 ) ;
87+ mv . GetNeuronAt ( 0 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 1 ) . id , .2f , Synapse . modelType . Hebbian3 ) ;
88+ mv . GetNeuronAt ( 0 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 2 ) . id , 1 ) ;
89+ mv . GetNeuronAt ( 1 ) . Model = Neuron . modelType . LIF ;
90+ mv . GetNeuronAt ( 1 ) . LeakRate = 0.3f ;
91+ mv . GetNeuronAt ( 1 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 2 ) . id , - 1 ) ;
92+ mv . GetNeuronAt ( 0 , 1 ) . AddSynapse ( mv . GetNeuronAt ( 3 ) . id , - 1 ) ;
93+ mv . GetNeuronAt ( 0 , 2 ) . AddSynapse ( mv . GetNeuronAt ( 3 ) . id , 1 ) ;
94+ mv . GetNeuronAt ( 0 , 3 ) . AddSynapse ( mv . GetNeuronAt ( 4 ) . id , 1 ) ;
9295
9396 foreach ( var module in theNeuronArray . modules )
9497 {
9598 if ( module . ModuleTypeStr . Contains ( "CorticalColumn" ) && module . FirstNeuron > mv . FirstNeuron )
9699 {
97- mv . GetNeuronAt ( 0 , 3 ) . AddSynapse ( module . FirstNeuron + 4 , - 1 ) ;
100+ mv . GetNeuronAt ( 3 ) . AddSynapse ( module . FirstNeuron + 4 , - 1 ) ;
98101 }
99102 }
100103
101- mv . GetNeuronAt ( 0 , 4 ) . Label = "Act" + colNum ;
102- mv . GetNeuronAt ( 0 , 4 ) . Model = Neuron . modelType . Burst ;
103- mv . GetNeuronAt ( 0 , 4 ) . AxonDelay = 7 ;
104- mv . GetNeuronAt ( 0 , 4 ) . LeakRate = 4 ;
104+ mv . GetNeuronAt ( 4 ) . Label = "Act" + colNum ;
105+ mv . GetNeuronAt ( 4 ) . Model = Neuron . modelType . Burst ;
106+ mv . GetNeuronAt ( 4 ) . AxonDelay = 7 ;
107+ mv . GetNeuronAt ( 4 ) . LeakRate = 4 ;
105108
106- mv . GetNeuronAt ( 0 , 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 0 ) . id , 1 ) ;
107- mv . GetNeuronAt ( 0 , 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 1 ) . id , 1 ) ;
108- mv . GetNeuronAt ( 0 , 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 6 ) . id , 1 , Synapse . modelType . Learn ) ;
109- mv . GetNeuronAt ( 0 , 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 , 7 ) . id , 1 , Synapse . modelType . Learn ) ;
109+ mv . GetNeuronAt ( 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 ) . id , 1 ) ;
110+ mv . GetNeuronAt ( 4 ) . AddSynapse ( mv . GetNeuronAt ( 1 ) . id , 1 ) ;
111+ mv . GetNeuronAt ( 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 , inputRow ) . id , 1 , Synapse . modelType . Learn ) ;
112+ mv . GetNeuronAt ( 4 ) . AddSynapse ( mv . GetNeuronAt ( 0 , desOutRow ) . id , 1 , Synapse . modelType . Learn ) ;
110113
111114 mv . GetNeuronAt ( 5 ) . Label = "De" + colNum ;
112115 mv . GetNeuronAt ( 5 ) . Model = Neuron . modelType . Burst ;
113116 mv . GetNeuronAt ( 5 ) . AxonDelay = 5 ;
114117 mv . GetNeuronAt ( 5 ) . LeakRate = 4 ;
115118 mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( 1 ) . id , - 1 , Synapse . modelType . Learn ) ;
116- mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( 6 ) . id , - 1 , Synapse . modelType . Learn ) ;
117- mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( 7 ) . id , - 1 , Synapse . modelType . Learn ) ;
118- mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( 8 ) . id , - 1 , Synapse . modelType . Learn ) ;
119-
120- mv . GetNeuronAt ( 6 ) . Label = "In" + colNum ;
121- mv . GetNeuronAt ( 6 ) . Model = Neuron . modelType . LIF ;
122- mv . GetNeuronAt ( 6 ) . LeakRate = .3f ;
119+ mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( inputRow ) . id , - 1 , Synapse . modelType . Learn ) ;
120+ mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( desOutRow ) . id , - 1 , Synapse . modelType . Learn ) ;
121+ mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( outputRow ) . id , - 1 , Synapse . modelType . Learn ) ;
122+ mv . GetNeuronAt ( 5 ) . AddSynapse ( mv . GetNeuronAt ( part_of ) . id , - 1 , Synapse . modelType . Learn ) ;
123+
124+ mv . GetNeuronAt ( inputRow ) . Label = "In" + colNum ;
125+ mv . GetNeuronAt ( inputRow ) . Model = Neuron . modelType . LIF ;
126+ mv . GetNeuronAt ( inputRow ) . LeakRate = .3f ;
123127 n = theNeuronArray . GetNeuron ( "in-fired" ) ;
124128 if ( n != null )
125- mv . GetNeuronAt ( 6 ) . AddSynapse ( n . id , 1 ) ;
129+ mv . GetNeuronAt ( inputRow ) . AddSynapse ( n . id , 1 ) ;
126130 for ( int i = thisCol ; i < part_of ; i ++ )
127131 if ( i != recur )
128132 mv . GetNeuronAt ( inputRow ) . AddSynapse ( mv . GetNeuronAt ( i ) . id , 1 ) ;
129- mv . GetNeuronAt ( 7 ) . AddSynapse ( mv . GetNeuronAt ( recur ) . id , 1 ) ;
130- mv . GetNeuronAt ( 8 ) . AddSynapse ( mv . GetNeuronAt ( recur ) . id , 1 ) ;
131-
132- mv . GetNeuronAt ( 7 ) . Label = "In" + colNum + "*" ;
133- mv . GetNeuronAt ( 7 ) . Model = Neuron . modelType . LIF ;
134- mv . GetNeuronAt ( 7 ) . LeakRate = .3f ;
135- mv . GetNeuronAt ( 7 ) . AddSynapse ( mv . GetNeuronAt ( 8 ) . id , 1 , Synapse . modelType . Learn ) ;
136-
137- mv . GetNeuronAt ( 8 ) . Label = "Out" + colNum ;
138- mv . GetNeuronAt ( 8 ) . Model = Neuron . modelType . LIF ;
139- mv . GetNeuronAt ( 8 ) . LeakRate = .3f ;
133+
134+ mv . GetNeuronAt ( outputRow ) . AddSynapse ( mv . GetNeuronAt ( recur ) . id , 1 ) ;
135+
136+ mv . GetNeuronAt ( desOutRow ) . Label = "In" + colNum + "*" ;
137+ mv . GetNeuronAt ( desOutRow ) . Model = Neuron . modelType . LIF ;
138+ mv . GetNeuronAt ( desOutRow ) . LeakRate = .3f ;
139+ //mv.GetNeuronAt(desOutRow).AddSynapse(mv.GetNeuronAt(outputRow).id, 1, Synapse.modelType.Learn);
140+ mv . GetNeuronAt ( desOutRow ) . AddSynapse ( mv . GetNeuronAt ( part_of ) . id , 1 , Synapse . modelType . Learn ) ;
141+
142+ mv . GetNeuronAt ( outputRow ) . Label = "Out" + colNum ;
143+ mv . GetNeuronAt ( outputRow ) . Model = Neuron . modelType . LIF ;
144+ mv . GetNeuronAt ( outputRow ) . LeakRate = .3f ;
140145 n = theNeuronArray . GetNeuron ( "out-fired" ) ;
141146 if ( n != null )
142- mv . GetNeuronAt ( 8 ) . AddSynapse ( n . id , 1 ) ;
147+ mv . GetNeuronAt ( outputRow ) . AddSynapse ( n . id , 1 ) ;
143148
144149 //find all neurons in theNeuronArray with labels starting with "
145150 string labelPrefix = "\" " ; // Replace with desired prefix
@@ -149,26 +154,25 @@ private void AddSynapses()
149154 Neuron neuron = theNeuronArray . GetNeuron ( i ) ;
150155 if ( neuron != null && neuron . Label != null && neuron . Label . StartsWith ( labelPrefix ) )
151156 {
152- neuron . AddSynapse ( mv . GetNeuronAt ( 6 ) . id , .2f , Synapse . modelType . Hebbian3 ) ;
153- Neuron neuron2 = theNeuronArray . GetNeuron ( i + 2 * theNeuronArray . rows ) ;
154- neuron2 . AddSynapse ( mv . GetNeuronAt ( 7 ) . id , .2f , Synapse . modelType . Hebbian3 ) ;
157+ neuron . AddSynapse ( mv . GetNeuronAt ( inputRow ) . id , .2f , Synapse . modelType . Hebbian3 ) ;
158+ Neuron neuron2 = theNeuronArray . GetNeuron ( i + 2 * theNeuronArray . rows ) ;
159+ neuron2 . AddSynapse ( mv . GetNeuronAt ( desOutRow ) . id , .2f , Synapse . modelType . Hebbian3 ) ;
155160 Neuron neuron3 = theNeuronArray . GetNeuron ( i + 4 * theNeuronArray . rows ) ;
156- mv . GetNeuronAt ( 8 ) . AddSynapse ( neuron3 . id , .2f , Synapse . modelType . Hebbian3 ) ;
161+ mv . GetNeuronAt ( outputRow ) . AddSynapse ( neuron3 . id , .2f , Synapse . modelType . Hebbian3 ) ;
157162 }
158163 }
159164
160-
161165 //this relationship...transfer input to output
162166 Neuron nThis = theNeuronArray . GetNeuron ( "this" ) ;
163167 if ( nThis == null ) return ;
164168 nThis . AddSynapse ( mv . GetNeuronAt ( thisCol ) . id , 1 , Synapse . modelType . Gate ) ;
165- mv . GetNeuronAt ( thisCol ) . AddSynapse ( mv . GetNeuronAt ( 8 ) . id , 1 ) ;
169+ mv . GetNeuronAt ( thisCol ) . AddSynapse ( mv . GetNeuronAt ( outputRow ) . id , 1 ) ;
166170
167171 //recur relationship...transfer output to input
168172 Neuron nRecur = theNeuronArray . GetNeuron ( "recur" ) ;
169173 if ( nRecur == null ) return ;
170174 nRecur . AddSynapse ( mv . GetNeuronAt ( recur ) . id , 1 , Synapse . modelType . Gate ) ;
171- mv . GetNeuronAt ( recur ) . AddSynapse ( mv . GetNeuronAt ( 6 ) . id , 1 ) ;
175+ mv . GetNeuronAt ( recur ) . AddSynapse ( mv . GetNeuronAt ( inputRow ) . id , 1 ) ;
172176
173177 //Isa Relationships
174178 bool flowControl = AddFixedRelationshipRow ( outputRow , has_inst , "has-inst" ) ;
@@ -177,7 +181,7 @@ private void AddSynapses()
177181 flowControl = AddFixedRelationshipRow ( outputRow , has_a , "has-a" ) ;
178182 if ( ! flowControl )
179183 return ;
180- flowControl = AddFixedRelationshipRow ( outputRow , isa , "is-a" ) ;
184+ flowControl = AddFixedRelationshipRow ( outputRow , isa , "is-a" ) ;
181185 if ( ! flowControl )
182186 return ;
183187
@@ -186,13 +190,18 @@ private void AddSynapses()
186190 if ( nSource is null ) return ;
187191 nSource . AddSynapse ( mv . GetNeuronAt ( part_of ) . id , 1 , Synapse . modelType . Gate ) ;
188192 mv . GetNeuronAt ( part_of ) . AddSynapse ( mv . GetNeuronAt ( outputRow ) . id , 1 ) ;
189-
193+ mv . GetNeuronAt ( part_of ) . Model = Neuron . modelType . LIF ;
194+ mv . GetNeuronAt ( part_of ) . LeakRate = 0.005f ;
195+ mv . GetNeuronAt ( part_of ) . Label = "Rec" + colNum ;
196+
197+
190198 foreach ( var module in theNeuronArray . modules )
191199 {
192- if ( module . Label == "CorticalColumn" && module . FirstNeuron != mv . FirstNeuron )
200+ if ( module . Label == "CorticalColumn" && module . FirstNeuron != mv . FirstNeuron )
193201 {
194- Neuron nTest = module . GetNeuronAt ( inputRow ) ;
195- nTest . AddSynapse ( mv . GetNeuronAt ( part_of ) . id , .2f , Synapse . modelType . Hebbian2 ) ;
202+ Neuron nInput = module . GetNeuronAt ( inputRow ) ;
203+ nInput . AddSynapse ( mv . GetNeuronAt ( part_of ) . id , 0 , Synapse . modelType . Hebbian2 ) ;
204+ mv . GetNeuronAt ( part_of ) . AddSynapse ( module . GetNeuronAt ( part_of ) . id , - 1 ) ; //add mutual suppression
196205 }
197206 }
198207 }
0 commit comments