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

B.3 Source Code                                               157


        96          l i n e = in . readLine () ;
        97          tokens = new StringTokenizer ( l i n e ) ;
        98          for ( j = 0; j <= varnumber ; j++) {
        99            t a r g e t s [ i ] [ j ] = Double . parseDouble ( tokens . nextToken () .
                          trim ( ) ) ;
        100         }
        101       }
        102       in . c l o s e ( ) ;
        103     }
        104    catch ( FileNotFoundException e ) {
        105       System . out . p r i n t l n ( ”ERROR: Please provide a data f i l e ” ) ;
        106       System . e x i t (0) ;
        107     }
        108     catch ( Exception e ) {
        109       System . out . p r i n t l n ( ”ERROR: I n c o r r e c t data format ” ) ;
        110       System . e x i t (0) ;
        111     }
        112   }
        113
        114   double f i t n e s s f u n c t i o n ( char [ ] Prog ) {
        115     int i = 0 , len ;
        116     double r e s u l t ,  f i t = 0 . 0 ;
        117
        118     len = t r a v e r s e ( Prog , 0 ) ;
        119     for ( i = 0; i < f i t n e s s c a s e s ; i ++ ) {
        120       for ( int j = 0 ; j < varnumber ; j ++ )
        121           x [ j ] = t a r g e t s [ i ] [ j ] ;
        122       program = Prog ;
        123       PC = 0 ;
        124       r e s u l t = run ( ) ;
        125       f i t += Math . abs ( r e s u l t − t a r g e t s [ i ] [ varnumber ] ) ;
        126       }
        127     return(− f i t ) ;
        128   }
        129
        130   int grow ( char [ ]  buffer , int pos , int max, int depth ) {
        131     char prim = ( char ) rd . nextInt (2) ;
        132
        133     i f ( pos >= max )
        134       return ( −1 ) ;
        135
        136     i f ( pos == 0 )
        137       prim = 1;
        138
        139     i f ( prim == 0 | | depth == 0 ) {
        140       prim = ( char ) rd . nextInt ( varnumber + randomnumber ) ;
        141       b u f f e r [ pos ] = prim ;
        142       return ( pos+1) ;
        143       }
        144     else  {
        145       prim = ( char ) ( rd . nextInt (FSET END − FSET START + 1) +
                      FSET START) ;
        146       switch ( prim ) {
        147       case ADD:
        148       case SUB:
   166   167   168   169   170   171   172   173   174   175   176