Calculs avec plusieurs matrices
Dans le cadre des calculs de matrices, vous pouvez souvent être amené à effectuer des calculs similaires pour plusieurs matrices. La fonction de traitement par lots vous offre la possibilité d’effectuer ceci en une seule étape grâce à la fonction ForEach. La syntaxe ForEach est très puissante et vous offre des solutions pour de nombreux cas d’application :
- Génère une matrice de la demande pour toutes les couches de la demande pour chaque mode
- Initialise toutes les matrices du modèle.
- Calcule la moyenne de toutes les matrices d’indicateurs au cours des itérations successives au sein de la boucle d’un calcul de la demande
- Totalise les matrices de la demande respectives de toutes les couches de la demande pour chaque mode
- Calcule la définition d’utilité pour toutes les couches de la demande à partir des indicateurs en tenant compte de coefficients spécifiques
Utiliser la fonction ForEach
Il est possible de calculer plusieurs matrices en utilisant le mot-clé ForEach. La forme suivante est utilisée pour la boucle ForEach au sein d’une procédure :
ForEach ( type d’élément de réseau Var <, critère > )
Matrice (référence de matrice via les propriétés) := expression
avec
| Élément | Description |
|---|---|
|
Type d’élément de réseau |
Type d’élément de réseau Visum quelconque, p. ex. matrices, couches de la demande, modes, segments de la demande |
|
Var |
Variable de boucle définie par l’utilisateur devant commencer par une lettre. La variable de boucle représente dans chaque boucle un autre élément de réseau du type qui est au centre de l’itération. |
|
Critère |
(facultatif) Restriction de l’itération à un ensemble d’éléments de réseau existants |
|
Matrice/matrices (référence de matrice via les propriétés) |
Représente la ou les matrices cibles |
|
Expression de formule |
Correspond à une formule de matrice |
Il est aussi possible d’imbriquer les boucles avec ForEach. Dans ce cas, vous devez utiliser une variable de boucle différente pour chaque type d’élément de réseau. Le caractère d’assignation := et l’expression sur le côté droit de celui-ci disparaissent lors de l’insertion interactive de matrices.
Les variables de boucle permettent d’accéder simplement à des attributs de l’élément de réseau qui représente cette variable dans la boucle actuelle. L’utilisation des variables est possible tant du côté gauche que du côté droit du caractère d’assignation.
La variable de boucle représente toujours un élément de réseau déjà existant. Lors du traitement par lots de matrices, vous pouvez utiliser en outre le mot-clé CONTEXT du côté du caractère d’assignation. Vous pouvez l’utiliser par exemple pour accéder aux attributs de la matrice cible.
Exemple 1
Vous souhaitez initialiser toutes les matrices du modèle en une étape de procédure.
ForEach(MATRIX M)
M := 0
L’itération porte sur toutes les matrices existantes et leur valeurs sont remises à zéro. Si la matrice cible correspond à la matrice sur laquelle porte l’itération, vous pouvez utiliser directement la variable de boucle M.
Exemple 2
Vous souhaitez générer une matrice de la demande dans la séquence de procédures par couche de la demande et mode.
ForEach(COUCHEDEMANDE N)
ForEach(MODE K)
Matrix([CODEMODELED]="M01" & [CODECOUCHED]=N[CODE] & [CODEMODE]=K[CODE]) := 0
Dans cet exemple, une référence de matrice est définie pour les matrices cibles ; celle-ci résulte des attributs des éléments de réseau sur lesquels porte l’itération. Les variables de boucle N et K sont réutilisées à cet effet.
Exemple 3
Il s’agit de calculer la moyenne de matrices d’indicateurs sur deux itérations successives. Les matrices d’indicateurs existantes doivent être dupliquées à cet effet dans un premier temps. Vous devez étendre la référence de matrice pour les nouveaux indicateurs générés d’au moins un attribut, pour garantir l’univocité par rapport aux indicateurs existants. La syntaxe suivante est utilisée pour dupliquer les matrices :
ForEach(MATRIX M, M[TYPEMATRICE]=4)
Matrix([CODESEGD] = M[CODESEGD] & [TYPEMATRICE] = 4 & [CODE] = M[CODE] & [NOM] = M[NOM] & [SMOOTH] = "avg")
:= M
Les indicateurs sont itérés sur toutes les matrices dans le modèle du type de matrice. Les valeurs des matrices de départ sont conservées dans les matrices cibles. La variable de boucle M est utilisée du côté droit au titre d’expression. Un attribut défini par l’utilisateur est valorisé en plus pour la matrice cible respective, qui différencie celle-ci de la matrice de départ respective.
Le calcul de la moyenne des matrices peut être exécuté dans la boucle de la demande grâce à la syntaxe suivante :
ForEach(MATRIX M, M[TYPEMATRICE]=4 & M[SMOOTH] = "avg" )
M:= 0.7 * Matrix([CODESEGD] = M[CODESEGD] & [TYPEMATRICE] = 4 &
[CODE] = M[CODE] & [SMOOTH] = "")
+ 0.3 * M
Les matrices cibles sont des matrices dupliquées auparavant L’itération est limitée à ces matrices. Les matrices d’indicateurs recalculées sont assignées via une référence de matrice, l’attribut défini par l’utilisateur « SMOOTH » est vide. La matrice d’indicateurs moyennée est interrogée par la variable de boucle M et multipliée par le facteur 0,3.