{-# 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 = 500000.0, spcDT = 1000.0, spcMethod = RungeKutta4, spcGeneratorType = SimpleGenerator } -- | The experiment. experiment :: Experiment experiment = defaultExperiment { experimentSpecs = specs, experimentRunCount = 500, -- experimentRunCount = 10, experimentTitle = "The GPSS module 7.31" } line = GpssT.Queue $ resultByName "line" lineContent = GpssT.queueContent line lineContentStats = T.tr $ GpssT.queueContentStats line lineWaitTime = T.tr $ GpssT.queueWaitTime line lineNonZeroEntryWaitTime = T.tr $ GpssT.queueNonZeroEntryWaitTime line prof = GpssT.Facility $ resultByName "prof" profUtilCount = GpssT.facilityUtilisationCount prof profUtilCountStats = T.tr $ GpssT.facilityUtilisationCountStats prof profHoldingTime = T.tr $ GpssT.facilityHoldingTime prof statsView title series = defaultFinalStatsView { finalStatsTitle = title, finalStatsSeries = series } chartView title series = defaultDeviationChartView { deviationChartTitle = title, deviationChartRightYSeries = series } histogramView title series = defaultFinalHistogramView { finalHistogramTitle = title, finalHistogramSeries = series } generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView defaultInfoView, outputView $ statsView "PROF Utilisation" $ profUtilCount <> profUtilCountStats, outputView $ chartView "PROF Utilisation" $ profUtilCount <> profUtilCountStats, outputView $ statsView "PROF Holding Time" profHoldingTime, outputView $ chartView "PROF Holding Time" profHoldingTime, outputView $ statsView "LINE Content" $ lineContent <> lineContentStats, outputView $ chartView "LINE Content" $ lineContent <> lineContentStats, outputView $ histogramView "LINE Content" lineContent, outputView $ statsView "LINE Wait Time" $ lineWaitTime <> lineNonZeroEntryWaitTime, outputView $ chartView "LINE Wait Time" $ lineWaitTime <> lineNonZeroEntryWaitTime]