Avoid resetting seed for every configuration. (#6349)

This commit is contained in:
Jiaming Yuan
2020-11-06 10:28:35 +08:00
committed by GitHub
parent f3a4253984
commit 519cee115a
4 changed files with 41 additions and 4 deletions

View File

@@ -11,6 +11,7 @@
#include <xgboost/version_config.h>
#include "xgboost/json.h"
#include "../../src/common/io.h"
#include "../../src/common/random.h"
namespace xgboost {
@@ -333,4 +334,26 @@ TEST(Learner, Seed) {
ASSERT_EQ(std::to_string(seed),
get<String>(config["learner"]["generic_param"]["seed"]));
}
TEST(Learner, ConstantSeed) {
auto m = RandomDataGenerator{10, 10, 0}.GenerateDMatrix(true);
std::unique_ptr<Learner> learner{Learner::Create({m})};
learner->Configure(); // seed the global random
std::uniform_real_distribution<float> dist;
auto& rng = common::GlobalRandom();
float v_0 = dist(rng);
learner->SetParam("", "");
learner->Configure(); // check configure doesn't change the seed.
float v_1 = dist(rng);
CHECK_NE(v_0, v_1);
{
rng.seed(GenericParameter::kDefaultSeed);
std::uniform_real_distribution<float> dist;
float v_2 = dist(rng);
CHECK_EQ(v_0, v_2);
}
}
} // namespace xgboost