2015-10-26 2 views
-1

я прочитал о том, как FoundationDB делает свою сеть тестирование/моделирование здесь: http://www.slideshare.net/FoundationDB/deterministic-simulation-testingКак реализовать детерминированный однопоточен сети моделирования

Я хотел бы реализовать что-то очень похожее, но не могу понять, как они на самом деле осуществить это. Как можно писать, например, класс C++, который делает то, что они делают. Можно ли сделать имитацию ими, не производя генерации кода (как они предположительно делают)?

Также: Как можно повторить моделирование, если оно содержит случайные события? Каждый раз, когда симуляция потребует выбора нового случайного значения и, таким образом, будет не таким же, как раньше. Может быть, я что-то упустил ... надеюсь, что кто-то может пролить свет на этот вопрос.

ответ

0

Вы можете найти немного больше деталей в разговоре, что пошел вместе с этими горками здесь: https://www.youtube.com/watch?v=4fFDFbi3toc

Что касается детерминизм вопроса, вы правы, что моделирование не может быть повторен в точности если не все возможные источники случайность и другой недетерминизм тщательно контролируются. С этой целью:

(1) Генерировать все случайные числа из PRNG, которые вы используете с известным значением.

(2) Избегайте каких-либо разветвлений или условных обозначений на основе фактов о мире, которые вы не контролируете (например, время суток, нагрузка на машину и т. Д.), Или если вы не можете помочь что, а затем псевдо-случайным образом имитировать эти вещи тоже.

(3) Убедитесь, что любой механизм, который вы выбираете для параллелизма, имеет режим, в котором он может гарантировать детерминированный порядок выполнения.

Так как это легко повредить все эти вещи, вы также захотите узнать, был ли нарушен детерминизм.

Все это описано более подробно в разговоре, который я связал выше.

0

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

После этого самая большая проблема, которую я видел, имеет тенденцию быть уверенным, что вы не перебираете коллекции с недетерминированным порядком. Например, в Java вы должны использовать LinkedHashMap вместо HashMap.

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