packages feed

aivika-experiment-chart-1.4: examples/InspectionAdjustmentStations/Experiment.hs

module Experiment (experiment, generators) where

import Data.Monoid

import Control.Arrow

import Simulation.Aivika
import Simulation.Aivika.Experiment
import Simulation.Aivika.Experiment.Chart

-- | The simulation specs.
specs = Specs { spcStartTime = 0.0,
                spcStopTime = 480.0,
                spcDT = 0.1,
                spcMethod = RungeKutta4,
                spcGeneratorType = SimpleGenerator }

-- | The experiment.
experiment :: Experiment
experiment =
  defaultExperiment {
    experimentSpecs = specs,
    experimentRunCount = 1000,
    -- experimentRunCount = 10,
    experimentTitle = "Inspection and Adjustment Stations on a Production Line (the Monte-Carlo simulation)" }

resultProcessingTime :: ResultTransform
resultProcessingTime =
  (resultByName "inputArrivalTimer" >>>
   resultByProperty "processingTime")
  <>
  (resultByName "outputArrivalTimer" >>>
   resultByProperty "processingTime")

resultProcessingFactor :: ResultTransform
resultProcessingFactor =
  (resultByName "inspectionStations" >>>
   resultByProperty "processingFactor")
  <>
  (resultByName "adjustmentStations" >>>
   resultByProperty "processingFactor")

resultQueueSize :: ResultTransform
resultQueueSize =
  (resultByName "inspectionQueue" >>>
   resultByProperty "queueCount")
  <>
  (resultByName "adjustmentQueue" >>>
   resultByProperty "queueCount")

resultWaitTime :: ResultTransform
resultWaitTime =
  (resultByName "inspectionQueue" >>>
   resultByProperty "queueWaitTime")
  <>
  (resultByName "adjustmentQueue" >>>
   resultByProperty "queueWaitTime")

generators :: WebPageCharting r => [WebPageGenerator r]
generators =
  [outputView defaultExperimentSpecsView,
   outputView $ defaultFinalStatsView {
     finalStatsTitle  = "Arrivals",
     finalStatsSeries = resultProcessingTime },
   outputView $ defaultDeviationChartView {
     deviationChartTitle = "The processing factor (chart)",
     deviationChartWidth = 1000,
     deviationChartRightYSeries = resultProcessingFactor },
   outputView $ defaultFinalHistogramView {
     finalHistogramTitle = "The processing factor (histogram)",
     finalHistogramWidth = 1000,
     finalHistogramSeries = resultProcessingFactor },
   outputView $ defaultFinalStatsView {
     finalStatsTitle = "The processing factor (statistics)",
     finalStatsSeries = resultProcessingFactor },
   outputView $ defaultDeviationChartView {
     deviationChartTitle = "The queue size (chart)",
     deviationChartWidth = 1000,
     deviationChartRightYSeries = resultQueueSize },
   outputView $ defaultFinalHistogramView {
     finalHistogramTitle = "The queue size (histogram)",
     finalHistogramWidth = 1000,
     finalHistogramSeries = resultQueueSize },
   outputView $ defaultFinalStatsView {
     finalStatsTitle = "The queue size (statistics)",
     finalStatsSeries = resultQueueSize },
   outputView $ defaultDeviationChartView {
     deviationChartTitle = "The queue wait time (chart)",
     deviationChartWidth = 1000,
     deviationChartRightYSeries = resultWaitTime },
   outputView $ defaultFinalStatsView {
     finalStatsTitle = "The queue wait time (statistics)",
     finalStatsSeries = resultWaitTime } ]