xgboost/src/common/random.h

72 lines
1.7 KiB
C++

/*!
* Copyright 2015 by Contributors
* \file random.h
* \brief Utility related to random.
* \author Tianqi Chen
*/
#ifndef XGBOOST_COMMON_RANDOM_H_
#define XGBOOST_COMMON_RANDOM_H_
#include <random>
#include <limits>
namespace xgboost {
namespace common {
/*!
* \brief Define mt19937 as default type Random Engine.
*/
typedef std::mt19937 RandomEngine;
#if XGBOOST_CUSTOMIZE_GLOBAL_PRNG
/*!
* \brief An customized random engine, used to be plugged in PRNG from other systems.
* The implementation of this library is not provided by xgboost core library.
* Instead the other library can implement this class, which will be used as GlobalRandomEngine
* If XGBOOST_RANDOM_CUSTOMIZE = 1, by default this is switched off.
*/
class CustomGlobalRandomEngine {
public:
/*! \brief The result type */
typedef size_t result_type;
/*! \brief The minimum of random numbers generated */
inline static constexpr result_type min() {
return 0;
}
/*! \brief The maximum random numbers generated */
inline static constexpr result_type max() {
return std::numeric_limits<size_t>::max();
}
/*!
* \brief seed function, to be implemented
* \param val The value of the seed.
*/
void seed(result_type val);
/*!
* \return next random number.
*/
result_type operator()();
};
/*!
* \brief global random engine
*/
typedef CustomGlobalRandomEngine GlobalRandomEngine;
#else
/*!
* \brief global random engine
*/
typedef RandomEngine GlobalRandomEngine;
#endif
/*!
* \brief global singleton of a random engine.
* This random engine is thread-local and
* only visible to current thread.
*/
GlobalRandomEngine& GlobalRandom(); // NOLINT(*)
} // namespace common
} // namespace xgboost
#endif // XGBOOST_COMMON_RANDOM_H_