【问题标题】:Random Number Generation with Well44497a in C++在 C++ 中使用 Well44497a 生成随机数
【发布时间】:2011-04-25 09:27:16
【问题描述】:

很抱歉再次打扰,但由于我是 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;
    }        

【问题讨论】:

  • 你能发布你的整个代码吗?您只显示了对 RNG 的一次调用。
  • 谢谢,我添加了或多或少的基本功能。我希望现在更清楚了

标签: c++ random generator nsnumber montecarlo


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 2013-11-09
    • 2019-05-15
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多