KatsuuraFunction::KatsuuraFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(10.0)) { setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(getRandomRotationMatrix(numberOfDimensions_)); setRotationQ(getRandomRotationMatrix(numberOfDimensions_)); }
AttractiveSectorFunction::AttractiveSectorFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(std::sqrt(10.0))) { setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(getRandomRotationMatrix(numberOfDimensions_)); setRotationQ(getRandomRotationMatrix(numberOfDimensions_)); }
StepEllipsoidalFunction::StepEllipsoidalFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), firstParameterConditioning_(getParameterConditioning(std::sqrt(10.0))), secondParameterConditioning_(getParameterConditioning(100.0)) { setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(getRandomRotationMatrix(numberOfDimensions_)); setRotationQ(getRandomRotationMatrix(numberOfDimensions_)); }
RosenbrockFunctionRotated::RosenbrockFunctionRotated( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), max_(std::max(1.0, std::sqrt(numberOfDimensions_) / 8.0)) { setParameterRotation(randomRotationMatrix(numberOfDimensions_)); setObjectiveFunction( [this]( const arma::Col<double>& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::Col<double>& z = max_ * parameter_ + 0.5; return 100.0 * std::pow(arma::norm(arma::square(z.head(z.n_elem - 1)) - z.tail(z.n_elem - 1)), 2.0) + std::pow(arma::norm(z.head(z.n_elem - 1) - 1.0), 2.0); }, "BBOB Rosenbrock Function, rotated (f9)"); }
DifferentPowersFunction::DifferentPowersFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions) { setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(randomRotationMatrix(numberOfDimensions_)); setObjectiveFunction( [this]( const arma::Col<double>& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::Col<double>& z = arma::abs(parameter_); return arma::norm(z % getConditionedParameter(arma::square(z))); }, "BBOB Different Powers Function (f14)"); }
CompositeGriewankRosenbrockFunctionF8F2::CompositeGriewankRosenbrockFunctionF8F2( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), max_(std::max(1.0, std::sqrt(numberOfDimensions_) / 8.0)) { setParameterRotation(randomRotationMatrix(numberOfDimensions_)); setObjectiveFunction( [this]( const arma::Col<double>& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::Col<double>& s = max_ * parameter_ + 0.5; const arma::Col<double>& z = 100.0 * arma::square(arma::square(s.head(s.n_elem - 1)) - s.tail(s.n_elem - 1)) + arma::square(s.head(s.n_elem - 1) - 1.0); return 10.0 * (arma::mean(z / 4000.0 - arma::cos(z)) + 1.0); }, "BBOB Composite Griewank Rosenbrock Function F8F2 (f19)"); }
OptimisationProblem<T>::OptimisationProblem( const std::size_t numberOfDimensions) noexcept : numberOfDimensions_(numberOfDimensions) { reset(); // A vector with all elements set to the lowest representable value. setLowerBounds(arma::zeros<arma::Col<T>>(numberOfDimensions_) - std::numeric_limits<T>::max()); // A vector with all elements set to the largest representable value. setUpperBounds(arma::zeros<arma::Col<T>>(numberOfDimensions_) + std::numeric_limits<T>::max()); // (0, ..., numberOfDimensions - 1) setParameterPermutation(arma::linspace<arma::Col<unsigned int>>(0, numberOfDimensions_ - 1, numberOfDimensions)); setParameterScaling(arma::ones<arma::Col<T>>(numberOfDimensions_)); setParameterTranslation(arma::zeros<arma::Col<T>>(numberOfDimensions_)); setParameterRotation(arma::eye<arma::Mat<T>>(numberOfDimensions_, numberOfDimensions_)); setObjectiveValueScaling(1.0); setObjectiveValueTranslation(0.0); setAcceptableObjectiveValue(std::numeric_limits<double>::lowest()); }
SharpRidgeFunction::SharpRidgeFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(std::sqrt(10.0))), rotationQ_(synchronise(randomRotationMatrix(numberOfDimensions_))) { if (numberOfDimensions_ < 2) { throw std::domain_error("SharpRidgeFunction: The number of dimensions must be greater than 1."); } setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(randomRotationMatrix(numberOfDimensions_)); setObjectiveFunctions({{[this]( const arma::vec& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::vec& z = rotationQ_ * (parameterConditioning_ % parameter_); return std::pow(z(0), 2.0) + 100.0 * arma::norm(z.tail(z.n_elem - 1)); }, "BBOB Sharp Ridge Function (f13)"}}); }
SharpRidgeFunction::SharpRidgeFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(std::sqrt(10.0))), rotationQ_(randomRotationMatrix(numberOfDimensions_)) { setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(randomRotationMatrix(numberOfDimensions_)); #if defined(SUPPORT_MPI) MPI_Bcast(rotationQ_.memptr(), static_cast<int>(rotationQ_.n_elem), MPI_DOUBLE, 0, MPI_COMM_WORLD); #endif setObjectiveFunction( [this]( const arma::Col<double>& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::Col<double>& z = rotationQ_ * (parameterConditioning_ % parameter_); return std::pow(z(0), 2.0) + 100.0 * arma::norm(z.tail(z.n_elem - 1)); }, "BBOB Sharp Ridge Function (f13)"); }
AttractiveSectorFunction::AttractiveSectorFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(std::sqrt(10.0))), rotationQ_(synchronise(randomRotationMatrix(numberOfDimensions_))) { if (numberOfDimensions_ < 2) { throw std::domain_error("AttractiveSectorFunction: The number of dimensions must be greater than 1."); } setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(randomRotationMatrix(numberOfDimensions_)); setObjectiveFunctions({{[this]( const arma::vec& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); arma::vec z = rotationQ_ * (parameterConditioning_ % parameter_); z.elem(arma::find(z % parameterTranslation_ > 0.0)) *= 100.0; return std::pow(getOscillatedValue(std::pow(arma::norm(z), 2.0)), 0.9); }, "BBOB Attractive Sector Function (f6)"}}); }
SchaffersF7Function::SchaffersF7Function( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(std::sqrt(10.0))), rotationQ_(synchronise(randomRotationMatrix(numberOfDimensions_))) { if (numberOfDimensions_ < 2) { throw std::domain_error("SchaffersF7Function: The number of dimensions must be greater than 1."); } setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(randomRotationMatrix(numberOfDimensions_)); setObjectiveFunctions({{[this]( const arma::vec& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::vec& s = arma::square(parameterConditioning_ % (rotationQ_ * getAsymmetricParameter(0.5, parameter_))); const arma::vec& z = arma::pow(s.head(s.n_elem - 1) + s.tail(s.n_elem - 1), 0.25); return std::pow(arma::mean(z % (1.0 + arma::square(arma::sin(50.0 * arma::pow(z, 0.4))))), 2.0); }, "BBOB Schaffers F7 Function (f17)"}}); }
SchaffersF7FunctionIllConditioned::SchaffersF7FunctionIllConditioned( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), parameterConditioning_(getParameterConditioning(std::sqrt(1000.0))), rotationQ_(randomRotationMatrix(numberOfDimensions_)) { setParameterTranslation(getRandomParameterTranslation()); setParameterRotation(randomRotationMatrix(numberOfDimensions_)); #if defined(SUPPORT_MPI) MPI_Bcast(rotationQ_.memptr(), static_cast<int>(rotationQ_.n_elem), MPI_DOUBLE, 0, MPI_COMM_WORLD); #endif setObjectiveFunction( [this]( const arma::Col<double>& parameter_) { assert(parameter_.n_elem == numberOfDimensions_); const arma::Col<double>& s = arma::square(parameterConditioning_ % (rotationQ_ * getAsymmetricParameter(0.5, parameter_))); const arma::Col<double>& z = arma::pow(s.head(s.n_elem - 1) + s.tail(s.n_elem - 1), 0.25); return std::pow(arma::mean(z % (1.0 + arma::square(arma::sin(50.0 * arma::pow(z, 0.4))))), 2.0); }, "BBOB Schaffers F7 Function, ill-conditioned (f18)"); }
CompositeGriewankRosenbrockFunctionF8F2::CompositeGriewankRosenbrockFunctionF8F2( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), max_(std::max(1.0, std::sqrt(numberOfDimensions_) / 8.0)) { setParameterRotation(getRandomRotationMatrix(numberOfDimensions_)); }