~thomas-philipp/openwns-systemtest-library/queueing-experimental

« back to all changes in this revision

Viewing changes to queuing/MM1Step5.py

  • Committer: Maciej Muehleisen
  • Date: 2008-11-01 22:21:03 UTC
  • Revision ID: mue@comnets.rwth-aachen.de-20081101222103-nrdh43je18ta98tt
Initial commit. Steps 5 and 6 still need work.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# import the necessary modules
 
2
 
 
3
# openwns contains the Simulator class, which is needed for every
 
4
# simulation
 
5
import openwns
 
6
 
 
7
# openws.queuingsystem contains the simulation model called
 
8
# "SimpleMM1" which is used in this example
 
9
import openwns.queuingsystem
 
10
 
 
11
import openwns.probebus
 
12
 
 
13
### Simulation setup
 
14
#
 
15
# Q: queue with unlimited size
 
16
#
 
17
# W: worker, the job processing time is negative-exponentially
 
18
#    distributed
 
19
#
 
20
# The jobs arrive at the system with an inter arrival time that is
 
21
# negative-exponentially distributed.
 
22
#
 
23
#             ----
 
24
# new jobs --> Q |-->(W)-->
 
25
#             ----
 
26
#
 
27
 
 
28
class StatisticsProbeBus(openwns.probebus.PythonProbeBus):
 
29
 
 
30
    def __init__(self, outputFilename):
 
31
        openwns.probebus.PythonProbeBus.__init__(self, self.accepts, self.onMeasurement, self.output)
 
32
        self.outputFilename = outputFilename
 
33
        self.sum = 0.0
 
34
        self.trials = 0
 
35
 
 
36
    def accepts(self, time, context):
 
37
        return True
 
38
 
 
39
    def onMeasurement(self, time, measurement, context):
 
40
        self.sum += measurement
 
41
        self.trials += 1
 
42
 
 
43
    def output(self):
 
44
        f = open(self.outputFilename, "w")
 
45
        f.write("Number of trials: %s\n" % str(self.trials))
 
46
        f.write("Mean value : %s\n" % str(self.sum/self.trials))
 
47
        f.close()
 
48
 
 
49
# create the M/M/1 (step4) simulation model configuration (time in seconds)
 
50
# we reuse step3 and only change the configuration!
 
51
mm1 = openwns.queuingsystem.SimpleMM1Step5(meanJobInterArrivalTime = 0.100,
 
52
                                           meanJobProcessingTime   = 0.099)
 
53
 
 
54
# Replace the default LoggingProbeBus configured in SimpleMM1Step3 by
 
55
# our StatisticsProbeBus
 
56
statisticsProbeBus = StatisticsProbeBus("SimpleMM1Step5.output")
 
57
loggingProbeBus = openwns.probebus.LoggingProbeBus()
 
58
 
 
59
# create simulator configuration
 
60
sim = openwns.Simulator(simulationModel = mm1,
 
61
                        maxSimTime      = 100.0)
 
62
 
 
63
sim.eventSchedulerMonitor = None
 
64
 
 
65
# If an output directory is already present it will be deleted 
 
66
# if you change this to MOVE a present output directory will
 
67
# be ranamed 
 
68
sim.outputStrategy = openwns.simulator.OutputStrategy.DELETE
 
69
 
 
70
pbr = sim.environment.probeBusRegistry
 
71
 
 
72
pbr.getMeasurementSource("openwns.queuingsystem.MM1.sojournTime").addObserver(statisticsProbeBus)
 
73
 
 
74
pbr.getMeasurementSource("openwns.queuingsystem.MM1.sojournTime").addObserver(loggingProbeBus)
 
75
 
 
76
# set the configuration for this simulation
 
77
openwns.setSimulator(sim)