Оптимальное начальное число констант для Mersenne Twister в C ++ 11

Мой вариант использования: мне нужны случайные числа, но только для графики (а не для криптографии). Мне нужно получить одно и то же изображение (результат) для двух визуализаций / прогонов. Например, использование time() в качестве начального числа не приведет к тому же результату при следующем запуске. Итак, мне нужно постоянное семя.

В документации к Mersenne Twister сказано, что он не любит 0 как семя, а также не любит определенные битовые комбинации. Говорят, что в таких случаях он принимает до 800000 звонков, пока снова не будет доставлен хорошие случайные числа. Из соображений скорости я не хочу тратить 800000 звонков на накладные расходы. В идеале мне понадобятся хорошие и надежные значения, которые я могу напрямую использовать в качестве семян.


person MatthiasL    schedule 27.03.2017    source источник
comment
Вы пробовали 4?   -  person Kerrek SB    schedule 27.03.2017
comment
Вам действительно нужны действительно случайные результаты при тестировании?   -  person NathanOliver    schedule 27.03.2017
comment
Зачем нужен одинаковый результат за два прогона? Если ответом является воспроизводимость, вам следует получить начальное значение из стандартного источника (например, отметки времени) и зарегистрировать его, а также сделать его необязательно переопределяемым в качестве аргумента командной строки. Это подход, используемый, например, gtest.   -  person Nir Friedman    schedule 27.03.2017
comment
Привет, Нир, я стреляю частицами в случайном положении. Мне нужен тот же результат, потому что в противном случае я получу мерцание анимации (частицы будут менять положение с изображения на следующее изображение). Представьте, как пролетает фотоаппарат. Я также проверю, используя 3D-позицию в качестве семени, так как это выглядит более стабильно. И последнее, но не менее важное: оптимальная поддержка, когда объекты в сцене также анимированы. если препятствие движется, и моя частица заблокирована, все частицы, которые выстреливаются позже, сошли бы с рельсов (мерцали). Скорее всего, я предварительно вычислю последовательности случайных чисел, чтобы предотвратить это.   -  person MatthiasL    schedule 28.03.2017


Ответы (1)


Просто выберите любой номер, который хотите.

Вы должны иметь в виду, что стандарты, которые используют эксперты по криптографии и аналитики алгоритмов для «высококачественной случайности», почти наверняка намного превышают стандарты, необходимые для вашего проекта, особенно для хорошо протестированного алгоритма, такого как Mersenne Twister. Большинство из этих стандартов разработаны для сценариев тестирования ошибок или статистического анализа, где последовательность случайных чисел «некачественного качества» может иметь потенциал пропустить важные тестовые примеры или где числа могут искажать ожидаемое среднее / медианное / стандартное отклонение. результатов.

Крайне маловероятно, что это касается вашего приложения.

person Xirema    schedule 27.03.2017
comment
Я пробовал 0, 4 и 2384572893 в качестве семян. Результаты выглядят очень похожими. Я действительно видел некую структуру с 0, которая исчезнет с 4 и 2384572893, но это может быть чистой случайностью. - person MatthiasL; 27.03.2017
comment
У Mersenne Twister проблема, когда все элементы в его массиве состояний равны нулю - это другое дело, чем число или последовательность, которые вы передаете seed или конструктору. Для распределения энтропии от начального значения в массив состояний используется алгоритм, который позволяет избежать вырожденных ситуаций. Итак, это правильный ответ, просто выберите любое число, которое хотите. - person Christopher Oicles; 28.03.2017