2

很抱歉再次打扰,但由于我是 C++ 新手,我遇到了很多奇怪和愚蠢的问题。

我正在编写一个 MCMC 方法。我在这个论坛上读到,WELL RNG是生成随机数的一个很好的替代方案,所以我正在努力让它发挥作用。所以这里的问题:

  1. 我正在我的 c++ 项目中编译“Well44497a.c”,无需进一步修改。它编译。这是正确的还是我应该做出任何改变?

  2. 我在我的代码中使用以下方案,但它只是生成一个 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;
    }        
4

1 回答 1

1

state每次调用函数时,您的函数似乎都会使用相同的值初始化数组sampler()。数组的想法是它保存随机数生成器的当前状态,并且您不会在 RNG 调用之间state摆弄内容。state

在你的程序中使state数组全局化,初始化一次,初始化后不要碰它。

于 2011-04-25T09:50:52.853 回答