Haskell:如何播种(设置 Data.Random 使用的熵)?

标签 haskell random random-seed

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/

相关文章:

python - 在tensorflow中要实现训练结果100%可复现,需要在哪里设置seeds?

haskell - 在 Haskell 中使用 Maybe 类型

haskell - Data.Text 有 Functor 实例吗?

performance - 当您的算法依赖于惰性时,如何修复由惰性引起的空间泄漏

Python ImportError 无法导入 urandom 自 Ubuntu 12.04 升级

javascript - 随 secret 码生成器 JavaScript

testing - 随机数生成器猴子测试顽固派

random - YAP Prolog random 缺乏随机性

haskell - 需要灵活的实例吗?

java - 为什么我应该在我的 java 卡程序中使用 "setSeed()"?