{-# LANGUAGE FlexibleContexts #-}
module Experiment (experiment, generators) where
import Data.Monoid
import Control.Arrow
import Simulation.Aivika
import Simulation.Aivika.Experiment
import Simulation.Aivika.Experiment.Chart
import qualified Simulation.Aivika.Results.Transform as T
import qualified Simulation.Aivika.GPSS.Results.Transform as GpssT
-- | The simulation specs.
specs = Specs { spcStartTime = 0.0,
spcStopTime = 20000.0,
spcDT = 10.0,
spcMethod = RungeKutta4,
spcGeneratorType = SimpleGenerator }
-- | The experiment.
experiment :: Experiment
experiment =
defaultExperiment {
experimentSpecs = specs,
experimentRunCount = 100,
-- experimentRunCount = 10,
experimentTitle = "The GPSS module 7.31" }
worker = GpssT.Facility $ resultByName "workr"
workerUtilCount = GpssT.facilityUtilisationCount worker
workerUtilCountStats = T.tr $ GpssT.facilityUtilisationCountStats worker
workerHoldingTime = T.tr $ GpssT.facilityHoldingTime worker
tatym = resultByName "stats"
statsView title series =
defaultFinalStatsView {
finalStatsTitle = title,
finalStatsSeries = series
}
chartView title series =
defaultDeviationChartView {
deviationChartTitle = title,
deviationChartRightYSeries = series
}
generators :: ChartRendering r => [WebPageGenerator r]
generators =
[outputView defaultExperimentSpecsView,
outputView defaultInfoView,
outputView $ statsView "Worker Utilisation (WORKR)" $
workerUtilCount <>
workerUtilCountStats,
outputView $ chartView "Worker Utilisation (WORKR)" $
workerUtilCount <>
workerUtilCountStats,
outputView $ statsView "Worker Holding Time (WORKR)"
workerHoldingTime,
outputView $ chartView "Worker Holding Time (WORKR)"
workerHoldingTime,
outputView $ statsView "Processing Time (TATYM)" $
tatym,
outputView $ chartView "Processing Time (TATYM)" $
tatym]