很抱歉再次打扰,但由于我是 C++ 新手,我遇到了很多奇怪和愚蠢的问题。
我正在编写一个 MCMC 方法。我在这个论坛上读到,WELL RNG是生成随机数的一个很好的替代方案,所以我正在努力让它发挥作用。所以这里的问题:
我正在我的 c++ 项目中编译“Well44497a.c”,无需进一步修改。它编译。这是正确的还是我应该做出任何改变?
我在我的代码中使用以下方案,但它只是生成一个 3 RN 循环
已解决:问题是 InitWELLRNG44497a(state) 应该放在函数之外。每次生成样本时,我都会重新启动生成器。对于整个运行,生成器只需初始化一次。
int* sampler(PARAMETERS) { //this function returns a sample
int k;
unsigned int state[1391];
for (k = 0; k < 1391; ++k)
{
state[k] = k;
}
InitWELLRNG44497a(state); //THIS SHOULD GO ON THE CALLER FUNCTION NOT HERE
double value_first = valuate(first_state); // this function valuates one of two possible states
double value_second = valuate(second_state);
double rand_number = WELLRNG44497a()
if(rand_number > value_first / (value_first + value_second))
return second_state;
else
return first_state;
}