void individual_evaluate( const fitness_function_s fitness_function, individual_s * const individual ) { if( individual == NULL ) { fprintf( stderr, "bad parameter in individual_evaluate\n"); graceful_exit( EXIT_FAILURE ); } double output; individual->fitness = 0; for( unsigned long idx = 0; idx < fitness_function.data_point_count; ++idx ) { // evaluate function on each input point output = node_evaluate( individual->tree_root_node, fitness_function.input[ idx ] ); // outputs array holds correct values individual->fitness += pow( ( output - fitness_function.output[ idx ] ), 2 ); } individual->fitness = sqrt( individual->fitness ); + TREE_SIZE_PENALTY(individual->tree_node_count); if( individual->tree_node_count > MAX_TREE_NODE_COUNT ) { individual->fitness += individual->tree_node_count; } }
// // AUTOTEST: ann node // void xautotest_ann_node() { float w[4] = {1,2,3,4}; // weights vector float x[3] = {5,1,3}; // input vector float y[1]; // output vector // create node node q = node_create(w, // weights x, // input y, // output 3, // num_inputs 0, // activation function ID 1.0f // activation function gain ); // evaluate node node_evaluate(q); if (liquid_autotest_verbose) { node_print(q); printf("y = %12.8f\n", y[0]); } // contend equality of output CONTEND_EQUALITY(y[0], 20.0f); // destroy node node_destroy(q); }