From 8f0ca935f8e344eb954f954f788b84a1aac484a3 Mon Sep 17 00:00:00 2001 From: Joeri Exelmans Date: Thu, 12 Dec 2024 14:04:54 +0100 Subject: [PATCH] queueing example: random number generator state should be part of DEVS state --- examples/queueing/generator.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/queueing/generator.py b/examples/queueing/generator.py index 138153d..52e73a0 100644 --- a/examples/queueing/generator.py +++ b/examples/queueing/generator.py @@ -4,13 +4,15 @@ import random # Define the state of the generator as a structured object class GeneratorState: - def __init__(self, gen_num): + def __init__(self, gen_num, seed=0): # Current simulation time (statistics) self.current_time = 0.0 # Remaining time until generation of new event self.remaining = 0.0 # Counter on how many events to generate still self.to_generate = gen_num + # State of our random number generator + self.random = random.Random(seed) class Generator(AtomicDEVS): def __init__(self, gen_param, size_param, gen_num): @@ -34,7 +36,7 @@ class Generator(AtomicDEVS): self.state.remaining = float('inf') else: # Still have to generate events, so sample for new duration - self.state.remaining = random.expovariate(self.gen_param) + self.state.remaining = self.state.random.expovariate(self.gen_param) return self.state def timeAdvance(self): @@ -43,7 +45,7 @@ class Generator(AtomicDEVS): def outputFnc(self): # Determine size of the event to generate - size = max(1, int(random.gauss(self.size_param, 5))) + size = max(1, int(self.state.random.gauss(self.size_param, 5))) # Calculate current time (note the addition!) creation = self.state.current_time + self.state.remaining # Output the new event on the output port