2015-10-26 59 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。