CombinedQSS

= Utilisation de l'extension CombinedQSS =

Introduction
QSS est une extension de DEVS dont l'objectif est l'intégration numérique d'équations différentielles ordinaires (EDO). La méthode repose sur le principe de la discrétisation de l'espace des valeurs au lieu de l'espace du temps. Elle est développée par Ernesto Kofman.

Cette extension prend en charge un système d'EDO. Si vous disposez d'une seule équation alors il est recommandé d'utiliser l'extension QSS.

Les ports à définir
Les ports sont du même type que pour l'extension QSS sauf pour la synchronisation. Dans le modèle simple, le port de sortie se nomme comme le port d'entrée, update. Dans le cas de CombinedQSS, il existe autant de port de sortie que de variables gérées par le modèle (x et y dans l'exemple ci-dessous). Les noms des ports sont les mêmes que les variables. Cette différence permet autres modèles externes de ne connecter que sur la ou les variables qui l'intéresse.

Les initialisations
L'initialisation est identique à l'initialisation d'un QSS sauf les variables name, value et précision. Ces variables permettent de définir le nom et la valeur initiale de la variable gérée par le QSS ainsi que le pas de quantification. Dans le cas de CombinedQSS, il existe plusieurs variables d'où la syntaxe suivante :

Le CombinedQSS gère deux variables (x et y) dont la valeur d'initialisation est respectivement 5000 et 45 et le pas de quantification, 1 et 0.1.

Comment écrire un modèle à base de QSS ?
L'écriture d'un modèle passe par la construction d'une sous-classe de vle::extension::CombinedQss. Deux méthodes sont à définir en dehors du constructeur et du destructeur :
 * processInitEvents pour la gestion de l'initialisation des paramètres ; leur valeur étant défini dans le vpz sous forme suivante :


 * compute pour le calcul du gradient.

Voici un exemple d'header :

Voici maintenant un exemple d'initialisation de l'extrait précédent de vpz. Attention, il ne faut pas oublier l'appel à processInitEvents de CombinedQss sinon les paramètres de QSS ne seront pas définis.

La méthode de calcul du gradient fait intervenir la valeur des variables à intégrer, les paramètres s'ils existent et les valeurs des variables numériques gérées par d'autres QSS ou par des modèles numériques.

La relation entre i et l'équation est définie par l'ordre de déclaration dans le vpz.

Dans l'exemple, a, b, d et e sont les paramètres des équations, la méthode getValue(i) permet d'obtenir la valeur de la ième variable. Il existe aussi la méthode getValue("z") pour obtenir la valeur d'une variable "externe".

Comment perturber un QSS ?
Il n'y a aucune différence avec QSS sauf le nommage du port update qui est devenu le nom de la variable.

Références

 * E. Kofman and S. Junco. Quantized state systems. a devs approach for continuous systems simulation. Transactions of the Society Computer Simulation International, 18(3) :123–132, 2001.
 * E. Kofman. A second order approximation for devs simulation of continuous systems. Transactions of the Society Computer Simulation International, 78(2) :76–89, 2002.
 * E. Kofman. A third order discrete event method for continuous system simulation. part i : Theory. In In Proceedings of RPIC’05, 2005.
 * E. Kofman. A third order discrete event method for continuous system simulation. part ii : Applications. In In Proceedings of RPIC’05, 2005.