1 package org.sim0mq.test;
2
3 import java.rmi.RemoteException;
4
5 import nl.tudelft.simulation.dsol.DSOLModel;
6 import nl.tudelft.simulation.dsol.SimRuntimeException;
7 import nl.tudelft.simulation.dsol.formalisms.Resource;
8 import nl.tudelft.simulation.dsol.formalisms.flow.Delay;
9 import nl.tudelft.simulation.dsol.formalisms.flow.Generator;
10 import nl.tudelft.simulation.dsol.formalisms.flow.Release;
11 import nl.tudelft.simulation.dsol.formalisms.flow.Seize;
12 import nl.tudelft.simulation.dsol.formalisms.flow.StationInterface;
13 import nl.tudelft.simulation.dsol.formalisms.flow.statistics.Utilization;
14 import nl.tudelft.simulation.dsol.simtime.SimTimeDouble;
15 import nl.tudelft.simulation.dsol.simtime.dist.DistContinuousSimTime;
16 import nl.tudelft.simulation.dsol.simtime.dist.DistContinuousTime;
17 import nl.tudelft.simulation.dsol.simulators.DEVSSimulatorInterface;
18 import nl.tudelft.simulation.dsol.simulators.SimulatorInterface;
19 import nl.tudelft.simulation.dsol.statistics.Tally;
20 import nl.tudelft.simulation.jstats.distributions.DistConstant;
21 import nl.tudelft.simulation.jstats.distributions.DistDiscreteConstant;
22 import nl.tudelft.simulation.jstats.distributions.DistExponential;
23 import nl.tudelft.simulation.jstats.streams.MersenneTwister;
24 import nl.tudelft.simulation.jstats.streams.StreamInterface;
25
26
27
28
29
30
31
32
33
34
35
36
37 public class MM1Queue41Model implements DSOLModel.TimeDouble
38 {
39
40 private static final long serialVersionUID = 1L;
41
42
43 private DEVSSimulatorInterface.TimeDouble devsSimulator;
44
45
46 @SuppressWarnings("checkstyle:visibilitymodifier")
47 Tally<Double, Double, SimTimeDouble> dN;
48
49
50 @SuppressWarnings("checkstyle:visibilitymodifier")
51 Tally<Double, Double, SimTimeDouble> qN;
52
53
54 @SuppressWarnings("checkstyle:visibilitymodifier")
55 Utilization uN;
56
57
58 @Override
59 public final void constructModel(final SimulatorInterface<Double, Double, SimTimeDouble> simulator)
60 throws SimRuntimeException, RemoteException
61 {
62 this.devsSimulator = (DEVSSimulatorInterface.TimeDouble) simulator;
63 StreamInterface defaultStream = new MersenneTwister();
64
65
66 Generator.TimeDouble generator = new Generator.TimeDouble(this.devsSimulator, Object.class, null);
67 generator.setInterval(new DistContinuousTime.TimeDouble(new DistExponential(defaultStream, 1.0)));
68 generator.setStartTime(new DistContinuousSimTime.TimeDouble(new DistConstant(defaultStream, 0.0)));
69 generator.setBatchSize(new DistDiscreteConstant(defaultStream, 1));
70 generator.setMaxNumber(1000);
71
72
73 Resource<Double, Double, SimTimeDouble> resource = new Resource<>(this.devsSimulator, 1.0);
74
75
76 StationInterface queue = new Seize.TimeDouble(this.devsSimulator, resource);
77 StationInterface release = new Release.TimeDouble(this.devsSimulator, resource, 1.0);
78
79
80 DistContinuousTime.TimeDouble serviceTime =
81 new DistContinuousTime.TimeDouble(new DistExponential(defaultStream, 0.5));
82 StationInterface server = new Delay.TimeDouble(this.devsSimulator, serviceTime);
83
84
85 generator.setDestination(queue);
86 queue.setDestination(server);
87 server.setDestination(release);
88
89
90 this.dN = new Tally<>("d(n)", this.devsSimulator, queue, Seize.DELAY_TIME);
91 this.qN = new Tally<>("q(n)", this.devsSimulator, queue, Seize.QUEUE_LENGTH_EVENT);
92 this.uN = new Utilization("u(n)", this.devsSimulator, server);
93 }
94
95
96 @Override
97 public final SimulatorInterface.TimeDouble getSimulator()
98 {
99 return this.devsSimulator;
100 }
101 }