Как я могу сохранить состояние псевдослучайного генератора в Perl?

Существует ли способ сохранить текущее состояние созданного в генераторе псевдослучайного числа в Perl так, чтобы, когда моя программа запущена снова, она могла поднять последовательность от того, где она кончила вместо того, чтобы запуститься с новой последовательности?

Прямо сейчас я храню, где я, а также начальное семя и затем выбрасывание начального сегмента, которому я уже видел использование чего-то подобного:

sub consume_upto_n {
    my ($seed, $n) = @_;
    $n = 1 unless defined $n and $n >= 1;
    srand $seed;
    rand for 1 .. $n - 1;
    return;
}

Например:

srand 0x18;
my @v = map { rand } 1 .. 5;

Позже:

consume_upto_n(0x18, 3);
my @z = map { rand } 3 .. 5;

Затем $z[0] == $v[2], $z[1] == $v[3] и т.д.

10
задан Yu Hao 1 December 2013 в 02:55
поделиться

1 ответ

Я не думаю, что встроенный rand позволяет вам это сделать. Но вы можете использовать замену rand . Например, Math :: Random :: MT :: Auto позволяет вам сериализовать свои объекты (предположительно включая $ MRMA :: PRNG , который является объектом который используется его заменой rand ).

Я не совсем понимаю, в чем дело. Если это достаточно случайная последовательность, как вы можете определить, продолжаете ли вы эту последовательность или начинаете новую?

6
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: