- Timestamp:
- 06/25/20 16:31:25 (5 years ago)
- Location:
- cpp/frams/genetics
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/frams/genetics/f4/f4_oper.cpp
r935 r957 451 451 } 452 452 // weight 453 nn->f1 = GenoOperators::mutateNeu Property(nn->f1, NULL, -1);453 nn->f1 = GenoOperators::mutateNeuronProperty(nn->f1, NULL, -1); 454 454 //nn->f1 = 10.0f * (rndDouble(1) - 0.5f); 455 455 } … … 488 488 break; 489 489 case 2: // change weight 490 nn->f1 = GenoOperators::mutateNeu Property(nn->f1, NULL, -1);490 nn->f1 = GenoOperators::mutateNeuronProperty(nn->f1, NULL, -1); 491 491 //nn->f1 += 1.0f * (rndDouble(1) - 0.5f); 492 492 break; -
cpp/frams/genetics/fH/fH_oper.cpp
r935 r957 390 390 // if it is weight, then method needs to use mutateNeuProperty 391 391 double current = par.getDouble(id); 392 par.setDouble(id, mutateNeu Property(current, NULL, -1));392 par.setDouble(id, mutateNeuronProperty(current, NULL, -1)); 393 393 } 394 394 } … … 439 439 if (*par.type(i) == 'f') 440 440 { 441 double change = mutateNeu Property(par.getDouble(i), &neu, 100+ i);441 double change = mutateNeuronProperty(par.getDouble(i), &neu, GenoOperators::NEUROCLASS_PROP_OFFSET + i); 442 442 par.setDouble(i, change); 443 443 } … … 467 467 { 468 468 nc = getRandomNeuroClass(Model::SHAPE_BALL_AND_STICK); 469 // checking of neuron class availability should be checkedbefore469 // checking of neuron class availability should be done before 470 470 } 471 471 -
cpp/frams/genetics/genooperators.cpp
r955 r957 76 76 } 77 77 78 int GenoOperators::selectRandomNeu Property(Neuro *n)78 int GenoOperators::selectRandomNeuronProperty(Neuro *n) 79 79 { 80 80 int neuext = n->extraProperties().getPropCount(), … … 82 82 if (neuext + neucls == 0) return -1; //no properties in this neuron 83 83 int index = rndUint(neuext + neucls); 84 if (index >= neuext) index = index - neuext + 100;84 if (index >= neuext) index = index - neuext + NEUROCLASS_PROP_OFFSET; 85 85 return index; 86 86 } 87 87 88 double GenoOperators::mutateNeu Property(double current, Neuro *n, int i)88 double GenoOperators::mutateNeuronProperty(double current, Neuro *n, int i) 89 89 { 90 90 if (i == -1) return mutateCreepNoLimit('f', current, 2, true); //i==-1: mutating weight of neural connection 91 91 Param p; 92 if (i >= 100) { i -= 100; p = n->getClass()->getProperties(); }92 if (i >= NEUROCLASS_PROP_OFFSET) { i -= NEUROCLASS_PROP_OFFSET; p = n->getClass()->getProperties(); } 93 93 else p = n->extraProperties(); 94 94 double newval = current; … … 354 354 const char *n = p.id(i); 355 355 int l = (int)strlen(n); 356 if (len >= l && l > Len && (strncmp(s, n, l) == 0)) { I = 100+ i; Len = l; }356 if (len >= l && l > Len && (strncmp(s, n, l) == 0)) { I = NEUROCLASS_PROP_OFFSET + i; Len = l; } 357 357 if (also_v1_N_props) //recognize old properties symbols /=! 358 358 { … … 361 361 if (strcmp(n, "fo") == 0) n = "!"; 362 362 l = (int)strlen(n); 363 if (len >= l && l > Len && (strncmp(s, n, l) == 0)) { I = 100+ i; Len = l; }363 if (len >= l && l > Len && (strncmp(s, n, l) == 0)) { I = NEUROCLASS_PROP_OFFSET + i; Len = l; } 364 364 } 365 365 } -
cpp/frams/genetics/genooperators.h
r955 r957 180 180 /** \name Some helpful methods for you */ 181 181 //@{ 182 183 static const int NEUROCLASS_PROP_OFFSET = 100; //a property is identified by some functions below as a single-value integer index, yet a property concerns either a Neuron or a NeuroClass, hence this offset to tell one case from the other. 184 182 185 static int roulette(const double *probtab, const int count); ///<returns random index according to probabilities in the \e probtab table or -1 if all probs are zero. \e count is the number of elements in \e probtab. 183 186 static bool getMinMaxDef(ParamInterface *p, int propindex, double &mn, double &mx, double &def); ///<perhaps a more useful (higher-level) way to obtain min/max/def info for integer and double properties. Returns true if min/max/def was really available (otherwise it is just invented). 184 static int selectRandomNeu Property(Neuro* n); ///<selects random property (either 0-based extraproperty of Neuro or 100-based property of its NeuroClass). -1 if Neuro has no properties.185 static double mutateNeu Property(double current, Neuro *n, int propindex); ///<returns value \e current mutated for the property \e propindex of NeuroClass \e nc or for extraproperty (\e propindex - 100) of Neuro. Neuro is used as read-only. Give \e propindex == -1 to mutate connection weight (\e nc is then ignored).187 static int selectRandomNeuronProperty(Neuro* n); ///<selects random property (either 0-based extraproperty of Neuro or NEUROCLASS_PROP_OFFSET-based property of its NeuroClass). -1 if Neuro has no properties. 188 static double mutateNeuronProperty(double current, Neuro *n, int propindex); ///<returns value \e current mutated for the property \e propindex of NeuroClass \e nc or for extraproperty (\e propindex - NEUROCLASS_PROP_OFFSET) of Neuro. Neuro is used as read-only. Give \e propindex == -1 to mutate connection weight (\e nc is then ignored). 186 189 static bool mutatePropertyNaive(ParamInterface &p, int propindex); ///<creep-mutate selected property. Returns true when success. mutateProperty() should be used instead of this function. 187 190 static bool mutateProperty(ParamInterface &p, int propindex); ///<like mutatePropertyNaive(), but uses special probability distributions for some neuron properties. … … 203 206 static NeuroClass* parseNeuroClass(char *&s); ///<returns longest matching neuroclass or NULL if the string does not begin with a valid neuroclass name. Advances \e s pointer. 204 207 static Neuro* findNeuro(const Model *m, const NeuroClass *nc); ///<returns pointer to first Neuro of class \e nc, or NULL if there is no such Neuro. 205 static int neuroClassProp(char *&s, NeuroClass *nc, bool also_v1_N_props = false); ///<returns 0-based property number for \e neuroclass, 100-based extraproperty number for Neuro, or -1 if the string does not begin with a valid property name. Advance \e s pointer if success.208 static int neuroClassProp(char *&s, NeuroClass *nc, bool also_v1_N_props = false); ///<returns 0-based property number for \e neuroclass, NEUROCLASS_PROP_OFFSET-based extraproperty number for Neuro, or -1 if the string does not begin with a valid property name. Advance \e s pointer if success. 206 209 static bool isWS(const char c); ///<is \e c a whitespace char? 207 210 static void skipWS(char *&s); ///<advances pointer \e s skipping whitespaces.
Note: See TracChangeset
for help on using the changeset viewer.