Генерация случайных чисел с помощью Well44497a в C ++ - PullRequest
2 голосов
/ 25 апреля 2011

Извините, что беспокою снова, но, поскольку я новый C ++, у меня много странных и глупых проблем.

Я программирую метод MCMC. Я читал на этом форуме, что WELL RNG была хорошей альтернативой для генерации случайных чисел, поэтому я пытаюсь заставить его работать. Так что вот вопросы:

  1. Я компилирую "Well44497a.c" в моем проекте c ++ без дальнейших изменений. Это скомпилировано. Это правильно или я должен внести какие-либо изменения?

  2. Я использую следующую схему внутри моего кода, но она просто генерирует цикл из 3 RN

решено: проблема заключалась в том, что InitWELLRNG44497a (состояние) должен располагаться вне функции. Я перезапускал генератор каждый раз, когда генерировал образец. Для всего запуска генератор должен быть инициализирован только один раз.

    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;
    }        

1 Ответ

1 голос
/ 25 апреля 2011

Ваша функция инициализирует массив state одинаковыми значениями каждый раз, когда вы вызываете функцию sampler().Идея массива state состоит в том, что он хранит текущее состояние генератора случайных чисел, и что вы не возитесь с содержимым state между вызовами в ГСЧ.

Сделайте state Массив глобален в вашей программе, инициализируйте его один раз и не трогайте его после инициализации.

...