Распределенное последовательное поколение случайного числа в Ruby 1.9.2
-
01-10-2019 - |
Вопрос
То 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)