/** * Function to calculate the objective function of an entity. * * \return objective function value. */ static double optimize_genetic_objective (Entity * entity) ///< entity data. { unsigned int j; double objective; char buffer[64]; #if DEBUG_OPTIMIZE fprintf (stderr, "optimize_genetic_objective: start\n"); #endif for (j = 0; j < optimize->nvariables; ++j) { optimize->value[entity->id * optimize->nvariables + j] = genetic_get_variable (entity, optimize->genetic_variable + j); } objective = optimize_norm (entity->id); g_mutex_lock (mutex); for (j = 0; j < optimize->nvariables; ++j) { snprintf (buffer, 64, "%s ", format[optimize->precision[j]]); fprintf (optimize->file_variables, buffer, genetic_get_variable (entity, optimize->genetic_variable + j)); } fprintf (optimize->file_variables, "%.14le\n", objective); g_mutex_unlock (mutex); #if DEBUG_OPTIMIZE fprintf (stderr, "optimize_genetic_objective: end\n"); #endif return objective; }
double evaluate (Entity * entity) { double x, y, e1, e2; x = genetic_get_variable (entity, v); y = genetic_get_variable (entity, v + 1); e1 = x + y - 3.; e2 = x - y - 1.; e1 = e1 * e1 + e2 * e2; return e1; }