-
Notifications
You must be signed in to change notification settings - Fork 0
/
MM1System.java
112 lines (93 loc) · 2.74 KB
/
MM1System.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import java.util.*;
public class MM1System extends SimulatedSystem {
private Queue<Event> queue;
private ArrayList<Double> Tq;
private ArrayList<Integer> Q;
private double Ts;
public MM1System(double Ts) {
this.queue = new LinkedList<Event>();
this.Tq = new ArrayList<Double>();
this.Q = new ArrayList<Integer>();
this.Ts = Ts;
}
public void enqueue(Event event, double arrivalTime) {
this.queue.add(event);
this.Tq.add(event.getIndex(), arrivalTime);
}
public void dequeue() {
Event deadEvent = this.queue.remove();
this.Tq.set(deadEvent.getIndex(), deadEvent.getTimestamp() - this.Tq.get(deadEvent.getIndex()));
}
public Queue getQueue() {
return this.queue;
}
public ArrayList getTqs() {
return this.Tq;
}
public int getQueueSize() {
return this.queue.size();
}
public void tallyQueue() {
this.Q.add(this.queue.size());
}
public double[] getAllStats() {
double[] allStats = new double[4];
allStats[0] = avgQ();
allStats[1] = avgW();
allStats[2] = avgTq();
allStats[3] = avgTw();
return allStats;
}
//calculate average Q
public double avgQ() {
double sumQ = 0;
double size = this.Q.size();
for (int i = (int) size/2; i < size; i++){
sumQ += Q.get(i);
}
//if Q is not empty, then return average of Qs
if (size > 0) {
return (2 *sumQ)/size;
}
return 0.0;
}
//calculate average W
public double avgW() {
double sumW = 0;
double size = this.Q.size();
for (int i = (int) size/2; i < size; i++){
sumW += Q.get(i) - 1;
}
//if Q is not empty, then return average of Ws
if (size > 0) {
return (2 * sumW)/size;
}
return 0.0;
}
//calculate average Tq in queue
public double avgTq() {
double sumTq = 0;
double size = this.Tq.size();
for (int i = (int) size/2; i < size; i++){
sumTq += Tq.get(i);
}
//if Tq is not empty, then return average of Tqs
if (size > 0) {
return (2 * sumTq)/size;
}
return 0.0;
}
//calculate average Tw in queue
public double avgTw() {
double sumTw = 0;
double size = this.Tq.size();
for (int i = (int) size/2; i < size; i++){
sumTw += Tq.get(i) - Ts;
}
//if Tq is not empty, then return average of Tws
if (size > 0) {
return (2 *sumTw)/size;
}
return 0.0;
}
}