Haskell 中的 random-fu (Data.Random) 包 offers下面的例子:
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 文档中的任何地方都没有看到“种子”这个词,但我在一些地方找到了短语“熵源”。)
最佳答案
如果您想从时钟中获取时间,可以使用 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
关于Haskell:如何播种(设置 Data.Random 使用的熵)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461570/