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 )