Berechnungen mit mehreren Matrizen

Bei Berechnungen von Matrizen tritt häufig der Fall ein, dass Sie gleichartige Berechnungen für mehrere Matrizen vornehmen möchten. Die Stapelverarbeitung mit der Funktion ForEach bietet Ihnen die Möglichkeit, dies in einem Verfahrensschritt zu realisieren. Die ForEach Syntax ist sehr mächtig und bietet Ihnen für viele Anwendungsfälle Lösungen, beispielsweise:

  • Erzeuge für alle Nachfrageschichten je Modus eine Nachfragematrix
  • Initialisiere alle Matrizen des Modells
  • Mittele alle Kenngrößenmatrizen aus aufeinanderfolgender Iterationen innerhalb der Schleife einer Nachfrageberechnung
  • Summiere für jeden Modus die jeweiligen Nachfragematrizen aller Nachfrageschichten auf
  • Berechne für alle Nachfrageschichten die Nutzendefinition aus Kenngrößen unter Berücksichtigung spezifischer Koeffizienten
ForEach-Funktion verwenden

Unter Verwendung des Schlüsselwortes ForEach können mehrere Matrizen berechnet werden. Für die ForEach-Schleife innerhalb eines Verfahrens wird die folgende Form verwendet:

ForEach ( Netzobjekttyp Var <, Bedingung > )

Matrix (Matrixbezug über Eigenschaften) := Ausdruck

wobei

Element Beschreibung

Netzobjekttyp

Beliebiger Visum Netzobjekttyp, beispielsweise Matrizen, Nachfrageschichten, Modi, Nachfragesegmente

Var

Benutzerdefinierte Schleifenvariable, die mit einem Buchstaben beginnen muss. Die Schleifenvariable repräsentiert in jeder Schleife ein anderes Netzobjekt des Typs, über das iteriert wird.

Bedingung

(optional) Einschränkung der Iteration auf eine Menge von existierenden Netzobjekten

Matrix/Matrizen (Matrixbezug über Eigenschaften)

repräsentiert die Zielmatrix/Zielmatrizen

Formelausdruck

entspricht einer Matrixformel

Schleifen mit ForEach können auch geschachtelt verwendet werden. In diesem Fall müssen Sie für jeden Netzobjekttyp eine andere Schleifenvariable verwenden. Beim interaktiven Einfügen von Matrizen entfallen das Zuweisungszeichen := und der Ausdruck auf der rechten Seite des Zuweisungszeichens.

Durch Schleifenvariablen kann in einfacher Form auf Attribute des Netzobjekts, das diese Variable in der aktuellen Schleife repräsentiert, zugegriffen werden. Die Verwendung der Variablen ist sowohl auf der linken als auch rechten Seite des Zuweisungszeichens möglich.

Die Schleifenvariable repräsentiert immer ein schon existierendes Netzobjekt. Bei der Stapelverarbeitung von Matrizen können Sie außerdem das Schlüsselwort CONTEXT auf der rechten Seite des Zuweisungszeichens verwenden. Es kann benutzt werden, um beispielsweise auf Attribute der Zielmatrix zuzugreifen.

Beispiel 1

Sie möchten alle Matrizen des Modells in einem Verfahrensschritt zurücksetzen.

ForEach(MATRIX M)

M := 0

Es wird über alle existierenden Matrizen iteriert und deren Werte werden auf 0 gesetzt. Ist die Zielmatrix die Matrix, über die iteriert wird, können Sie die Schleifenvariable M direkt verwenden.

Beispiel 2

Sie möchten pro Nachfrageschicht und Modus eine Nachfragematrix im Verfahrensablauf erzeugen.

ForEach(NACHFRAGESCHICHT N)

ForEach(MODUS K)

Matrix([NACHFRMODELLCODE]="M01" & [NSCHICHTCODE]=N[CODE] & [MODUSCODE]=K[CODE]) := 0

In diesem Beispiel wird ein Matrixbezug für die Zielmatrizen definiert, der sich aus Attributen der Netzobjekte, über die iteriert wird, ergibt. Dafür werden die Schleifenvariable N und K wiederverwendet.

Beispiel 3

Es sollen die Kenngrößenmatrizen aus zwei aufeinanderfolgenden Iterationen gemittelt werden. Dazu müssen zunächst die existierenden Kenngrößenmatrizen dupliziert werden. Der Matrixbezug für die neu generierten Kenngrößen muss um mindestens ein Attribut erweitert werden, damit Eindeutigkeit gegenüber den existierenden Kenngrößen sichergestellt ist. Zum Duplizieren der Matrizen wird folgende Syntax verwendet:

ForEach(MATRIX M, M[MATRIXTYP]=4)

Matrix([NSEGCODE] = M[NSEGCODE] & [MATRIXTYP] = 4 & [CODE] = M[CODE] & [NAME] = M[NAME] & [SMOOTH] = "avg")

:= M

Es wird über alle Matrizen im Modell vom Matrixtyp Kenngröße iteriert. In den Zielmatrizen bleiben die Werte der Ausgangsmatrizen bestehen. Dafür wird auf der rechten Seite als Ausdruck die Schleifenvariable M verwendet. Zusätzlich wird für die jeweilige Zielmatrix ein benutzerdefiniertes Attribut belegt, das die Matrix von der jeweiligen Ausgangsmatrix unterscheidet.

Das Mitteln der Matrizen kann innerhalb der Nachfrageschleife durch folgende Syntax umgesetzt werden:

ForEach(MATRIX M, M[MATRIXTYP]=4 & M[SMOOTH] = "avg" )

M:= 0.7 * Matrix([NSEGCODE] = M[NSEGCODE] & [MATRIXTYP] = 4 &

[CODE] = M[CODE] & [SMOOTH] = "")

+ 0.3 * M

Zielmatrizen sind die zuvor duplizierten Matrizen. Das Iterieren wird auf diese Matrizen eingeschränkt. Die neu berechneten Kenngrößenmatrizen werden über einen Matrixbezug zugeordnet, das benutzerdefinierte Attribut ‚SMOOTH‘ ist leer. Die gemittelte Kenngrößenmatrix wird über die Schleifenvariable M angesprochen und mit einem Faktor 0.3 multipliziert.