代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Benjamin Brown

如何设定数据的熵。随机的?

  •  3
  • Jeffrey Benjamin Brown  · 技术社区  · 6 年前

    Haskell中的随机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
    

    它总是产生相同的结果。我想从早到晚播种。理想情况下,不必通过实际阅读时间来弄脏我的手。

    (我在随机fu文档中的任何地方都没有看到“seed”这个词,但是我在一些地方找到了“熵源”这个短语。)

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dave Compton    6 年前

    如果你想从时钟上播种,你可以得到时间 getPOSIXTime . 使用可能更有意义 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