我正在尝试扩展TinyGP软件的功能集,以包括非线性函数,例如sin,cos和tan。问题是,使用带有单个参数的函数生成树并执行包含函数的交叉树的一个参数功能
打印方法的源代码概述如下。
int grow( char [] buffer, int pos, int max, int depth )
{
char prim = (char) rd.nextInt(2);
int one_child;
if ( pos >= max )
return( -1 );
if ( pos == 0 )
prim = 1;
if ( prim == 0 || depth == 0 ) {
prim = (char) rd.nextInt(varnumber + randomnumber);
buffer[pos] = prim;
return(pos+1);
}
else {
prim = (char) (rd.nextInt(FSET_END - FSET_START + 1) + FSET_START);
switch(prim) {
case ADD:
case SUB:
case MUL:
case DIV:
buffer[pos] = prim;
one_child = grow( buffer, pos+1, max,depth-1);
if ( one_child < 0 )
return( -1 );
return( grow( buffer, one_child, max,depth-1 ) );
}
}
return( 0 ); // should never get here
}