30 static std::unique_ptr<FitnessFunction<double>>
create(
const ProblemConfig& problem) {
31 const std::string& name = problem.name;
32 const std::size_t dim = problem.dimensions;
33 const double lb = problem.lower_bound;
34 const double ub = problem.upper_bound;
36 if (name ==
"Sphere")
return std::make_unique<benchmark::SphereFunction<double>>(dim, lb, ub);
37 if (name ==
"Rastrigin")
return std::make_unique<benchmark::RastriginFunction<double>>(dim, lb, ub);
38 if (name ==
"Himmelblau")
return std::make_unique<benchmark::HimmelblauFitness<double>>();
39 if (name ==
"DeJongF5")
return std::make_unique<benchmark::DeJongF5Function<double>>();
40 if (name ==
"HeavyTrig")
return std::make_unique<benchmark::HeavyTrigFunction<double>>(dim, lb, ub);
42 throw std::invalid_argument(
"Unknown fitness function: '" + name +
"'");