/** * @brief Allocates the basic Griewank-Rosenbrock problem. */ static coco_problem_t *f_griewank_rosenbrock_allocate(const size_t number_of_variables) { coco_problem_t *problem = coco_problem_allocate_from_scalars("Griewank Rosenbrock function", f_griewank_rosenbrock_evaluate, NULL, number_of_variables, -5.0, 5.0, 1); coco_problem_set_id(problem, "%s_d%02lu", "griewank_rosenbrock", number_of_variables); /* Compute best solution */ f_griewank_rosenbrock_evaluate(problem, problem->best_parameter, problem->best_value); return problem; }
static coco_problem_t *f_griewank_rosenbrock(const size_t number_of_variables) { size_t i, problem_id_length; coco_problem_t *problem = coco_problem_allocate(number_of_variables, 1, 0); problem->problem_name = coco_strdup("griewank rosenbrock function"); /* Construct a meaningful problem id */ problem_id_length = (size_t) snprintf(NULL, 0, "%s_%02lu", "griewank rosenbrock", (long) number_of_variables); problem->problem_id = coco_allocate_memory(problem_id_length + 1); snprintf(problem->problem_id, problem_id_length + 1, "%s_%02lu", "griewank rosenbrock", (long) number_of_variables); problem->number_of_variables = number_of_variables; problem->number_of_objectives = 1; problem->number_of_constraints = 0; problem->evaluate_function = f_griewank_rosenbrock_evaluate; for (i = 0; i < number_of_variables; ++i) { problem->smallest_values_of_interest[i] = -5.0; problem->largest_values_of_interest[i] = 5.0; problem->best_parameter[i] = 1.0; /* z^opt = 1*/ } /* Calculate best parameter value */ f_griewank_rosenbrock_evaluate(problem, problem->best_parameter, problem->best_value); return problem; }