aivika-gpss-0.3: examples/Example2BTrans.hs
{-
GENERATE 35,10
QUEUE JOEQ
SEIZE JOE
DEPART JOEQ
ADVANCE 18,6
RELEASE JOE
TERMINATE
GENERATE 60,20
QUEUE JOEQ
SEIZE JOE
DEPART JOEQ
ADVANCE 10,2
ADVANCE 18,6
RELEASE JOE
TERMINATE
GENERATE 480
TERMINATE 1
START 1
-}
import Control.Category
import Control.Monad.Trans
import Simulation.Aivika.Trans
import Simulation.Aivika.Trans.GPSS
import qualified Simulation.Aivika.Trans.GPSS.Queue as Q
import Simulation.Aivika.IO
type DES = IO
specs = Specs { spcStartTime = 0.0,
spcStopTime = 480.0,
spcDT = 1.0,
spcMethod = RungeKutta4,
spcGeneratorType = SimpleGenerator }
model :: Simulation DES (Results DES)
model =
do joeq <- runEventInStartTime Q.newQueue
joe <- runEventInStartTime newFacility
let clientStream1 = randomUniformStream (35 - 10) (35 + 10)
clientStream2 = randomUniformStream (60 - 20) (60 + 20)
let clients1 = streamGeneratorBlock0 clientStream1
chain1 =
queueBlock joeq 1 >>>
seizeBlock joe >>>
departBlock joeq 1 >>>
advanceBlock (randomUniformProcess_ (18 - 6) (18 + 6)) >>>
releaseBlock joe >>>
terminateBlock
let clients2 = streamGeneratorBlock0 clientStream2
chain2 =
queueBlock joeq 1 >>>
seizeBlock joe >>>
departBlock joeq 1 >>>
advanceBlock (randomUniformProcess_ (10 - 2) (10 + 2)) >>>
advanceBlock (randomUniformProcess_ (18 - 6) (18 + 6)) >>>
releaseBlock joe >>>
terminateBlock
runProcessInStartTime $
runGeneratorBlock clients1 chain1
runProcessInStartTime $
runGeneratorBlock clients2 chain2
return $
results
[resultSource "joeq" "The Joe queue" joeq,
resultSource "joe" "Joe" joe]
main =
printSimulationResultsInStopTime
printResultSourceInEnglish
model specs