我有一個主服務器和(可能)多個客戶端(工作人員)的計算/模擬系統。他們都在使用相同的數據,但需要隨機數進行計算。使用不同的隨機數發生器的分佈式計算
什麼是最好的PRNG和最好的種子方法,以確保兩個客戶端不使用相同的週期並計算兩次相同的結果。
我有一個主服務器和(可能)多個客戶端(工作人員)的計算/模擬系統。他們都在使用相同的數據,但需要隨機數進行計算。使用不同的隨機數發生器的分佈式計算
什麼是最好的PRNG和最好的種子方法,以確保兩個客戶端不使用相同的週期並計算兩次相同的結果。
從基於機器(MAC地址,名稱,IP地址)播種的問題是種子在同一臺機器上始終是相同的。
通常種子來自當前時間。如果所有的工人機器同時開始他們的過程,那麼他們將擁有相同的種子。
處理這個問題最簡單的方法就是結合這兩個值。從機器散列生成種子,當前時間將爲每臺機器提供一個在每次運行後都會更改的唯一種子。
另一種選擇是在主設備上創建一個隨機數生成器,並讓每個工人從主設備獲取它的種子。
幾個想法,種子從客戶端的唯一的東西,如客戶端的MAC地址。
或者,讓主人產生一個隨機數,並將其作爲種子傳遞給客戶使用。
你需要它們的隨機程度如何?
boost-random有一些PRNGs,我相信如果你需要的話,他們會有一些很好的理論背景。你可以確保使用不同的種子,讓你的服務器與種子一起分發種子。
隨機數的樂趣之一是你不能保證序列不相同。但是,通過記錄時間和系統特有的東西(MAC地址,名稱的散列或IP地址),您可以使它變得不太可能。
我想我會結合使用這兩種方法 - 每臺機器將使用來自主機的時間和數量作爲種子。我不知道從理論的角度來看,這會產生多少獨特的週期,也許我可以每隔幾千個數字就給它加上一個數字,然後再給它下一個數字。這會幫助還是讓它變得更糟? – lacop 2010-02-05 10:21:53