Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. module Simulator where
  2. import Numeric.LinearAlgebra
  3. import Graphics.Matplotlib
  4. import Control.Monad.State
  5. import qualified Data.Map as Map
  6. import Text.Printf
  7. import System.Random
  8. import Control.Monad
  9. import Data.Array
  10. import Data.Foldable
  11.  
  12.  
  13. karmbandit = 10
  14.  
  15. alpha = 0.1
  16.  
  17. runs = 2000
  18.  
  19. iterations = 3000
  20.  
  21. -- Unused Get matrix of uniformly distributed values
  22. uniformrandmatrix :: Int -> Int -> IO (Matrix Double)
  23. uniformrandmatrix r c = do
  24. seed <- randomIO
  25. return (reshape c $ randomVector seed Uniform (r * c))
  26.  
  27. -- Get Vector of uniformly distributed values
  28. uniformrandvector :: Int -> IO (Vector Double)
  29. uniformrandvector r = do
  30. seed <- randomIO
  31. return $ randomVector seed Uniform r
  32.  
  33. converttooneszeros :: (Vector Double) -> IO (Vector Double)
  34. converttooneszeros m = do
  35. return $ step (m - 0.1)
  36.  
  37. randomlist :: Double-> Double-> IO [Double]
  38. randomlist a b = getStdGen >>= return . Data.Foldable.toList .listArray(0,9) . randomRs (a,b)
  39.  
  40. --Unused
  41. randommatrix :: IO (Matrix Double)
  42. randommatrix = do
  43. r <- (randomlist 0 9)
  44. return $ (row r)
  45.  
  46. randomvector :: IO (Vector Double)
  47. randomvector = do
  48. r <- (randomlist 0 9)
  49. return $ fromList r
  50.  
  51. subtractone :: IO (Vector Double) -> IO (Vector Double)
  52. subtractone v = do
  53. noniov <- v
  54. let xs = Numeric.LinearAlgebra.toList ( noniov ) in
  55. return $ fromList [ 1 - x | x <- xs]
  56.  
  57.  
  58. runsimulations :: Double -> IO(Vector Double)
  59. runsimulations alpha = simulate 0 (matrix 1 [iterations] * 0) (matrix 1 [iterations] * 0)
  60. iterations karmbandit (matrix runs [karmbandit] * 0) (matrix runs [karmbandit] * 0)
  61.  
  62. where
  63. simulate :: Double -> Matrix R -> Matrix R -> Double-> Double-> Matrix R -> Matrix R -> IO( Vector Double)
  64. simulate x recordsaver optimalsaver iter k q n=
  65. case () of _
  66. | x >= iter -> do
  67. m <- uniformrandvector 10
  68. liftM2 (*) (converttooneszeros m) (randomvector)
  69. | x < iter -> simulate (x + 1 ) recordsaver optimalsaver iter k q n
  70. main = do
  71. m <- runsimulations 0
  72. u <- uniformrandvector 10
  73. n <- converttooneszeros u
  74. print n
  75. n1 <- subtractone (converttooneszeros u)
  76. print n1
  77. return ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement