Changeset 31 for cpp/geno_fx/geno_fx.cpp
- Timestamp:
- 10/21/09 23:45:09 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpp/geno_fx/geno_fx.cpp
r3 r31 55 55 double Geno_fx::mutateNeuProperty(double current,Neuro *n,int i) 56 56 { 57 if (i==-1) return mutateCreep ('f',current,-10,10);57 if (i==-1) return mutateCreepNoLimit('f',current,-10,10); 58 58 ParamInterface *pi; 59 59 if (i>=100) {i-=100; pi=&n->getClass()->getProperties();} 60 60 else pi=&n->extraProperties(); 61 double newval ;61 double newval=current; 62 62 /*bool ok=*/getMutatedProperty(*pi,i,current,newval); 63 63 return newval; … … 103 103 } 104 104 105 double Geno_fx::mutateCreep (char type,double current,double mn,double mx)105 double Geno_fx::mutateCreepNoLimit(char type,double current,double mn,double mx) 106 106 { 107 107 double result=RndGen.Gauss(current,(mx-mn)/2/5); // /halfinterval, 5 times narrower 108 108 if (type=='d') {result=int(result+0.5); if (result==current) result+=randomN(2)*2-1;} 109 else result=floor(result*1000)/1000.0; 109 else result=floor(result*1000+0.5)/1000.0; //round 110 return result; 111 } 112 113 double Geno_fx::mutateCreep(char type,double current,double mn,double mx) 114 { 115 double result=mutateCreepNoLimit(type,current,mn,mx); 116 //reflect: 117 if (result>mx) result=mx-(result-mx); else 118 if (result<mn) result=mn+(mn-result); 119 //absorb (just in case 'result' exceeded the allowed range so much): 110 120 if (result>mx) result=mx; else 111 121 if (result<mn) result=mn;
Note: See TracChangeset
for help on using the changeset viewer.