module TopLevelServe where
import Base
import QueueState
import ServerState
import RandomGen
doSimulation :: ServerState -> [Inmess] -> [Outmess]
doSimulation :: ServerState -> [Inmess] -> [Outmess]
doSimulation ServerState
servSt (Inmess
im:[Inmess]
messes)
= [Outmess]
outmesses [Outmess] -> [Outmess] -> [Outmess]
forall a. [a] -> [a] -> [a]
++ ServerState -> [Inmess] -> [Outmess]
doSimulation ServerState
servStNext [Inmess]
messes
where
(ServerState
servStNext , [Outmess]
outmesses) = ServerState -> Inmess -> (ServerState, [Outmess])
simulationStep ServerState
servSt Inmess
im
simulationInput :: [Inmess]
simulationInput :: [Inmess]
simulationInput = (Int -> Int -> Inmess) -> [Int] -> [Int] -> [Inmess]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Int -> Int -> Inmess
Yes [Int
1 .. ] [Int]
randomTimes
simEx :: [Outmess]
simEx :: [Outmess]
simEx = ServerState -> [Inmess] -> [Outmess]
doSimulation ServerState
serverStart [Inmess]
simulationInput
simulationInput2 :: [Inmess]
simulationInput2 :: [Inmess]
simulationInput2 = Int -> [Inmess] -> [Inmess]
forall a. Int -> [a] -> [a]
take Int
50 [Inmess]
simulationInput [Inmess] -> [Inmess] -> [Inmess]
forall a. [a] -> [a] -> [a]
++ [Inmess]
noes
noes :: [Inmess]
noes = Inmess
No Inmess -> [Inmess] -> [Inmess]
forall a. a -> [a] -> [a]
: [Inmess]
noes
simEx2 :: [Outmess]
simEx2 :: [Outmess]
simEx2 = Int -> [Outmess] -> [Outmess]
forall a. Int -> [a] -> [a]
take Int
50 (ServerState -> [Inmess] -> [Outmess]
doSimulation ServerState
serverStart [Inmess]
simulationInput2)
totalWait :: [Outmess] -> Int
totalWait :: [Outmess] -> Int
totalWait = [Int] -> Int
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Int] -> Int) -> ([Outmess] -> [Int]) -> [Outmess] -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Outmess -> Int) -> [Outmess] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
map Outmess -> Int
waitTime
where
waitTime :: Outmess -> Int
waitTime (Discharge Int
_ Int
w Int
_) = Int
w
totalWaitEx2 :: Int
totalWaitEx2 = [Outmess] -> Int
totalWait [Outmess]
simEx2