Генерация случайных чисел с помощью Well44497a в C++
Извините, что беспокою снова, но, поскольку я новый C++, у меня много странных и глупых проблем.
Я программирую метод MCMC. Я читал на этом форуме, что WELL RNG был хорошей альтернативой для генерации случайных чисел, поэтому я пытаюсь заставить его работать. Итак, вот вопросы:
Я компилирую "Well44497a.c" в моем проекте C++ без дальнейших изменений. Это скомпилировано. Это правильно или я должен внести какие-то изменения?
Я использую следующую схему внутри моего кода, но он просто генерирует цикл из 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 ответ
Ваша функция появляется для инициализации state
массив с одинаковыми значениями каждый раз, когда вы вызываете sampler()
функция. Идея state
массив состоит в том, что он содержит текущее состояние генератора случайных чисел, и что вы не возитесь с содержимым state
между звонками в ГСЧ.
Сделать state
массив global в вашей программе, инициализируйте его один раз, и не трогайте его после инициализации.