packages feed

aivika-lattice-0.5: tests/Distribution.hs

import Control.Monad
import Control.Monad.Trans

import Simulation.Aivika.Trans
import Simulation.Aivika.Lattice
import Simulation.Aivika.Experiment.Histogram

meanUpTime = 1.0
meanRepairTime = 0.5

specs = Specs { spcStartTime = 0.0,
                spcStopTime = 1000.0,
                spcDT = 0.1,
                spcMethod = RungeKutta4,
                spcGeneratorType = SimpleGenerator }
        
model :: Simulation LIO Histogram
model =
  do let latticeDistribution :: Estimate LIO [Int]
         latticeDistribution =
           do k <- liftComp latticeMemberIndex
              return [k]

     let reduce :: [Int] -> [Int] -> Estimate LIO [Int]
         reduce ks1 ks2 = return $ ks1 ++ ks2 
 
     let leaf = latticeDistribution

     ks <- foldEstimate reduce leaf

     runEstimateInStartTime $
       do xs <- ks
          let ys = fmap (fromIntegral) xs
              hs = histogram binScott [ys]
          return hs

main :: IO ()
main =
  do lat <- newRandomLattice 10
     hs <- runLIO lat $
           runSimulation model specs
     putStrLn "Histogram:"
     putStrLn (show hs)