GallaghersGaussian21hiPeaksFunction::GallaghersGaussian21hiPeaksFunction( const arma::uword numberOfDimensions) : BlackBoxOptimisationBenchmark(numberOfDimensions), weight_(arma::join_cols(arma::Col<double>({10.0}), arma::linspace<arma::Col<double>>(1.1, 9.1, 20))), localParameterConditionings_(getRandomLocalParameterHighConditionings(21)), localParameterTranslations_(arma::randu<arma::Mat<double>>(numberOfDimensions_, 21) * 9.8 - 4.9), rotationQ_(randomRotationMatrix(numberOfDimensions_)) { localParameterTranslations_.col(0) = 0.8 * localParameterTranslations_.col(0); #if defined(SUPPORT_MPI) MPI_Bcast(localParameterConditionings_.memptr(), static_cast<int>(localParameterConditionings_.n_elem), MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(localParameterTranslations_.memptr(), static_cast<int>(localParameterTranslations_.n_elem), MPI_DOUBLE, 0, MPI_COMM_WORLD); 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_); double maximalValue = std::numeric_limits<double>::lowest(); for (arma::uword n = 0; n < 21; ++n) { const arma::Col<double>& localParameterTranslation = parameter_ - localParameterTranslations_.col(n); maximalValue = std::max(maximalValue, weight_(n) * std::exp(-0.5 / static_cast<double>(numberOfDimensions_) * arma::dot(localParameterTranslation, rotationQ_.t() * arma::diagmat(localParameterConditionings_.col(n)) * rotationQ_ * localParameterTranslation))); } return std::pow(getOscillatedValue(10.0 - maximalValue), 2.0); }, "BBOB Gallagher's Gaussian 21-hi Peaks Function (f22)"); }
double AttractiveSectorFunction::getObjectiveValueImplementation( const arma::Col<double>& parameter) const { assert(parameter.n_elem == numberOfDimensions_); arma::Col<double> 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); }
arma::Col<double> BlackBoxOptimisationBenchmark::getOscillatedParameter( const arma::Col<double>& parameter) const { arma::Col<double> oscillatedParameter(parameter.n_elem); for (arma::uword n = 0; n < parameter.n_elem; ++n) { oscillatedParameter(n) = getOscillatedValue(parameter(n)); } return oscillatedParameter; }
double GallaghersGaussian101mePeaksFunction::getObjectiveValueImplementation( const arma::Col<double>& parameter) const { assert(parameter.n_elem == numberOfDimensions_); double maximalValue = std::numeric_limits<double>::lowest(); for (arma::uword n = 0; n < 101; ++n) { const arma::Col<double>& locallyTranslatedParameter = parameter - localParameterTranslations_.col(n); maximalValue = std::max(maximalValue, weight_(n) * std::exp(-0.5 / static_cast<double>(numberOfDimensions_) * arma::dot(locallyTranslatedParameter, rotationQ_.t() * arma::diagmat(localParameterConditionings_.col(n)) * rotationQ_ * locallyTranslatedParameter))); } return std::pow(getOscillatedValue(10.0 - maximalValue), 2.0); }
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)"}}); }