Haskell:如何播种(设置使用的熵)Data.Random?
Haskell: How to seed (set the entropy used by) Data.Random?
random-fu(Data.Random)包在Haskelloffers下例:
import Data.Random
import System.Random.MWC
logNormal :: Double -> Double -> RVar Double
logNormal mu sigmaSq = do
x <- normal mu sigmaSq
return (exp x)
main = do
mwc <- create
y <- sampleFrom mwc (logNormal 5 1)
print y
它总是产生相同的结果。我想从时钟播种。理想情况下,我不必亲自阅读时间。
(我在 random-fu 文档的任何地方都没有看到 "seed" 这个词,但我在几个地方找到了短语 "source of entropy"。)
如果你想从时钟播种,你可以用 getPOSIXTime
获取时间。按照 Silvio Mayolo 的建议,使用 createSystemRandom
可能更有意义。这两种方法都在下面的代码中进行了演示。
import Data.Random
import Data.Vector (singleton)
import Data.Time.Clock.POSIX (getPOSIXTime)
import System.Random.MWC
logNormal :: Double -> Double -> RVar Double
logNormal mu sigmaSq = do
x <- normal mu sigmaSq
return (exp x)
main = do
t0 <- getPOSIXTime
mwc <- initialize (singleton (floor t0))
y <- sampleFrom mwc (logNormal 5 1)
print y
mwc2 <- createSystemRandom
z <- sampleFrom mwc2 (logNormal 5 1)
print z
random-fu(Data.Random)包在Haskelloffers下例:
import Data.Random
import System.Random.MWC
logNormal :: Double -> Double -> RVar Double
logNormal mu sigmaSq = do
x <- normal mu sigmaSq
return (exp x)
main = do
mwc <- create
y <- sampleFrom mwc (logNormal 5 1)
print y
它总是产生相同的结果。我想从时钟播种。理想情况下,我不必亲自阅读时间。
(我在 random-fu 文档的任何地方都没有看到 "seed" 这个词,但我在几个地方找到了短语 "source of entropy"。)
如果你想从时钟播种,你可以用 getPOSIXTime
获取时间。按照 Silvio Mayolo 的建议,使用 createSystemRandom
可能更有意义。这两种方法都在下面的代码中进行了演示。
import Data.Random
import Data.Vector (singleton)
import Data.Time.Clock.POSIX (getPOSIXTime)
import System.Random.MWC
logNormal :: Double -> Double -> RVar Double
logNormal mu sigmaSq = do
x <- normal mu sigmaSq
return (exp x)
main = do
t0 <- getPOSIXTime
mwc <- initialize (singleton (floor t0))
y <- sampleFrom mwc (logNormal 5 1)
print y
mwc2 <- createSystemRandom
z <- sampleFrom mwc2 (logNormal 5 1)
print z