2013-02-15 3 views
3

Я хочу сгенерировать последовательность случайных чисел, которые будут использоваться для выбора плиток для «лабиринта». Каждый лабиринт будет иметь идентификатор, и я хочу использовать этот идентификатор в качестве семени для псевдослучайной функции. Таким образом, я могу создавать один и тот же лабиринт снова и снова, учитывая его идентификатор лабиринта. Предпочтительно, я не хочу использовать встроенную псевдослучайную функцию на языке, поскольку у меня нет контроля над алгоритмом, и он может меняться с платформы на платформу. Таким образом, я хотел бы знать:Как реализовать псевдослучайную функцию

  • Как я могу реализовать свою собственную псевдослучайную функцию?
  • Возможно ли создание псевдослучайных случайных чисел с независимой платформой?
+2

Посмотрите в Интернете! [Википедия: линейный конгруэнтный генератор] (http://en.wikipedia.org/wiki/Linear_congruential_generator). –

+2

Или даже больше [статьи в Википедии] (http://en.wikipedia.org/wiki/Pseudo-random_number_generator) со ссылками и ссылками ... SO не Google, вы знаете. – vanza

+1

Хотя концептуально лучше всего реализовать собственный генератор псевдослучайных чисел, на практике, вероятно, лучше всего взять чужой псевдослучайный генераторный код, который является открытым исходным кодом, и просто сделать его копию для вашего приложения. Таким образом, вы знаете, что это реализовано правильно, и это не изменится только потому, что базовая библиотека изменилась. –

ответ

7

Да, это возможно.

Ниже приведен пример такого алгоритма (и его использования) для генерации шума http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

Эти конкретные случайные функции (Noise1, Noise2, Noise3, ..) использовать входные параметры и рассчитать случайные значения из псевдо там. Их выходной диапазон от 0.0 до 1.0.

И есть еще много там (как упоминалось в комментариях).

+0

Ссылка была отличной! Perlin шум функция это! –

0

Если вы используете Python, вы можете использовать случайный модуль, введя в начале, import random. Затем, чтобы использовать его, вы тип- вар = random.randint (1000, 9999)

Это дает Варе номер 4 цифры, которые могут быть использованы для его идентификатора

Если вы используете другой язык, вероятно, аналогичный модуль

+1

Но это не решает его проблему. Следующий выпуск Python может использовать другой алгоритм случайных чисел, что означает, что он получит другую последовательность чисел для одного и того же семени. –

+0

Однако он может хранить словарь в текстовом файле, который добавляется к каждому новому идентификатору. Таким образом, когда Python обновляется, новый генератор чисел будет выбирать номер, см., Находится ли он в словаре. Если это не так, создайте новый лабиринт и добавьте в текстовый файл всю необходимую информацию. Если номер уже используется, просто выберите новый номер и продолжайте проверять, пока номер не будет найден. – erdekhayser

+0

может быть проще просто сгенерировать генератор случайных чисел с помощью random.seed (maze_id), но это решение для платформы – argentage

2

Mersenne Twister может быть хорошим выбором для этого. Как вы можете видеть из псевдокода в wikipedia, вы можете засеять RNG тем, что вы предпочитаете, чтобы получать одинаковые значения для любого экземпляра с этим семенем. В вашем случае, идентификатор лабиринта или хэш идентификатора лабиринта.

Смежные вопросы