aivika-experiment-chart 3.0 → 3.1
raw patch · 12 files changed
+63/−62 lines, 12 filesdep ~aivikadep ~aivika-experimentPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aivika, aivika-experiment
API changes (from Hackage documentation)
Files
- LICENSE +1/−1
- Simulation/Aivika/Experiment/Chart.hs +1/−1
- Simulation/Aivika/Experiment/Chart/DeviationChartView.hs +6/−6
- Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs +4/−4
- Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs +9/−9
- Simulation/Aivika/Experiment/Chart/HistogramView.hs +4/−4
- Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs +6/−6
- Simulation/Aivika/Experiment/Chart/Types.hs +1/−1
- Simulation/Aivika/Experiment/Chart/Utils.hs +1/−1
- Simulation/Aivika/Experiment/Chart/XYChartView.hs +10/−10
- aivika-experiment-chart.cabal +4/−4
- examples/BassDiffusion/Model.hs +16/−15
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2012, 2013, 2014 David Sorokin <david.sorokin@gmail.com>+Copyright (c) 2012-2015 David Sorokin <david.sorokin@gmail.com> All rights reserved.
Simulation/Aivika/Experiment/Chart.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/Experiment/Chart/DeviationChartView.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.DeviationChartView--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -208,11 +208,11 @@ rs2 = deviationChartRightYSeries view $ deviationChartTransform view $ experimentResults expdata- exts1 = extractDoubleStatsEitherResults rs1- exts2 = extractDoubleStatsEitherResults rs2+ exts1 = resultsToDoubleStatsEitherValues rs1+ exts2 = resultsToDoubleStatsEitherValues rs2 exts = exts1 ++ exts2- names1 = map resultExtractName exts1- names2 = map resultExtractName exts2+ names1 = map resultValueName exts1+ names2 = map resultValueName exts2 names = map Left names1 ++ map Right names2 signals = experimentPredefinedSignals expdata signal = resultSignalInIntegTimes signals@@ -220,7 +220,7 @@ results <- liftIO $ requireDeviationChartResults st names let stats = deviationChartStats results handleSignal signal $ \_ ->- do xs <- forM exts resultExtractData+ do xs <- forM exts resultValueData i <- liftDynamics integIteration liftIO $ forM_ (zip xs stats) $ \(x, stats) ->
Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.FinalHistogramView--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -188,8 +188,8 @@ rs = finalHistogramSeries view $ finalHistogramTransform view $ experimentResults expdata- exts = extractDoubleListResults rs- names = map resultExtractName exts+ exts = resultsToDoubleListValues rs+ names = map resultValueName exts signals = experimentPredefinedSignals expdata signal = filterSignalM (const predicate) $ resultSignalInStopTime signals@@ -197,7 +197,7 @@ results <- liftIO $ requireFinalHistogramResults st names let values = finalHistogramValues results handleSignal signal $ \_ ->- do xs <- forM exts resultExtractData+ do xs <- forM exts resultValueData liftIO $ forM_ (zip xs values) $ \(x, values) -> modifyMRef_ values $ return . (++) x
Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.FinalXYChartView--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -219,15 +219,15 @@ finalXYChartTransform view $ experimentResults expdata ext0 =- case extractDoubleResults rs0 of+ case resultsToDoubleValues rs0 of [x] -> x _ -> error "Expected to see a single X series: simulateFinalXYChart"- exts1 = extractDoubleResults rs1- exts2 = extractDoubleResults rs2+ exts1 = resultsToDoubleValues rs1+ exts2 = resultsToDoubleValues rs2 exts = exts1 ++ exts2- name0 = resultExtractName ext0- names1 = map resultExtractName exts1- names2 = map resultExtractName exts2+ name0 = resultValueName ext0+ names1 = map resultValueName exts1+ names2 = map resultValueName exts2 names = map Left names1 ++ map Right names2 signals = experimentPredefinedSignals expdata signal = filterSignalM (const predicate) $@@ -238,8 +238,8 @@ results <- liftIO $ requireFinalXYChartResults st name0 names let xys = finalXYChartXY results handleSignal signal $ \_ ->- do x <- resultExtractData ext0- ys <- forM exts resultExtractData+ do x <- resultValueData ext0+ ys <- forM exts resultValueData i <- liftParameter simulationIndex liftIO $ forM_ (zip ys xys) $ \(y, xy) ->
Simulation/Aivika/Experiment/Chart/HistogramView.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.HistogramView--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -182,8 +182,8 @@ rs = histogramSeries view $ histogramTransform view $ experimentResults expdata- exts = extractDoubleListResults rs- names = map resultExtractName exts+ exts = resultsToDoubleListValues rs+ names = map resultValueName exts signals = experimentPredefinedSignals expdata n = experimentRunCount $ histogramExperiment st build = histogramBuild view@@ -210,7 +210,7 @@ runPlotTitle hs <- forM exts $ \ext -> newSignalHistory $- mapSignalM (const $ resultExtractData ext) $+ mapSignalM (const $ resultValueData ext) $ filterSignalM (const predicate) $ resultSignalInIntegTimes signals return $
Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.TimeSeriesView--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -190,8 +190,8 @@ rs2 = timeSeriesRightYSeries view $ timeSeriesTransform view $ experimentResults expdata- exts1 = extractDoubleResults rs1- exts2 = extractDoubleResults rs2+ exts1 = resultsToDoubleValues rs1+ exts2 = resultsToDoubleValues rs2 signals = experimentPredefinedSignals expdata n = experimentRunCount $ timeSeriesExperiment st width = timeSeriesWidth view@@ -221,12 +221,12 @@ let transform () = do x <- predicate if x- then resultExtractData ext+ then resultValueData ext else return (1/0) -- the infinite values will be ignored then in newSignalHistory $ mapSignalM transform $ pureResultSignal signals $- resultExtractSignal ext+ resultValueSignal ext hs1 <- inputHistory exts1 hs2 <- inputHistory exts2 return $@@ -240,7 +240,7 @@ toPlot $ plotLines $ plot_lines_values .~ filterPlotLinesValues (zip (elems ts) (elems xs)) $- plot_lines_title .~ resultExtractName ext $+ plot_lines_title .~ resultValueName ext $ def return (ps, drop (length hs) plotLineTails) (ps1, plotLineTails) <- plots hs1 exts1 (tails plotLines)
Simulation/Aivika/Experiment/Chart/Types.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.Types--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/Experiment/Chart/Utils.hs view
@@ -1,7 +1,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.Utils--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental
Simulation/Aivika/Experiment/Chart/XYChartView.hs view
@@ -3,7 +3,7 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.XYChartView--- Copyright : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental@@ -203,11 +203,11 @@ xyChartTransform view $ experimentResults expdata ext0 =- case extractDoubleResults rs0 of+ case resultsToDoubleValues rs0 of [x] -> x _ -> error "Expected to see a single X series: simulateXYChart"- exts1 = extractDoubleResults rs1- exts2 = extractDoubleResults rs2+ exts1 = resultsToDoubleValues rs1+ exts2 = resultsToDoubleValues rs2 signals = experimentPredefinedSignals expdata n = experimentRunCount $ xyChartExperiment st width = xyChartWidth view@@ -234,15 +234,15 @@ runPlotTitle inputHistory exts = forM exts $ \ext ->- let x = resultExtractData ext0- y = resultExtractData ext+ let x = resultValueData ext0+ y = resultValueData ext transform () = do p <- predicate if p then liftM2 (,) x y else return (1/0, 1/0) -- such values will be ignored then- signalx = resultExtractSignal ext0- signaly = resultExtractSignal ext+ signalx = resultValueSignal ext0+ signaly = resultValueSignal ext in newSignalHistory $ mapSignalM transform $ pureResultSignal signals $@@ -260,7 +260,7 @@ toPlot $ plotLines $ plot_lines_values .~ filterPlotLinesValues (elems zs) $- plot_lines_title .~ resultExtractName ext $+ plot_lines_title .~ resultValueName ext $ def return (ps, drop (length hs) plotLineTails) (ps1, plotLineTails) <- plots hs1 exts1 (tails plotLines)@@ -269,7 +269,7 @@ ps2' = map Right ps2 ps' = ps1' ++ ps2' axis = plotBottomAxis $- laxis_title .~ resultExtractName ext0 $+ laxis_title .~ resultValueName ext0 $ def updateLeftAxis = if null ps1
aivika-experiment-chart.cabal view
@@ -1,5 +1,5 @@ name: aivika-experiment-chart-version: 3.0+version: 3.1 synopsis: Simulation experiments with charting for the Aivika library description: This package complements the Aivika and Aivika Experiment packages with@@ -15,7 +15,7 @@ category: Simulation license: BSD3 license-file: LICENSE-copyright: (c) 2012-2014. David Sorokin <david.sorokin@gmail.com>+copyright: (c) 2012-2015. David Sorokin <david.sorokin@gmail.com> author: David Sorokin maintainer: David Sorokin <david.sorokin@gmail.com> homepage: http://github.com/dsorokin/aivika-experiment-chart@@ -91,8 +91,8 @@ lens >= 3.9, data-default-class < 0.1, colour >= 2.3.3,- aivika >= 3.0,- aivika-experiment >= 3.0+ aivika >= 3.1,+ aivika-experiment >= 3.1 extensions: MultiParamTypeClasses
examples/BassDiffusion/Model.hs view
@@ -1,14 +1,16 @@ +-- This is the Bass Diffusion model solved with help of +-- the Agent-based Modeling as described in the AnyLogic +-- documentation.+ module Model (model) where -import System.Random import Data.Array import Control.Monad import Control.Monad.Trans import Simulation.Aivika-import Simulation.Aivika.Experiment n = 100 -- the number of agents @@ -36,13 +38,13 @@ return (i, p) return $ array (1, n) list -definePerson :: Person -> Array Int Person -> Ref Int -> Ref Int -> Simulation ()+definePerson :: Person -> Array Int Person -> Ref Int -> Ref Int -> Event () definePerson p ps potentialAdopters adopters = do setStateActivation (personPotentialAdopter p) $ do modifyRef potentialAdopters $ \a -> a + 1 -- add a timeout t <- liftParameter $- randomExponential (1 / advertisingEffectiveness)+ randomExponential (1 / advertisingEffectiveness) let st = personPotentialAdopter p st' = personAdopter p addTimeout st t $ selectState st'@@ -52,7 +54,8 @@ let t = liftParameter $ randomExponential (1 / contactRate) -- many times! addTimer (personAdopter p) t $- do i <- liftIO $ getStdRandom $ randomR (1, n)+ do i <- liftParameter $+ randomUniformInt 1 n let p' = ps ! i st <- selectedState (personAgent p') when (st == Just (personPotentialAdopter p')) $@@ -64,7 +67,7 @@ setStateDeactivation (personAdopter p) $ modifyRef adopters $ \a -> a - 1 -definePersons :: Array Int Person -> Ref Int -> Ref Int -> Simulation ()+definePersons :: Array Int Person -> Ref Int -> Ref Int -> Event () definePersons ps potentialAdopters adopters = forM_ (elems ps) $ \p -> definePerson p ps potentialAdopters adopters@@ -81,14 +84,12 @@ do potentialAdopters <- newRef 0 adopters <- newRef 0 ps <- createPersons- definePersons ps potentialAdopters adopters runEventInStartTime $- activatePersons ps- return $+ do definePersons ps potentialAdopters adopters+ activatePersons ps+ return $ results- [resultSource- "potentialAdopters" "Potential Adopters"- potentialAdopters,- resultSource- "adopters" "Adopters"- adopters]+ [resultSource + "potentialAdopters" "potential adopters" potentialAdopters,+ resultSource + "adopters" "adopters" adopters]