Распределенное последовательное поколение случайного числа в Ruby 1.9.2

StackOverflow https://stackoverflow.com/questions/3587150

Вопрос

То Random Класс в Ruby 1.9.2 гарантированно генерирует случайные числа в том же порядке, учитывая конкретное семя и диапазон. Например:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

Но предположим, что я хочу генерировать следующий номер в последовательности на другом компьютере (без повторного генерации более ранних чисел в последовательности). Это должно быть возможно, учитывая предыдущий выход. Есть ли способ сделать это с Random сорт? Или мне нужно написать свою собственную реализацию Mersenne Twister.?

[Редактировать: Как указано в комментариях ниже, это не на самом деле невозможно определить состояние Random Пример только от вывода, потому что только часть состояния (в частности, низкие 32 бита) используются для выхода.

Это было полезно?

Решение

Не могу проверить, но генератор может быть маршаллирован, по словам Марк-Андре Лафортуны здесьОтказ Так что это может работать:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

File.open("/path/to/file","w") do |f|
  Marshal.dump(r,f)
end

# later, may be on another computer

File.open("/path/to/file","r") do |f|
  @v = Marshal.load(f)
end

puts @v.rand(100)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top