-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMainWindow.xaml.cs
96 lines (73 loc) · 2.89 KB
/
MainWindow.xaml.cs
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
using DynamischWarteschlange.Model;
using System.Windows;
namespace DynamischWarteschlange
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Zufallszahlengenerator erzeugen
var ran = new Random();
// Simulationsobjekt erzeugen
var sim = new Simulation(ran);
// Ereignisse hinzufügen
for (var i = 0; i < 30; i++)
{
sim.Add(new ArrivalEvent(ran.NextDouble() * 60 * 60));
}
// Simulationslauf durchführen
sim.Run();
// Wartezeithistogramm berechnen
var wBin = 20;
var wMin = sim.WaitTime.Min();
var wMax = sim.WaitTime.Max();
var wX = new double[wBin];
var wY = new double[wBin];
for (var bin = 0; bin < wBin; bin++)
{
wX[bin] = wMin + (bin + 0.5) * (wMax - wMin);
wY[bin] = 0;
}
foreach (var w in sim.WaitTime)
{
var bin = (int)Math.Min(Math.Floor((w - wMin) / (wMax - wMin) * wBin), wBin - 1);
wY[bin]++;
}
// Bearbeitungszeithistogramm berechnen
var sBin = 20;
var sMin = sim.ServiceTime.Min();
var sMax = sim.ServiceTime.Max();
var sX = new double[sBin];
var sY = new double[sBin];
for (var bin = 0; bin < sBin; bin++)
{
sX[bin] = sMin + (bin + 0.5) * (sMax - sMin);
sY[bin] = 0;
}
foreach (var s in sim.ServiceTime)
{
var bin = (int)Math.Min(Math.Floor((s - sMin) / (sMax - sMin) * sBin), sBin - 1);
sY[bin]++;
}
// Beschäftigungsverlauf visualisieren
DiagramBusy.Plot.XLabel("Simulationszeit (in Sekunden)");
DiagramBusy.Plot.YLabel("Beschäftigung");
var b = DiagramBusy.Plot.Add.Scatter(sim.ChartTime, sim.ChartBusy);
b.MarkerShape = ScottPlot.MarkerShape.None;
// Warteschlangenverlauf visualisieren
DiagramLength.Plot.XLabel("Simulationszeit (in Sekunden)");
DiagramLength.Plot.YLabel("Warteschlange");
var l = DiagramLength.Plot.Add.Scatter(sim.ChartTime, sim.ChartLength);
l.MarkerShape = ScottPlot.MarkerShape.None;
// Wartezeiten visualisieren
DiagramWait.Plot.XLabel("Wartezeit (in Sekunden)");
DiagramWait.Plot.YLabel("Häufigkeit");
DiagramWait.Plot.Add.Scatter(wX, wY);
// Servicezeiten visualisieren
DiagramService.Plot.XLabel("Bearbeitungszeit (in Sekunden)");
DiagramService.Plot.YLabel("Häufigkeit");
DiagramService.Plot.Add.Scatter(sX, sY);
}
}
}