aivika-experiment-chart 1.0 → 1.1
raw patch · 4 files changed
+19/−28 lines, 4 filesdep ~aivikadep ~aivika-experiment
Dependency ranges changed: aivika, aivika-experiment
Files
- aivika-experiment-chart.cabal +3/−3
- examples/BassDiffusion.hs +8/−14
- examples/Furnace.hs +6/−8
- examples/MachRep3.hs +2/−3
aivika-experiment-chart.cabal view
@@ -1,5 +1,5 @@ name: aivika-experiment-chart-version: 1.0+version: 1.1 synopsis: Simulation experiments with charting for the Aivika library description: This package complements the Aivika and Aivika Experiment packages with@@ -51,7 +51,7 @@ lens >= 3.9, data-default-class < 0.1, colour >= 2.3.3,- aivika >= 1.0,- aivika-experiment >= 1.0+ aivika >= 1.1,+ aivika-experiment >= 1.1 ghc-options: -O2
examples/BassDiffusion.hs view
@@ -1,6 +1,7 @@ import System.Random import Data.Array+ import Control.Monad import Control.Monad.Trans @@ -36,16 +37,6 @@ Left "adopters"] } ] } -exprnd :: Double -> IO Double-exprnd lambda =- do x <- getStdRandom random- return (- log x / lambda)- -boolrnd :: Double -> IO Bool-boolrnd p =- do x <- getStdRandom random- return (x <= p)- data Person = Person { personAgent :: Agent, personPotentialAdopter :: AgentState, personAdopter :: AgentState }@@ -71,20 +62,23 @@ do setStateActivation (personPotentialAdopter p) $ do modifyRef potentialAdopters $ \a -> a + 1 -- add a timeout- t <- liftIO $ exprnd advertisingEffectiveness + t <- liftParameter $+ randomExponential (1 / advertisingEffectiveness) let st = personPotentialAdopter p st' = personAdopter p addTimeout st t $ selectState st' setStateActivation (personAdopter p) $ do modifyRef adopters $ \a -> a + 1 -- add a timer that works while the state is active- let t = liftIO $ exprnd contactRate -- many times!+ let t = liftParameter $+ randomExponential (1 / contactRate) -- many times! addTimer (personAdopter p) t $ do i <- liftIO $ getStdRandom $ randomR (1, n) let p' = ps ! i st <- selectedState (personAgent p') when (st == Just (personPotentialAdopter p')) $- do b <- liftIO $ boolrnd adoptionFraction+ do b <- liftParameter $+ randomTrue adoptionFraction when b $ selectState (personAdopter p') setStateDeactivation (personPotentialAdopter p) $ modifyRef potentialAdopters $ \a -> a - 1@@ -109,7 +103,7 @@ adopters <- newRef 0 ps <- createPersons definePersons ps potentialAdopters adopters- runEventInStartTime IncludingCurrentEvents $+ runEventInStartTime $ activatePersons ps experimentDataInStartTime [("potentialAdopters",
examples/Furnace.hs view
@@ -33,15 +33,13 @@ -- processor. import Data.Maybe-import System.Random+ import Control.Monad import Control.Monad.Trans import Simulation.Aivika import Simulation.Aivika.Queue.Infinite -import qualified Simulation.Aivika.DoubleLinkedList as DLL- import Simulation.Aivika.Experiment import Simulation.Aivika.Experiment.Chart @@ -311,26 +309,26 @@ do furnace <- newFurnace -- initialize the furnace and start its iterating in start time- runEventInStartTime IncludingCurrentEvents $+ runEventInStartTime $ do initializeFurnace furnace startIteratingFurnace furnace -- generate randomly new input ingots- runProcessInStartTime IncludingCurrentEvents $+ runProcessInStartTime $ inputProcess furnace -- load permanently the input ingots in the furnace- runProcessInStartTime IncludingCurrentEvents $+ runProcessInStartTime $ loadingProcess furnace experimentDataInStartTime [(totalIngotCountName, seriesEntity "total ingot count" $- queueStoreCount (furnaceQueue furnace)),+ enqueueStoreCount (furnaceQueue furnace)), (loadedIngotCountName, seriesEntity "loaded ingot count" $ -- actually, +/- 1- queueOutputCount (furnaceQueue furnace)),+ dequeueCount (furnaceQueue furnace)), (readyIngotCountName, seriesEntity "ready ingot count" $
examples/MachRep3.hs view
@@ -13,7 +13,6 @@ -- until both machines are down. We find the proportion of up time. It -- should come out to about 0.45. -import System.Random import Control.Monad import Control.Monad.Trans @@ -126,10 +125,10 @@ machine pid - runProcessInStartTimeUsingId IncludingCurrentEvents+ runProcessInStartTimeUsingId pid1 (machine pid2) - runProcessInStartTimeUsingId IncludingCurrentEvents+ runProcessInStartTimeUsingId pid2 (machine pid1) let result =