Re[2]: Синхронизация генератора случайных чисел
От: DaDa Cloun Россия  
Дата: 30.09.09 12:36
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Не совсем понятно, зачем этого добиваться. Почему бы просто не бросить первый генератор на произвол судьбы и на закуску GC и завести два новых в этот момент, с одним и тем же startingPoint ?


Проблема в том что очень сложно описать суть задачи. Можно процесс вычисления состояния некоторого объекта представить как ствол дерева. В какие-то моменты времени возникает необходимость начать параллельное вычисление состояний с тем же генератором, но что-то в состояние объекта изменилось в результате внешнего воздействия. Вот в этих узлах мне необходимо сделать копию генератора, что бы начать параллельно вычисление. Причем два таких "дерева" растет параллельно в различных процессах (клиент и сервер).

Так теперь, почему же ваше предложение мне не подходит. Что мне брать в качестве этих startingPoint в те моменты времени, когда процесс надо разветвить? И как эти startingPoint синхронизировать?
Re[2]: Синхронизация генератора случайных чисел
От: Мизантроп  
Дата: 01.10.09 02:04
Оценка:
Здравствуйте, DaDa Cloun, Вы писали:

DC>На данный момент я нашел следующее "решение" — сделал свою реализацию генератора, используя этот алгоритм. Кроме синхронизации мне еще нужна кроссплатформенность (вернее тот же алгоритм на различных языках). Поэтому данное решение наиболее удобное для меня.


Вы напрасно взяли слово "решение" в кавычки. При Ваших требованиях это один из двух возможных вариантов. Второй — оформление генератора в библиотеке, которая будет использована из других языков, при этом Вам необходимо будет предоставить прямой доступ на чтение и запись к промежуточеному состоянию генератора, а это накладывает ограничения на вобор языка для реализации такой библиотеки, потому как далеко не во всех такой доступ предоставляется.
"Нормальные герои всегда идут в обход!"
Re[3]: Синхронизация генератора случайных чисел
От: Мизантроп  
Дата: 01.10.09 02:19
Оценка:
Здравствуйте, DaDa Cloun, Вы писали:

DC>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Не совсем понятно, зачем этого добиваться. Почему бы просто не бросить первый генератор на произвол судьбы и на закуску GC и завести два новых в этот момент, с одним и тем же startingPoint ?


DC>Проблема в том что очень сложно описать суть задачи. Можно процесс вычисления состояния некоторого объекта представить как ствол дерева. В какие-то моменты времени возникает необходимость начать параллельное вычисление состояний с тем же генератором, но что-то в состояние объекта изменилось в результате внешнего воздействия. Вот в этих узлах мне необходимо сделать копию генератора, что бы начать параллельно вычисление. Причем два таких "дерева" растет параллельно в различных процессах (клиент и сервер).


DC>Так теперь, почему же ваше предложение мне не подходит. Что мне брать в качестве этих startingPoint в те моменты времени, когда процесс надо разветвить?


Например, последнее возвращенное вызовом Next значение.

DC>И как эти startingPoint синхронизировать?


Ну Вы же как-то собирались передавать копию генератора, тем-же способом и startingPoint можно передать. Но Ваше требование "для разных языков" сводит эти рассуждения в разряд отвлечённых. Вам потребуется внешняя библиотека, которая могла-бы быть использована из разных языков.
"Нормальные герои всегда идут в обход!"
Re[4]: Синхронизация генератора случайных чисел
От: midcyber
Дата: 01.10.09 08:38
Оценка:
Здравствуйте, Мизантроп, Вы писали:

DC>>Так теперь, почему же ваше предложение мне не подходит. Что мне брать в качестве этих startingPoint в те моменты времени, когда процесс надо разветвить?


М>Например, последнее возвращенное вызовом Next значение.


Этого делать с PRNG нельзя — будет плохо распределению.
На левой картинке — распределение для одного Random — 100 миллионов вызовов rnd.Next(65536)
На правой — каждые 10000 сбрасывался генератор rnd = new Random(rnd.Next(65536));

Re[5]: Синхронизация генератора случайных чисел
От: Ziaw Россия  
Дата: 01.10.09 08:49
Оценка:
Здравствуйте, midcyber, Вы писали:

M>Этого делать с PRNG нельзя — будет плохо распределению.

M>На левой картинке — распределение для одного Random — 100 миллионов вызовов rnd.Next(65536)
M>На правой — каждые 10000 сбрасывался генератор rnd = new Random(rnd.Next(65536));
M>

У меня ощущение, что эксперимент неудачный, можно увидеть код?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[6]: Синхронизация генератора случайных чисел
От: midcyber
Дата: 01.10.09 09:57
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>У меня ощущение, что эксперимент неудачный, можно увидеть код?


Да, Вы оказались правы, у меня была ошибка. Заменил картинку
Re[5]: Синхронизация генератора случайных чисел
От: Мизантроп  
Дата: 01.10.09 10:10
Оценка:
Здравствуйте, midcyber, Вы писали:

M>Ошибочка закралась.


Тем не менее, я тоже думаю, что способ не очень Самописная реализация просто напрашивается, благо сложнностей оно не представляет, а в сети навалом как описаний алгоритмов, так и примеров кода.
"Нормальные герои всегда идут в обход!"
Re[4]: Синхронизация генератора случайных чисел
От: DaDa Cloun Россия  
Дата: 06.10.09 06:43
Оценка:
Здравствуйте, Мизантроп, Вы писали:

DC>>Так теперь, почему же ваше предложение мне не подходит. Что мне брать в качестве этих startingPoint в те моменты времени, когда процесс надо разветвить?

М>Например, последнее возвращенное вызовом Next значение.

Я боюсь что это плохо повлияет на само распределение

DC>>И как эти startingPoint синхронизировать?

М>Ну Вы же как-то собирались передавать копию генератора, тем-же способом и startingPoint можно передать. Но Ваше требование "для разных языков" сводит эти рассуждения в разряд отвлечённых. Вам потребуется внешняя библиотека, которая могла-бы быть использована из разных языков.

Согласен. Но на самом деле реализация "своего" генератора достаточно тривиальная задача, поэтому проще реализовать тот же алгоритм на других языках. Так что в результате я полностью удовлетворился своим изначальным решением.
Re[6]: Синхронизация генератора случайных чисел
От: DaDa Cloun Россия  
Дата: 06.10.09 06:44
Оценка:
Здравствуйте, Мизантроп, Вы писали:

М>Тем не менее, я тоже думаю, что способ не очень Самописная реализация просто напрашивается, благо сложнностей оно не представляет, а в сети навалом как описаний алгоритмов, так и примеров кода.


Да, именно так все и оказалось. Спасибо всем за ответы.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.