gpt4 book ai didi

c++ - 将 rand_r 更改为 srand/rand

转载 作者:行者123 更新时间:2023-11-28 02:25:26 26 4
gpt4 key购买 nike

我想改变 rand_r 方法对 srand/rand 的使用或与其他带种子的随机生成器一起使用。

在代码中有一个循环调用带有种子的train方法。

int nseeds = 5;
for (int seed = 0; seed < nseeds; seed ++)
{
c.train(K, reps, gradientReps, improveReps, lambda, seed, SYMMETRICDIFF);
}

train 方法中,我想更改 3 个对 rand_r 的调用。我想我可以在开始时用给定的种子调用 srand 然后简单地调用 rand() 方法,但我不知道这是否是正确的方法。你怎么看?

void Cluster::train(int K, int reps, int gradientReps, int improveReps, Scalar lambda, int seed, int whichLoss)
{
unsigned int seed_ = seed;
unsigned int* sptr = &seed_;
//srand(seed);

for (int rep = 0; rep < reps; rep ++)
{
for (int k = 0; k < K; k ++)
if (rep == 0 or (int) chat[k].size() == 0 or (int) chat[k].size() == gd->nNodes)
{
for (int i = 0; i < gd->nNodes; i ++)
if (rand_r(sptr) % 2 == 0) chat[k].insert(i);
for (int i = 0; i < gd->nEdgeFeatures; i ++)
theta[k*gd->nEdgeFeatures + i] = 0;

theta[k*gd->nEdgeFeatures + rand_r(sptr)%gd->nEdgeFeatures] = 1.0;
}

for (int k = 0; k < K; k ++)
{
for (int o = 0; o < K; o ++)
{
int x1 = o;
int x2 = rand_r(sptr) % K;
// code
}
}
}
}

source 的链接.以上代码在main.cpp和cluster.cpp中。

最佳答案

如果你的编译器支持 C++11,我会使用 new random number library .如果没有,您应该尝试 Boost random (基本上是一样的)。我推荐使用 mt19937 随机数引擎,它产生的随机数质量非常好,而且速度也很快。

那么您的代码将如下所示:

std::mt19937 rng;
...
std::uniform_int_distribution dist(0, K - 1);
...
int x2 = dist(rng);

关于c++ - 将 rand_r 更改为 srand/rand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30840370/

26 4 0
文章推荐: c++ - 我应该如何读取 FILE_NOTIFY_INFORMATION 结构中的文件名
文章推荐: c++ - 条件变量不起作用,但在添加 std::cout 后,它起作用了
文章推荐: php - 如何以形式传递多个图像并在 Controller 中捕获?
文章推荐: javascript - 未捕获的类型错误 : Property 'which' of object # is not a function