Mathe in INOSIM neu gedacht
Zur Auswertung der Simulationsergebnisse benötigen Sie einige statistische Kennzahlen? Der Mittelwert eines Datensatzes ist schnell berechnet, aber wie war das noch gleich mit Standardabweichung, Median und Quartilen?
Seit Version 13 gibt es in INOSIM die Möglichkeit, .NET Bibliotheken zu integrieren, z. B. um umfangreiche mathematische bzw. statistische Funktionen zu ergänzen.
Die MathNet.Numerics Bibliothek
In diesem Tipp & Trick wird am Beispiel der quelloffenen, kostenlosen MathNet.Numerics Bibliothek (MIT-License) gezeigt, wie man .NET Bibliotheken in INOSIM einbinden und nutzen kann. Die Bibliothek kann unter folgendem Link heruntergeladen werden:
Download Package: https://www.nuget.org/packages/MathNet.Numerics/

Das Package ist ein NuGet-Paket und enthält sowohl die benötigten DLLs (Dynamic Link Library) als auch weitere Metadaten. Um die DLL zu öffnen, muss das NuGet-Packet zunächst in eine ZIP-Datei umgewandelt (Endung auf .zip ändern) und entpackt werden. In den Unterordnern von lib sind die DLLs für die jeweiligen .NET Versionen zu finden.
Einbinden einer .NET Bibliothek im WWB-Editor
Um diese Bibliothek anschließend in INOSIM einzubinden, öffnen Sie im Basic Editor im Menü Tools den Unterpunkt References:

Im Fenster References besteht nun die Möglichkeit, externe .NET-Bibliotheken einzubinden:

Am oberen Rand des Dialoges wird zunächst ausgewählt, für welche .NET-Version Referenzen eingefügt werden sollen ( 4 oder 5+ (5 und höher)). Dann navigiert man über den Browse-Button zu der heruntergeladenen DLL in der gewünschten Version.
Nach erfolgreicher Einbindung erscheint die MathNet.Numerics-Bibliothek in der Liste:

Jetzt kann die Bibliothek verwendet werden. Hierbei muss man beachten, dass ein fester Pfad zu der DLL hinterlegt wird, wenn man das Modell also auf einem anderen Computer nutzen möchte, muss die DLL neu eingebunden werden.
Hinweis: Da die DLL automatisch eingebunden wird, kann es bei Nichtfinden der DLL zu Problemen kommen, die das Modell nicht starten lassen. Um dies zu verhindern, sollte sichergestellt werden, dass die DLL auf dem Computer existiert und der Pfad zur DLL korrekt ist. Sollte die DLL auf dem Computer nicht vorhanden sein, müssen die genutzten Funktionen und Objekte in VBA auskommentiert werden.
Anwendung der Statistikfunktionen von MathNet.Numerics
Die genutzte Bibliothek bietet viele Funktionen, mit denen der Funktionsumfang von WWB erweitert wird. Eine Übersicht der vorhanden Namespaces mit Dokumentation von Funktionen ist hier zu finden:
Namespaces: https://numerics.mathdotnet.com/api/
In diesem Tipp & Trick beschäftigen wir uns mit den Statistikfunktionen der MathNet.Numerics-Bibliothek. In WWB.NET gibt es keine integrierten Funktionen, die statistische Werte wie Standardabweichungen oder Quantile für die Simulationsdaten berechnen. Natürlich könnten Sie sich diese Funktionen selbst erstellen, aber warum das „Rad neu erfinden“, wenn es schon eine .NET-Bibliothek dafür gibt?
Standardabweichung der Operationsdauer
In einem ersten Beispiel wollen wir im Gantt-Diagramm die simulierten Prozesszeiten mit einem Satz an Realdaten vergleichen. Dazu brauchen wir den Mittelwert und die Standardabweichung in VBA. Es sollen Prozeduren, die innerhalb des Mittelwertes +/- Standardabweichung liegen, grün eingefärbt werden, Prozeduren, die darüber liegen, sollen rot eingefärbt werden, und solche, die darunter liegen, orange. Dazu müssen wir zu Beginn der Simulation zunächst den Mittelwert und die Standardabweichung aus den Realdaten berechnen. Deshalb wird folgender Code in der Simulation-Init ausgeführt:
'Read Data from Excel
Dim i As Integer
Dim daten () As Double 'Data has to be provided as array
ReDim daten (Parameters.Sheets("Real Data").UsedRows - 1)
For i = 2 To Parameters.Sheets("Real Data").UsedRows
daten(i - 1) = Parameters.Sheets("Real Data").CellYX(i, 1)
Next
MeanValueMixing = mathnet.Numerics.Statistics.Statistics.Mean(daten) 'Calculate Mean Value
Deviation = mathnet.Numerics.Statistics.Statistics.StandardDeviation(daten) 'Calculate Standard Deviation
Console.Information "The mean Mixing Procedure Duration is " & MeanValueMixing & " [h]"
Console.Information "The Standard Deviation of the Mixing Procedure Duration is " & Deviation & " [h]"
Diese Werte werden dann in der Ende-Steuerung der Mixing-Prozedur genutzt, um das permanente CustomAttribute (MixingDuration) zur Einfärbung des Gantt-Diagramms zu setzen:
Sub SE_ColorProcedure(cop As OrderOperation)
Dim dur As Double
dur = Simulation.SimDate - cop.OrderProcedure.StartDate
If dur > MeanValueMixing * 3600 +Deviation * 3600 Then
cop.OrderProcedure.CustomAttributes("MixingDuration") = RGB(255, 0, 0) 'red
ElseIf dur < MeanValueMixing * 3600 - Deviation * 3600 Then
cop.OrderProcedure.CustomAttributes("MixingDuration") = RGB(255, 165, 0) 'orange
Else
cop.OrderProcedure.CustomAttributes("MixingDuration") = RGB(0, 255, 0) 'green
End If
End Sub
Damit ergibt sich ein Gantt-Diagramm, in dem man sofort ablesen kann, welche Prozeduren hier ungewöhnlich lange brauchen oder aber außergewöhnlich schnell gelaufen sind:

Berechnung und Ausgabe von statistischen Parametern
Auf der anderen Seite kann man diese statistischen Funktionen nutzen, um die Simulationsergebnisse auszuwerten.
In dem folgenden Beispiel wurden die Wartezeiten auf den Paint Mixern analysiert. Dazu wurden zunächst alle Wartezeiten aus dem Wartezeitenreport in der EndSim in einen Array geschrieben und dann mit Hilfe der Befehle aus der MathNet-Bibliothek ausgewertet und in die Parameterdatei geschrieben:
Dim i As Integer
Dim j As Integer
Dim t As Table
Dim length As Integer
Dim daten () As Double
Dim start As Integer
start = 1
length = 0
'determine length of array
For Each u In UnitPools("Paint Mixers").Members
t = Reporting.UnitAllocationWaitingTimes(u)
length += t.RowCount
Next
ReDim daten(length - 1)
'Write Data from reporting object into array
For Each u In UnitPools("Paint Mixers").Members
t = Reporting.UnitAllocationWaitingTimes(u)
For j = start To t.RowCount + start - 1
daten(j - 1) = t(j - start + 1, "Duration") / 60
Next
start = j
Next
Dim mean As Double
Dim Dev As Double
'Determine statistical values and write into parameters workbook
Parameters.Sheets("Statistics").CellYX(1, 2) = mathnet.Numerics.Statistics.Statistics.Mean(daten)
Parameters.Sheets("Statistics").CellYX(2, 2) = mathnet.Numerics.Statistics.Statistics.StandardDeviation(daten)
Parameters.Sheets("Statistics").CellYX(3, 2) = mathnet.Numerics.Statistics.Statistics.Minimum(daten)
Parameters.Sheets("Statistics").CellYX(4, 2) = mathnet.Numerics.Statistics.Statistics.LowerQuartile(daten)
Parameters.Sheets("Statistics").CellYX(5, 2) = mathnet.Numerics.Statistics.Statistics.Median(daten)
Parameters.Sheets("Statistics").CellYX(6, 2) = mathnet.Numerics.Statistics.Statistics.UpperQuartile(daten)
Parameters.Sheets("Statistics").CellYX(7, 2) = mathnet.Numerics.Statistics.Statistics.Maximum(daten)
Die Ergebnisse der statistischen Betrachtung werden in Excel ausgegeben und können dort für weitere Analysen genutzt werden:

Weitere Funktionen von MathNet
MathNet bietet unter anderem umfangreiche Funktionen zur Lösung von linearen Gleichungssystemen, für die Regressionsrechnung, z. B. die Methode der kleinsten Quadrate, für die Differentialrechnung sowie viele weitere spannende Felder der numerischen Mathematik.
Download
Ein Beispielmodell mit allen hier gezeigten Beispielen steht im Download-Bereich zur Verfügung.
Fragen?
Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.
Mehr Tipps & Tricks
Intervall-Auswertung des Transfer-Reports
Intervall-Auswertung des Transfer-Reports In diesem Tipp stellen wir Ihnen vor, wie Sie aus den von INOSIM erzeugten Reports automatisiert per VBA weitere Daten berechnen, um…
Benutzerdefinierte Farben im INOSIM Gantt-Diagramm
Das INOSIM Gantt-Diagramm bietet die Möglichkeit, Belegungsbalken auf Basis verschiedener vordefinierter Attribute zu färben. In der Auftragssicht ist es möglich, das Farbschema sowohl mit dem…
Bei der Modellierung eines Prozesses kann es dazu kommen, dass eine bestimmte Eigenschaft, eines Objekt nicht angeboten wird: das Material des Equipments oder Verpackungstypen eines…

