示例#1
0
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;
    }
}
示例#2
0
//
// 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);
}