Skip to content

Commit 3bf93c0

Browse files
committed
Improve statistic handling
- Integrate statistic update into Resource - Refactor analysis and statistic collection - Add text output - Update samples
1 parent 7299100 commit 3bf93c0

File tree

12 files changed

+628
-278
lines changed

12 files changed

+628
-278
lines changed

Samples/KanbanControl.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class KanbanControl {
2424
private Simulation env;
2525
private Resource kanban;
2626
private Resource server;
27-
private ContinuousStatistics stockStat;
27+
private TimeSeriesMonitor stockStat;
2828
private static readonly TimeSpan OrderArrivalTime = TimeSpan.FromMinutes(3.33);
2929
private static readonly TimeSpan ProcessingTime = TimeSpan.FromMinutes(2.5);
3030
private int completedOrders;
@@ -59,7 +59,7 @@ public void Simulate() {
5959
env.Log("== Kanban controlled production system ==");
6060
kanban = new Resource(env, capacity: 15);
6161
server = new Resource(env, capacity: 1);
62-
stockStat = new ContinuousStatistics(env);
62+
stockStat = new TimeSeriesMonitor(env);
6363
env.Process(Source());
6464
env.Run(TimeSpan.FromDays(180));
6565
Console.WriteLine("Stock: {0} ; {1:F3}±{2:F3} ; {3} (Min;Mean±StdDev;Max) kanbans ", stockStat.Min, stockStat.Mean, stockStat.StdDev, stockStat.Max);

Samples/MM1Queueing.cs

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,21 @@ You should have received a copy of the GNU General Public License
2121

2222
namespace SimSharp.Samples {
2323
public class MM1Queueing {
24-
private Simulation env;
25-
private Resource server;
26-
private ContinuousStatistics wip, utilization;
27-
private DiscreteStatistics waitingtime, leadtime;
2824
private static readonly TimeSpan OrderArrivalTime = TimeSpan.FromMinutes(3.33);
2925
private static readonly TimeSpan ProcessingTime = TimeSpan.FromMinutes(2.5);
3026

31-
private IEnumerable<Event> Source() {
27+
private IEnumerable<Event> Source(Simulation env, Resource server) {
3228
while (true) {
3329
yield return env.TimeoutExponential(OrderArrivalTime);
34-
env.Process(Order());
30+
env.Process(Order(env, server));
3531
}
3632
}
3733

38-
private IEnumerable<Event> Order() {
39-
var start = env.Now;
40-
wip.Increase();
41-
var req = server.Request();
42-
yield return req;
43-
utilization.UpdateTo(server.InUse / (double)server.Capacity);
44-
waitingtime.Add((env.Now - start).TotalMinutes);
45-
yield return env.Process(Produce(req));
46-
wip.Decrease();
47-
leadtime.Add((env.Now - start).TotalMinutes);
48-
}
49-
50-
private IEnumerable<Event> Produce(Request req) {
51-
yield return env.TimeoutExponential(ProcessingTime);
52-
yield return server.Release(req);
53-
utilization.UpdateTo(server.InUse / (double)server.Capacity);
34+
private IEnumerable<Event> Order(Simulation env, Resource server) {
35+
using (var req = server.Request()) {
36+
yield return req;
37+
yield return env.TimeoutExponential(ProcessingTime);
38+
}
5439
}
5540

5641
public void Simulate() {
@@ -61,12 +46,11 @@ public void Simulate() {
6146
var analyticLeadtime = 1 / (mu - lambda);
6247
var analyticWaitingtime = rho / (mu - lambda);
6348

64-
env = new Simulation(randomSeed: 1);
65-
server = new Resource(env, capacity: 1);
66-
wip = new ContinuousStatistics(env);
67-
utilization = new ContinuousStatistics(env);
68-
leadtime = new DiscreteStatistics();
69-
waitingtime = new DiscreteStatistics();
49+
var env = new Simulation(randomSeed: 1, defaultStep: TimeSpan.FromMinutes(1));
50+
var utilization = new TimeSeriesMonitor(env);
51+
var wip = new TimeSeriesMonitor(env, collect: true);
52+
var leadtime = new SampleMonitor(collect: true);
53+
var waitingtime = new SampleMonitor(collect: true);
7054

7155
env.Log("Analytical results of this system:");
7256
env.Log("\tUtilization.Mean\tWIP.Mean\tLeadtime.Mean\tWaitingTime.Mean");
@@ -90,22 +74,37 @@ public void Simulate() {
9074
.Add("WaitingTime", waitingtime, Report.Measures.Mean)
9175
.SetOutput(env.Logger)
9276
.SetSeparator("\t")
93-
.SetFinalUpdate(withHeaders: true) // creates a summary of the means at the end
77+
.SetFinalUpdate(withHeaders: false) // creates a summary of the means at the end
9478
.Build();
9579

96-
env.Log("== m/m/1 queuing system (run 1) ==");
97-
env.Process(Source());
98-
env.Run(TimeSpan.FromDays(365));
99-
100-
env.Reset(2); // reset environment
101-
server = new Resource(env, capacity: 1); // reset resources
102-
wip.Reset(); // reset statistics
103-
utilization.Reset();
104-
leadtime.Reset();
80+
env.Log("Simulated results of this system:");
81+
env.Log("");
82+
summary.WriteHeader(); // write the header just once
83+
84+
for (var i = 0; i < 5; i++) {
85+
env.Reset(i + 1); // reset environment
86+
utilization.Reset(); // reset monitors
87+
wip.Reset();
88+
leadtime.Reset();
89+
waitingtime.Reset();
90+
var server = new Resource(env, capacity: 1) {
91+
Utilization = utilization,
92+
WIP = wip,
93+
LeadTime = leadtime,
94+
WaitingTime = waitingtime,
95+
};
96+
97+
env.Process(Source(env, server));
98+
env.Run(TimeSpan.FromDays(365));
99+
}
105100

106-
env.Log("== m/m/1 queuing system (run 2) ==");
107-
env.Process(Source());
108-
env.Run(TimeSpan.FromDays(365));
101+
env.Log("");
102+
env.Log("Detailed results from the last run:");
103+
env.Log("");
104+
env.Log(utilization.Print("Utilization"));
105+
env.Log(wip.Print("WIP"));
106+
env.Log(leadtime.Print("Lead time"));
107+
env.Log(waitingtime.Print("Waiting time"));
109108
}
110109
}
111110
}

SimSharp.sln

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio 15
4-
VisualStudioVersion = 15.0.26730.12
3+
# Visual Studio Version 16
4+
VisualStudioVersion = 16.0.29201.188
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples", "Samples\Samples.csproj", "{160EE4A5-D14D-4147-BE99-536F03A68CCB}"
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5BC56A42-5229-4380-BF91-3A2EB70332C3}"
99
ProjectSection(SolutionItems) = preProject
10+
.editorconfig = .editorconfig
1011
LICENSE.txt = LICENSE.txt
1112
README.md = README.md
1213
EndProjectSection

SimSharp/Analysis/ContinuousStatistics.cs

Lines changed: 0 additions & 148 deletions
This file was deleted.

SimSharp/Analysis/DiscreteStatistics.cs

Lines changed: 0 additions & 77 deletions
This file was deleted.

0 commit comments

Comments
 (0)