module Experiment (experiment, generators) where import Data.Monoid import Control.Category import Simulation.Aivika import Simulation.Aivika.Experiment import Simulation.Aivika.Experiment.Chart import qualified Simulation.Aivika.Results.Transform as T import Model -- | The simulation specs. specs = Specs { spcStartTime = 0.0, spcStopTime = 1000.0, -- spcStopTime = 300.0, spcDT = 0.1, spcMethod = RungeKutta4, spcGeneratorType = SimpleGenerator } -- | The experiment. experiment :: Experiment experiment = defaultExperiment { experimentSpecs = specs, -- experimentRunCount = 1000, experimentRunCount = 100, experimentTitle = "The Furnace model (the Monte-Carlo simulation)" } inputIngotCount = resultByName inputIngotCountName loadedIngotCount = resultByName loadedIngotCountName outputIngotCount = resultByName outputIngotCountName pitCount = resultByName pitCountName heatingTime = resultByName heatingTimeName outputIngotTemp = resultByName outputIngotTempName furnaceQueue = T.Queue $ resultByName furnaceQueueName furnaceQueueCount = T.tr $ T.queueCount furnaceQueue furnaceQueueCountStats = T.tr $ T.queueCountStats furnaceQueue furnaceQueueWaitTime = T.tr $ T.queueWaitTime furnaceQueue furnaceQueueRate = T.tr $ T.queueRate furnaceQueue generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView defaultInfoView, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 1", deviationChartPlotTitle = "The input, loaded and output ingot counts", deviationChartRightYSeries = inputIngotCount <> loadedIngotCount <> outputIngotCount }, outputView $ defaultFinalHistogramView { finalHistogramTitle = "Final Histogram - 1", finalHistogramPlotTitle = "The distribution of input, loaded and output " ++ "ingot counts in the final time point.", finalHistogramSeries = inputIngotCount <> loadedIngotCount <> outputIngotCount }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 1", finalStatsDescription = "The summary of input, loaded and output " ++ "ingot counts in the final time point.", finalStatsSeries = inputIngotCount <> loadedIngotCount <> outputIngotCount }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 2", deviationChartPlotTitle = "The used pit count", deviationChartRightYSeries = pitCount }, outputView $ defaultFinalHistogramView { finalHistogramTitle = "Final Histogram - 2", finalHistogramPlotTitle = "The used pit count in the final time point.", finalHistogramSeries = pitCount }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 2", finalStatsDescription = "The summary of the used pit count in the final time point.", finalStatsSeries = pitCount }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 3", deviationChartPlotTitle = "The queue size", deviationChartRightYSeries = furnaceQueueCount <> furnaceQueueCountStats }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 3", finalStatsDescription = "The summary of the average queue size in the final time point.", finalStatsSeries = furnaceQueueCountStats }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 4", deviationChartPlotTitle = "The mean wait time", deviationChartRightYSeries = furnaceQueueWaitTime }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 4", finalStatsDescription = "The summary of the mean wait time in " ++ "the final time point.", finalStatsSeries = furnaceQueueWaitTime }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 5", deviationChartPlotTitle = "The queue rate", deviationChartRightYSeries = furnaceQueueRate }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 5", finalStatsDescription = "The summary of the queue rate in " ++ "the final time point.", finalStatsSeries = furnaceQueueRate }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 6", deviationChartPlotTitle = "The mean heating time", deviationChartRightYSeries = heatingTime }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 6", finalStatsDescription = "The summary of the mean heating time in " ++ "the final time point.", finalStatsSeries = heatingTime }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 7", deviationChartPlotTitle = "The output ingot temperature", deviationChartRightYSeries = outputIngotTemp }, outputView $ defaultFinalHistogramView { finalHistogramTitle = "Final Histogram - 7", finalHistogramPlotTitle = "The output ingot temperature in " ++ "the final time point.", finalHistogramSeries = outputIngotTemp }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 7", finalStatsDescription = "The summary of the output ingot temperature in " ++ "the final time point.", finalStatsSeries = outputIngotTemp } ]