Les énoncés codice_1 et codice_2permettent de calculer des quantités statistiques et de préparer des histogrammes sur une variable "x" dépendant du temps.
Elles s'utilisent uniquement dans le codice_3.
On emploie tally dans le cas où "x" est définie en des instants "t"1, "t"2, ..., "t""n" et accumulate dans le cas où "x" est définie sur tout l’intervalle "[O,T]" :
ACCUMULATE / TALLY
La syntaxe est la même dans les deux cas :
formula_1
"x" peut être une variable globale, ou un attribut d’entité(s) permanente(s) ou encore un attribut d’entité(s) temporaire(s) (sauf pour un histogramme), un attribut d’une ressource ou d’une entité composée ou un attribut du système. La variable "x" doit être numérique; c’est-à-dire le mode doit être codice_4, codice_5, codice_6, codice_7, codice_8, codice_9; la variable ne peut être une variable de mode codice_10, codice_11, codice_12ou codice_13. Cette variable peut avoir une dimension et peut être monitorée. Elle peut être définie explicitement ou implicitement. Ce variable ne peut être une fonction attribut, une variable aléatoire ou une statistique recueillie par un autre énoncé codice_1/codice_2.
Si l’énoncé codice_1/codice_2 apparaît à l’intérieur d’un bloc codice_18, la variable sur laquelle on recueille des statistiques est un attribut d’un objet ou d’une classe définie par la classe ou hérité d’une autre classe. Si la variable est un attribut d’objet, chaque statistique est un attribut d’objet, tandis que si la variable est un attribut de la classe, chaque statistique est un attribut de la classe. Si la variable est définie dans le préambule public, et l’ énoncé codice_1/codice_2 apparaît dans le préambule privé, la variable doit être un attribut d’objet. En d’autres mots, les statistiques privées ne peuvent être recueillies sur les attributs publics d’une classe.
"Nom"1...,"Nom"n sont des noms de fonctions qui n’ont pas besoin d’être déclarées par ailleurs et qui calculent automatiquement les quantités demandées par les mots-clés de l’énoncé, lorsqu’on y fait référence (généralement en fin de simulation).
Voici les mots-clés et les calculs effectués par un codice_21:
Pour un codice_1, les mots-clés sont les mêmes, mais les calculs effectués sont évidemment différents :
"Nom"h est un nom de tableau défini automatiquement avec une dimension de plus que la variable "x", tableau qui contiendra l’histogramme de "x" pour les valeurs comprises entre "q"1 et "q"2, par tranches de "q"3 unités (les "q"i doivent être des constantes numériques, ou des variables globales initialisées une fois pour toute avant la première utilisation du codice_2). Par exemple, si "x" est un attribut de couple d’entités permanentes (E1,E2) "Nom"h sera un tableau à 3 indices i, j, k avec i = 1, ..., n.E1; j = 1, ..., n.E2 et k = 1, ..., n avec n = ("q"2 – "q"1) / "q"3 + 1.
codice_2 compte le nombre de fois où (codice_1 cumule la durée pendant laquelle) la variable "x"(i, j) est tombée dans l’intervalle : ["q"1+(k-1)"q"3 , "q"1+k"q"3[ pour k = 1...,n et met ce nombre (cette durée) dans "Nom"h(i, j, k).
N.B. : les valeurs "x" < "q"1 vont aussi dans la case 1 et les valeurs "x" ≥ "q"2 vont dans la case n.
Exemples :
Soit Occupé une variable globale qui manque l’occupation d’un serveur (Occupé = 0 quand il est libre et Occupé = 1 quand il est occupé). Alors:
accumulate R0 as the mean of Occupé
donnera le taux d’occupation du serveur durant la simulation.
Si Bac est un ensemble et si on place dans le codice_26:
accumulate L_Bac as the mean,
 p (0 to 100 by 1) as the histogram of N.Bac
on aura en fin de simulation L_Bac  =  longueur moyenne de la file Bac et p(k) / time.v  =  probabilité d’avoir k 1 clients dans la file Bac pour k  =  1...,101.
Remarque: si Bac est indicée par une entité permanente Canal, on aura avec ce même énoncé les quantités demandées pour toutes les files en faisant référence à L_Bac(i) et p(i,k) pour i = 1...,N.Canal.
3. Si w est une variable globale qui mesure le temps passé par chaque client dans la file Bac (on a donc "w  =  time.v   Heure_Arrivee(Client)" derrière "remove first Client from Bac" dans un routine), alors:
tally Nw = number,
 Ew = mean,
 Sw = std.dev,
 Hw (0 to 20 by 0.1 = histogram of w

Simscript III/Dictionnaire des instructions/ACTIVATE A/SCHEDULE A

L’énoncé "codice_1" permet de créer un codice_2, d’initialiser ses attributs éventuels, et de prévoir l’exécution d’un processus ou une routine processus routine associé à un instant (ou dans un délai) donné.
"Nom-Processus "est un processus déclaré dans le codice_3.
Si on utilise la forme "codice_4", "P" est une variable entière où sera stocké le repère (pointeur) du processus créé par codice_5 (de façon à pouvoir le repérer dans une autre routine si nécessaire).
"v"1," v"2...," v"n est une liste de valeurs affectées aux attributs du processus dans l’ordre où ils ont été déclarés dans le preamble; on peut aussi affecter explicitement les valeurs aux attributs en écrivant :
 activate a Processus now
 Attribut_1(Processus)&nbsp;=&nbsp;"v"<sub>1</sub>
 Attribut_n(Processus)&nbsp;=&nbsp;"v"<sub>n</sub>
Enfin "codice_6", "codice_7"q" codice_8" parlent d’eux-mêmes. (codice_9veut dire tout de suite; il faut évidemment t ≥ time.v, et "codice_10time.v + "q"" est équivalent à "codice_7"q" codice_8").
Exemple :
schedule a Diffuser_Maladie now
schedule a Fin_Simulation in Limite days;
schedule a Traverser_Pont(Voiture) now;
schedule a Générateur_Véhicules (Rive) ( Moyenne_InterArrivée(Rive),
 Écart_InterArrivée(Rive),
 Nb_Véhicules_Limite(Rive)) now;
schedule a Cycle_Vert(Feu_Circulation) now;
schedule a Contrôler_Dépassement(Pont)(Véhicule, PR) now

Simscript III/Dictionnaire des instructions/ADD

L’énoncé : add "quantité" to "v", dans laquelle "quantité" est une expression arithmétique et "v" une variable, est strictement équivalente à l’écriture : "v  =  v + quantité".
Exemple :
add 1 to Compteur ; ‘‘ Équivalent à let Compteur = Compteur + 1
add a*x**2+b*x+c to y ; ‘‘ Équivalent à let y = y + a*x**2+b*x+c
add Poids_Bagage(Passager) to Poids_Total(Appareil); ‘‘ Équivalent à let Poids_Total(Appareil) =
 ‘‘ Poids_Total(Appareil) + Poids_Bagage(Passager)

Simscript III/Dictionnaire des instructions/AFTER/BEFORE

Un appel à une routine ou une méthode peut être effectué implicitement en spécifiant avec l’énoncé after/before dans le préambule le nom de la méthode ou routine à appeler. Cette méthode ou routine ne doit pas posséder de paramètres, mais cette méthode/routine peut faire appel à un autre sous-programme avec des paramètres, permettant ainsi par exemple d’initialiser un objet après sa création.
Cet appel implicite peut être effectué après la création ou avant la destruction d’un objet, d’un processus ou d’une entité temporaire. Un appel implicite peut également être effectué avant d’ajouter ou retirer un élément d’un ensemble. Enfin, un appel implicite à une routine/méthode peut être effectué après l’ordonnancement d’un processus ou d’une méthode processus ou après avoir annuler un processus ou une méthode processus.
Si l’énoncé before/after scheduling/canceling apparaît à l’intérieur d’un bloc begin class … end, l’énoncé nomme une méthode processus ou une méthode d’un objet ou d’une classe. En dehors d’un bloc d’une classe, l’énoncé nomme un processus ou une routine.L’énoncé before/after filing/removing fait référence à un ensemble possédé par un objet ou la classe et à une méthode d’un objet ou d’une classe. La méthode doit avoir été définies dans la classe ou héritée d’une autre classe.
Exemple :

Simscript III/Dictionnaire des instructions/BREAK ... TIES