【发布时间】:2011-04-25 09:27:16
【问题描述】:
很抱歉再次打扰,但由于我是 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;
}
【问题讨论】:
-
你能发布你的整个代码吗?您只显示了对 RNG 的一次调用。
-
谢谢,我添加了或多或少的基本功能。我希望现在更清楚了
标签: c++ random generator nsnumber montecarlo