19. November 2025

Rechenpower aus dem .NET-Universum

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.

Downloads

Fragen?

Möchten Sie mehr über dieses Thema erfahren oder haben weitere Fragen? Bitte kontaktieren Sie uns.

Array ( [posts_per_page] => 3 [post_type] => [category__in] => Array ( [0] => 171 ) [orderby] => rand [order] => ASC )

Mehr Tipps & Tricks

Mit Hilfsfunktionen, die Sie als Basic-Macro in INOSIM importieren können, hauchen Sie Ihrem Anlagenlayout Leben ein: Durch Animationen stellen Sie Veränderungen von Füllständen, Transportbewegungen von Objekten oder…

19. März 2019

Das Reporting-Objekt

Ab INOSIM 12 ist das Reporting-Objekt Bestandteil des Objektmodells. Es ermöglicht den Zugriff auf die Ergebnisberichte über Visual Basic und bietet dadurch vielfältige Optionen zur…

In INOSIM Simulationen können benutzerdefinierte, stochastische Teilanlagen-Störungen genutzt werden, um die Realität in einer Anlage möglichst präzise abzubilden. Mit dem Add-On Statistische Analyse kann dann…

mehr

INOSIM Kontakt

Zu den lokalen Geschäftszeiten

Deutschland +49 231 97 00 250