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 ) ;
   170   171   172   173   174   175   176   177   178   179   180