Добавление нелинейной функции TinyGp
Я пытаюсь расширить набор функций программного обеспечения 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
}