Page 175 - 49A Field Guide to Genetic Programming
P. 175
B.3 Source Code 161
309 parentcopy [ mutsite ] = ( char ) rd . nextInt ( varnumber ) ;
310 else
311 switch ( parentcopy [ mutsite ] ) {
312 case ADD:
313 case SUB:
314 case MUL:
315 case DIV :
316 parentcopy [ mutsite ] =
317 ( char ) ( rd . nextInt (FSET END − FSET START + 1)
318 + FSET START) ;
319 }
320 }
321 }
322 return ( parentcopy ) ;
323 }
324
325 void print parms ( ) {
326 System . out . print ( ”−− TINY GP ( Java version ) −−\n” ) ;
327 System . out . print ( ”SEED=”+seed+”\nMAX LEN=”+MAX LEN+
328 ”\nPOPSIZE=”+POPSIZE+”\nDEPTH=”+DEPTH+
329 ”\nCROSSOVER PROB=”+CROSSOVER PROB+
330 ”\nPMUT PER NODE=”+PMUT PER NODE+
331 ”\nMIN RANDOM=”+minrandom+
332 ”\nMAXRANDOM=”+maxrandom+
333 ”\nGENERATIONS=”+GENERATIONS+
334 ”\nTSIZE=”+TSIZE+
335 ”\n−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−\n” ) ;
336 }
337
338 public tiny gp ( String fname , long s ) {
339 f i t n e s s = new double [ POPSIZE ] ;
340 seed = s ;
341 i f ( seed >= 0 )
342 rd . setSeed ( seed ) ;
343 s e t u p f i t n e s s ( fname ) ;
344 pop = create random pop (POPSIZE, DEPTH, f i t n e s s ) ;
345 for ( int i = 0 ; i < FSET START; i ++ )
346 x [ i ]= (maxrandom−minrandom ) ∗rd . nextDouble ()+minrandom ;
347 }
348
349 void evolve () {
350 int gen = 0 , indivs , o f f s p r i n g , parent1 , parent2 , parent ;
351 double newfit ;
352 char [ ] newind ;
353 print parms ( ) ;
354 s t a t s ( f i t n e s s , pop , 0 ) ;
355 for ( gen = 1; gen < GENERATIONS; gen ++ ) {
356 i f ( fbestpop > −1e−5 ) {
357 System . out . print ( ”PROBLEM SOLVED\n” ) ;
358 System . e x i t ( 0 ) ;
359 }
360 for ( i n d i v s = 0 ; i n d i v s < POPSIZE ; i n d i v s ++ ) {
361 i f ( rd . nextDouble ( ) > CROSSOVER PROB ) {
362 parent1 = tournament ( f i t n e s s , TSIZE ) ;
363 parent2 = tournament ( f i t n e s s , TSIZE ) ;