Page 174 - 49A Field Guide to Genetic Programming
P. 174

160                                                      B TinyGP


        254     }
        255     return ( best ) ;
        256   }
        257
        258   int negative tournament ( double [ ]  f i t n e s s , int t s i z e ) {
        259     int worst = rd . nextInt (POPSIZE) , i , competitor ;
        260     double fworst = 1e34 ;
        261
        262     for ( i = 0; i < t s i z e ; i ++ ) {
        263       competitor = rd . nextInt (POPSIZE) ;
        264       i f ( f i t n e s s [ competitor ] < fworst ) {
        265         fworst = f i t n e s s [ competitor ] ;
        266         worst = competitor ;
        267         }
        268     }
        269     return ( worst ) ;
        270   }
        271
        272   char [ ]  cr o s s o v e r ( char [ ] parent1 , char [ ] parent2 ) {
        273     int xo1start , xo1end , xo2start , xo2end ;
        274     char [ ]  o f f s p r i n g ;
        275     int len1 = t r a v e r s e ( parent1 , 0 ) ;
        276     int len2 = t r a v e r s e ( parent2 , 0 ) ;
        277     int l e n o f f ;
        278
        279     xo1start =  rd . nextInt ( len1 ) ;
        280     xo1end = t r a v e r s e ( parent1 , xo1start ) ;
        281
        282     xo2start =  rd . nextInt ( len2 ) ;
        283     xo2end = t r a v e r s e ( parent2 , xo2start ) ;
        284
        285     l e n o f f = xo1start + ( xo2end − xo2start ) + ( len1−xo1end ) ;
        286
        287     o f f s p r i n g = new char [ l e n o f f ] ;
        288
        289     System . arraycopy ( parent1 , 0 , o f f s p r i n g , 0 , xo1start ) ;
        290     System . arraycopy ( parent2 , xo2start , o f f s p r i n g , xo1start ,
        291                   ( xo2end − xo2start ) ) ;
        292     System . arraycopy ( parent1 , xo1end , o f f s p r i n g ,
        293                   xo1start + ( xo2end − xo2start ) ,
        294                   ( len1−xo1end ) ) ;
        295
        296     return ( o f f s p r i n g ) ;
        297   }
        298
        299   char [ ] mutation ( char [ ] parent , double pmut ) {
        300     int len = t r a v e r s e ( parent , 0 ) , i ;
        301     int mutsite ;
        302     char [ ] parentcopy = new char [ len ] ;
        303
        304     System . arraycopy ( parent , 0 , parentcopy , 0 , len ) ;
        305     for ( i = 0; i < len ; i ++ ) {
        306       i f ( rd . nextDouble () < pmut ) {
        307       mutsite =  i ;
        308       i f ( parentcopy [ mutsite ] < FSET START )
   169   170   171   172   173   174   175   176   177   178   179