Changeset 932 for cpp/frams/neuro
- Timestamp:
- 05/28/20 18:00:45 (5 years ago)
- Location:
- cpp/frams/neuro
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/neuro/neurocls-f0-SDK-library.h
r924 r932 12 12 13 13 14 14 15 15 static ParamEntry NI_StdNeuron_tab[]={ 16 16 {"Neuron",1, 4 ,"N",}, … … 22 22 23 23 {0,0,0,},}; 24 addClass(new NeuroClass(NI_StdNeuron_tab,"Standard neuron",-1,1,0, NULL,false, 2 ));25 26 24 addClass(new NeuroClass(NI_StdNeuron_tab,"Standard neuron",-1,1,0, NULL,false, 2, 3)); 25 26 27 27 static ParamEntry NI_StdUNeuron_tab[]={ 28 28 {"Unipolar neuron [EXPERIMENTAL!]",1, 4 ,"Nu",}, … … 33 33 34 34 {0,0,0,},}; 35 addClass(new NeuroClass(NI_StdUNeuron_tab,"Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal.",-1,1,0, NULL,false, 0 ));36 37 static int Gyro_xy[]={83,8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72};35 addClass(new NeuroClass(NI_StdUNeuron_tab,"Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal.",-1,1,0, NULL,false, 0, 3)); 36 37 static int Gyro_xy[]={83,8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72}; 38 38 static ParamEntry NI_Gyro_tab[]={ 39 39 {"Gyroscope",1, 0 ,"G",}, … … 42 42 43 43 {0,0,0,},}; 44 addClass(new NeuroClass(NI_Gyro_tab,"Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical",0,1,2, Gyro_xy,false, 32 ));45 46 static int Touch_xy[]={43,2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50};44 addClass(new NeuroClass(NI_Gyro_tab,"Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical",0,1,2, Gyro_xy,false, 32, 3)); 45 46 static int Touch_xy[]={43,2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50}; 47 47 static ParamEntry NI_Touch_tab[]={ 48 48 {"Touch",1, 1 ,"T",}, … … 52 52 53 53 {0,0,0,},}; 54 addClass(new NeuroClass(NI_Touch_tab,"Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied",0,1,1, Touch_xy,false, 32 ));55 56 static int Smell_xy[]={64,5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50};54 addClass(new NeuroClass(NI_Touch_tab,"Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied",0,1,1, Touch_xy,false, 32, 3)); 55 56 static int Smell_xy[]={64,5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50}; 57 57 static ParamEntry NI_Smell_tab[]={ 58 58 {"Smell",1, 0 ,"S",}, … … 61 61 62 62 {0,0,0,},}; 63 addClass(new NeuroClass(NI_Smell_tab,"Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)",0,1,1, Smell_xy,false, 32 ));64 65 static int Const_xy[]={29,4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68};63 addClass(new NeuroClass(NI_Smell_tab,"Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)",0,1,1, Smell_xy,false, 32, 3)); 64 65 static int Const_xy[]={29,4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68}; 66 66 static ParamEntry NI_Const_tab[]={ 67 67 {"Constant",1, 0 ,"*",}, … … 70 70 71 71 {0,0,0,},}; 72 addClass(new NeuroClass(NI_Const_tab,"Constant value",0,1,0, Const_xy,false, 1 ));73 74 static int BendMuscle_xy[]={63,6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21};72 addClass(new NeuroClass(NI_Const_tab,"Constant value",0,1,0, Const_xy,false, 1, 3)); 73 74 static int BendMuscle_xy[]={63,6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21}; 75 75 static ParamEntry NI_BendMuscle_tab[]={ 76 76 {"Bend muscle",1, 2 ,"|",}, 77 77 78 78 79 79 80 {"p",0,0,"power","f 0.01 1.0 0.25",}, 80 81 {"r",0,0,"bending range","f 0.0 1.0 1.0",}, 81 82 82 83 {0,0,0,},}; 83 addClass(new NeuroClass(NI_BendMuscle_tab,"",1,0,2, BendMuscle_xy,false, 2+16+64+4 ));84 85 static int RotMuscle_xy[]={62,5,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,1,69,10,77,17,10,59,15,57,17,57,22,60,26,69,27,78,26,82,21,82,16,79,12,69,10,80,6,3,65,50,65,20,75,20,75,50};84 addClass(new NeuroClass(NI_BendMuscle_tab,"",1,0,2, BendMuscle_xy,false, 2+16+64+4, 1)); 85 86 static int RotMuscle_xy[]={62,5,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,1,69,10,77,17,10,59,15,57,17,57,22,60,26,69,27,78,26,82,21,82,16,79,12,69,10,80,6,3,65,50,65,20,75,20,75,50}; 86 87 static ParamEntry NI_RotMuscle_tab[]={ 87 88 {"Rotation muscle",1, 1 ,"@",}, 88 89 89 90 91 90 92 {"p",0,0,"power","f 0.01 1.0 1.0",}, 91 93 92 94 {0,0,0,},}; 93 addClass(new NeuroClass(NI_RotMuscle_tab,"",1,0,2, RotMuscle_xy,false, 2+16+128+4 ));94 95 static int SolidMuscle_xy[]={63,6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21};95 addClass(new NeuroClass(NI_RotMuscle_tab,"",1,0,2, RotMuscle_xy,false, 2+16+128+4, 1)); 96 97 static int SolidMuscle_xy[]={63,6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21}; 96 98 static ParamEntry NI_SolidMuscle_tab[]={ 97 99 {"Muscle",1, 2 ,"M",}, 98 100 99 101 102 100 103 {"p",0,0,"power","f 0.01 1.0 1.0",}, 101 104 {"a",0,0,"axis","d 0 1 0",}, 102 105 103 106 {0,0,0,},}; 104 addClass(new NeuroClass(NI_SolidMuscle_tab,"",1,0,2, SolidMuscle_xy,false, 16+4+512 ));105 106 static int Diff_xy[]={24,3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42};107 addClass(new NeuroClass(NI_SolidMuscle_tab,"",1,0,2, SolidMuscle_xy,false, 16+4+512, 2)); 108 109 static int Diff_xy[]={24,3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42}; 107 110 static ParamEntry NI_Diff_tab[]={ 108 111 {"Differentiate",1, 0 ,"D",}, … … 110 113 111 114 {0,0,0,},}; 112 addClass(new NeuroClass(NI_Diff_tab,"Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",-1,1,0, Diff_xy,false, 0 ));113 114 static int FuzzyNeuro_xy[]={44,5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65};115 addClass(new NeuroClass(NI_Diff_tab,"Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",-1,1,0, Diff_xy,false, 0, 3)); 116 117 static int FuzzyNeuro_xy[]={44,5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65}; 115 118 static ParamEntry NI_FuzzyNeuro_tab[]={ 116 119 {"Fuzzy system [EXPERIMENTAL!]",1, 4 ,"Fuzzy",}, … … 122 125 123 126 {0,0,0,},}; 124 addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,false, 0 ));125 126 127 addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,false, 0, 3)); 128 129 127 130 static ParamEntry NI_Sticky_tab[]={ 128 131 {"Sticky [EXPERIMENTAL!]",1, 0 ,"Sti",}, 129 132 130 131 {0,0,0,},}; 132 addClass(new NeuroClass(NI_Sticky_tab,"",1,0,1, NULL,false, 16)); 133 134 133 134 135 {0,0,0,},}; 136 addClass(new NeuroClass(NI_Sticky_tab,"",1,0,1, NULL,false, 16, 1)); 137 138 135 139 static ParamEntry NI_LinearMuscle_tab[]={ 136 140 {"Linear muscle [EXPERIMENTAL!]",1, 1 ,"LMu",}, 137 141 142 138 143 {"p",0,0,"power","f 0.01 1.0 1.0",}, 139 144 140 145 {0,0,0,},}; 141 addClass(new NeuroClass(NI_LinearMuscle_tab,"",1,0,2, NULL,false, 16 ));142 143 146 addClass(new NeuroClass(NI_LinearMuscle_tab,"",1,0,2, NULL,false, 16+256, 1)); 147 148 144 149 static ParamEntry NI_WaterDetect_tab[]={ 145 150 {"Water detector",1, 0 ,"Water",}, … … 147 152 148 153 {0,0,0,},}; 149 addClass(new NeuroClass(NI_WaterDetect_tab,"Output signal:\n0=on or above water surface\n1=under water (deeper than 1)\n0..1=in the transient area just below water surface",0,1,1, NULL,false, 32 ));150 151 154 addClass(new NeuroClass(NI_WaterDetect_tab,"Output signal:\n0=on or above water surface\n1=under water (deeper than 1)\n0..1=in the transient area just below water surface",0,1,1, NULL,false, 32, 3)); 155 156 152 157 static ParamEntry NI_Energy_tab[]={ 153 158 {"Energy level",1, 0 ,"Energy",}, … … 155 160 156 161 {0,0,0,},}; 157 addClass(new NeuroClass(NI_Energy_tab,"The current energy level divided by the initial energy level.\nUsually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested",0,1,0, NULL,false, 32 ));158 159 static int Channelize_xy[]={57,10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50};162 addClass(new NeuroClass(NI_Energy_tab,"The current energy level divided by the initial energy level.\nUsually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested",0,1,0, NULL,false, 32, 3)); 163 164 static int Channelize_xy[]={57,10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50}; 160 165 static ParamEntry NI_Channelize_tab[]={ 161 166 {"Channelize",1, 0 ,"Ch",}, … … 163 168 164 169 {0,0,0,},}; 165 addClass(new NeuroClass(NI_Channelize_tab,"Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.",-1,1,0, Channelize_xy,false, 0 ));166 167 static int ChMux_xy[]={52,7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48};170 addClass(new NeuroClass(NI_Channelize_tab,"Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.",-1,1,0, Channelize_xy,false, 0, 3)); 171 172 static int ChMux_xy[]={52,7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48}; 168 173 static ParamEntry NI_ChMux_tab[]={ 169 174 {"Channel multiplexer",1, 0 ,"ChMux",}, … … 171 176 172 177 {0,0,0,},}; 173 addClass(new NeuroClass(NI_ChMux_tab,"Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)",2,1,0, ChMux_xy,false, 0 ));174 175 static int ChSel_xy[]={41,6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47};178 addClass(new NeuroClass(NI_ChMux_tab,"Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)",2,1,0, ChMux_xy,false, 0, 3)); 179 180 static int ChSel_xy[]={41,6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47}; 176 181 static ParamEntry NI_ChSel_tab[]={ 177 182 {"Channel selector",1, 1 ,"ChSel",}, … … 180 185 181 186 {0,0,0,},}; 182 addClass(new NeuroClass(NI_ChSel_tab,"Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",1,1,0, ChSel_xy,false, 0 ));183 184 187 addClass(new NeuroClass(NI_ChSel_tab,"Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",1,1,0, ChSel_xy,false, 0, 3)); 188 189 185 190 static ParamEntry NI_Random_tab[]={ 186 191 {"Random noise",1, 0 ,"Rnd",}, 187 192 188 193 {0,0,0,},}; 189 addClass(new NeuroClass(NI_Random_tab,"Generates random noise (subsequent random values in the range of -1..+1)",0,1,0, NULL,false, 0 ));190 191 static int Sinus_xy[]={46,3,12,75,50,71,37,62,28,50,25,37,28,28,37,25,50,28,62,37,71,50,75,62,71,71,62,75,50,1,75,50,100,50,5,35,50,40,35,45,35,55,65,60,65,65,50};194 addClass(new NeuroClass(NI_Random_tab,"Generates random noise (subsequent random values in the range of -1..+1)",0,1,0, NULL,false, 0, 3)); 195 196 static int Sinus_xy[]={46,3,12,75,50,71,37,62,28,50,25,37,28,28,37,25,50,28,62,37,71,50,75,62,71,71,62,75,50,1,75,50,100,50,5,35,50,40,35,45,35,55,65,60,65,65,50}; 192 197 static ParamEntry NI_Sinus_tab[]={ 193 198 {"Sinus generator",1, 2 ,"Sin",}, … … 197 202 198 203 {0,0,0,},}; 199 addClass(new NeuroClass(NI_Sinus_tab,"Output frequency = f0+input",1,1,0, Sinus_xy,false, 0 ));204 addClass(new NeuroClass(NI_Sinus_tab,"Output frequency = f0+input",1,1,0, Sinus_xy,false, 0, 3)); -
cpp/frams/neuro/neurofactory.h
r790 r932 1 1 // This file is a part of Framsticks SDK. http://www.framsticks.com/ 2 // Copyright (C) 1999-20 15Maciej Komosinski and Szymon Ulatowski.2 // Copyright (C) 1999-2020 Maciej Komosinski and Szymon Ulatowski. 3 3 // See LICENSE.txt for details. 4 4 … … 7 7 8 8 #include <frams/model/modelparts.h> 9 #include <frams/model/model.h> 9 10 #include <map> 10 11 … … 18 19 NeuroImpl* setImplementation(const SString& classname, NeuroImpl *ni, bool deleteold = 1); 19 20 NeuroImpl* getImplementation(NeuroClass *nc); 20 class NeuroImpl* createNeuroImpl(Neuro *n )21 class NeuroImpl* createNeuroImpl(Neuro *n, Model::ShapeType shape_type) 21 22 { 22 NeuroClass *nc = n->getClass(); if (!nc) return 0; return createNeuroImpl(nc );23 NeuroClass *nc = n->getClass(); if (!nc) return 0; return createNeuroImpl(nc, shape_type); 23 24 } 24 class NeuroImpl* createNeuroImpl(NeuroClass *nc );25 class NeuroImpl* createNeuroImpl(NeuroClass *nc, Model::ShapeType shape_type); 25 26 26 27 void setStandardImplementation(); -
cpp/frams/neuro/neuroimpl.cpp
r896 r932 1 1 // This file is a part of Framsticks SDK. http://www.framsticks.com/ 2 // Copyright (C) 1999-20 18Maciej Komosinski and Szymon Ulatowski.2 // Copyright (C) 1999-2020 Maciej Komosinski and Szymon Ulatowski. 3 3 // See LICENSE.txt for details. 4 4 … … 46 46 , ChannelSpace *ch 47 47 #endif 48 48 ) 49 49 :mod(model), config(conf), 50 50 isbuilt(1), errorcount(0) … … 69 69 for (i = 0; n = mod.getNeuro(i); i++) 70 70 { 71 ni = conf.factory->createNeuroImpl(n );71 ni = conf.factory->createNeuroImpl(n, mod.getShapeType()); 72 72 n->userdata[mytags_id] = ni; 73 73 if (!ni) … … 85 85 for (i = 0; n = mod.getNeuro(i); i++) 86 86 { 87 n->state += (rndDouble(1) - 0.5) *config.randominit;87 n->state += (rndDouble(1) - 0.5) * config.randominit; 88 88 ni = (NeuroImpl*)n->userdata[mytags_id]; 89 89 if (!ni) continue; … … 98 98 ni->status = NeuroImpl::InitOk; 99 99 int order = ni->getSimOrder(); 100 if (order < 0) order = 0; else if (order >2) order = 2;100 if (order < 0) order = 0; else if (order > 2) order = 2; 101 101 if (order < minorder) minorder = order; 102 102 if (order > maxorder) maxorder = order; … … 189 189 double NeuroImpl::getNewState(int channel) 190 190 { 191 if (neuro->flags &Neuro::HoldState) return getState(channel);191 if (neuro->flags & Neuro::HoldState) return getState(channel); 192 192 if (channel >= channels) channel = channels - 1; 193 193 if (channel <= 0) { return newstate; } … … 204 204 void NeuroImpl::commit() 205 205 { 206 if (!(neuro->flags &Neuro::HoldState))206 if (!(neuro->flags & Neuro::HoldState)) 207 207 { 208 208 if (channels > 1) … … 211 211 if (owner->getConfig().nnoise > 0.0) 212 212 { 213 neuro->state += RndGen.GaussStd() *owner->getConfig().nnoise;213 neuro->state += RndGen.GaussStd() * owner->getConfig().nnoise; 214 214 if (channels > 1) 215 215 for (int i = 0; i < chstate.size(); i++) 216 chstate(0) += RndGen.GaussStd() *owner->getConfig().nnoise;216 chstate(0) += RndGen.GaussStd() * owner->getConfig().nnoise; 217 217 } 218 218 } … … 270 270 double w; 271 271 while (inp = neuro->getInput(startwith++, w)) 272 sum += inp->state *w;272 sum += inp->state * w; 273 273 return sum; 274 274 } -
cpp/frams/neuro/neuroimpl.h
r721 r932 1 1 // This file is a part of Framsticks SDK. http://www.framsticks.com/ 2 // Copyright (C) 1999-20 18Maciej Komosinski and Szymon Ulatowski.2 // Copyright (C) 1999-2020 Maciej Komosinski and Szymon Ulatowski. 3 3 // See LICENSE.txt for details. 4 4 … … 82 82 , ChannelSpace *ch = 0 83 83 #endif 84 84 ); 85 85 ~NeuroNetImpl(); 86 86 void simulateNeuroNet(); … … 223 223 virtual int lateinit() { return 1; } 224 224 /** calculate 'newstate - implementation dependent */ 225 virtual void go() {}225 virtual void go() {} 226 226 /** for neurons doing some physical actions (called each simulation step when nnspeed!=1.0) */ 227 virtual void goPhysics() {}227 virtual void goPhysics() {} 228 228 229 229 int getSimOrder() { return simorder; } … … 287 287 PARAMGETDEF(cstate) { arg1->setDouble(neuro->state); } 288 288 PARAMSETDEF(cstate) { setCurrentState(arg1->getDouble()); return 0; } 289 PARAMGETDEF(hold) { arg1->setInt((neuro->flags &(Neuro::HoldState)) ? 1 : 0); }290 PARAMSETDEF(hold) { neuro->flags = (neuro->flags &~Neuro::HoldState) | (arg1->getInt() ? Neuro::HoldState : 0); return 0; }289 PARAMGETDEF(hold) { arg1->setInt((neuro->flags & (Neuro::HoldState)) ? 1 : 0); } 290 PARAMSETDEF(hold) { neuro->flags = (neuro->flags & ~Neuro::HoldState) | (arg1->getInt() ? Neuro::HoldState : 0); return 0; } 291 291 PARAMGETDEF(channels) { arg1->setInt(getChannelCount()); } 292 292 PARAMSETDEF(channels) { setChannelCount(arg1->getInt()); return 0; }
Note: See TracChangeset
for help on using the changeset viewer.