Organisation des fichiers

RiskPaths.mpp (le fichier de simulation principal)
PersonCore.mpp
Fichiers de comportement
Tables.mpp
Tracking.mpp
Fichier de traduction de langue RiskPathsFR.mpp

Le code Modgen de RiskPaths est réparti entre huit fichiers .mpp distincts, tandis que toutes les valeurs des paramètres RiskPaths (parce que dernier est un modèle simple) sont contenues dans un seul fichier .dat. En principe, un développeur de modèle est entièrement libre de décider comment répartir le code Modgen dans les différents fichiers, mais une structure modulaire telle que celle de RiskPaths, est recommandée.

Figure 2 : Organisation des fichiers de RiskPaths

Figure 2 : Organisation des fichiers de RiskPaths
Modules généraux Nom du fichier
Moteur de simulation RiskPaths.mpp
Fichier de base des acteurs PersonCore.mpp
Définition des tableaux Tables.mpp
Dépistage des sorties Tracking.mpp
Traductions en français RiskPathsFR.mpp
Modules de comportement Nom du fichier
Mortalité Mortality.mpp
Fécondité Fertility.mpp
Formations et dissolutions d'unions Unions.mpp
Fichier des paramètres Nom du fichier
Paramètres du scénario de référence Base(RiskPaths).dat

Il convient de souligner que les fichiers de code .mpp contiennent souvent des commentaires qui ressemblent à des étiquettes. Ces commentaires sont placés à côté des déclarations des symboles, tels que les états, les niveaux d'état, les paramètres, les tableaux et les dimensions de tableau. Modgen interprète en fait ces commentaires comme des étiquettes et les utilise subséquemment quand les tableaux ou les paramètres sont affichés dans l'interface visuelle de Modgen. Ces étiquettes sont alors utilisées dans le fichier d'aide encyclopédique du modèle qui est produit automatiquement. Les commentaires du code qui sont utilisés comme des étiquettes commencent par un identificateur de langue de deux caractères, par exemple :

//EN Union status

De nombreux commentaires de ce genre figurent dans les exemples de code qui suivent pour RiskPaths.

Pour des descriptions plus détaillées des modules, des fonctions et des événements, des notes utilisant la syntaxe qui suit peuvent également être placés dans le code.

/*NOTE(Person.Finish, EN)
The Finish function terminates the simulation of an actor.
*/

En plus de renseigner sur le code, ces notes sont utilisées dans le fichier d'aide encyclopédique produit automatiquement.

RiskPaths.mpp (le fichier de simulation principal)

Ce fichier contient le code essentiel à la définition du type de modèle (p. ex.orienté cas, temps continu) ainsi que le moteur de simulation, c'est-à-dire le code qui exécute la simulation complète. Parce que RiskPaths est un modèle orienté cas, le code du moteur de simulation est itéré sur tous les cas et traite les files d'événement de chaque cas. Le fichier identifie aussi les langues utilisées dans le modèle. Le code contenu dans ce fichier est en grande partie indépendant du modèle à l'intérieur d'une classe de modèles (p. ex.temps continu, orienté cas) et une version de ce fichier est fournie automatiquement quand le guide intelligent intégré dans Modgen est utilisé pour lancer un nouveau projet Modgen.

Pour le développement de notre modèle RiskPaths de cohorte en temps continu orienté cas avec un acteur  « Person », le code fourni par le guide intelligent ne nécessite que très peu de modifications. Le code complet de ce fichier .mpp a moins d'une page de long.

PersonCore.mpp

Le seul acteur dans RiskPaths est une personne. Dan le fichier PersonCore.mpp, nous avons placé le code qui fait partie de la déclaration de l'acteur, mais qui n'est pas directement relié à un comportement spécifique. Le fichier contient deux horloges d'âge définies comme des états autoplanifiés (integer_age et age_status) et deux fonctions d'acteur, Start() et Finish(), qui sont exécutées à la création d'un acteur et à son décès, respectivement.

Dans la fonction Start(), nous initialisons le temps et l'âge des états à 0. Les deux états sont créés et tenus à jour automatiquement par Modgen et ne peuvent être modifiés que dans la fonction Start(). Leur type dépend du type de modèle; comme RiskPaths est un modèle en temps continu, le temps et l'âge sont des états continus.

La fonction Finish() doit être appelée au moment de l'événement de décès d'un acteur. Son rôle est d'éliminer l'acteur des tableaux et de la simulation, et de récupérer toute mémoire informatique utilisée par l'acteur.

Tous les états et fonctions d'acteur sont décrits dans un bloc  « actor Person { }; ». Pour permettre que l'organisation du code en fonction de divers domaines de la trajectoire de vie soit modulaire, il peut y avoir plusieurs blocs d'acteur dans un projet, habituellement un pour chaque fichier de comportement.

La première section de code de ce module contient trois types de définitions. Nous commençons par définir un intervalle de vie range LIFE.

range LIFE //EN Simulated age range
{
0,100
};

Range est un type Modgen qui définit un intervalle de valeurs entières. RiskPaths limite l'intervalle d'âge possible des personnes à 100 ans. Ce type est utilisé pour déclarer un état dérivé contenant l'âge d'une personne en années complètes.

Le deuxième type de définition est utilisé pour diviser les âges continus en intervalles d'âge de 2,5 ans en commençant à l'âge de 15 ans.

partition AGEINT_STATE//EN 2.5 year age intervals
{
15, 17.5, 20, 22.5, 25, 27.5, 30, 32.5, 35, 37.5, 40
};

La troisième définition est une classification des types d'union. En général, si un intervalle (range), une partition ou une classification est utilisée dans plusieurs fichiers, il est bon de la définir dans le fichier de base de l'acteur.

classification UNION_STATE //EN Union status
{
US_NEVER_IN_UNION,//EN Never in union
US_FIRST_UNION_PERIOD1,//EN First union < 3 years
US_FIRST_UNION_PERIOD2,//EN First Union > 3 years
US_AFTER_FIRST_UNION,//EN After first union
US_SECOND_UNION,//EN Second union
US_AFTER_SECOND_UNION//EN After second union
};

Dans le segment de code qui suit, nous déclarons deux états d'acteur dérivés et deux fonctions. Les états dérivés des intervalles de temps sont utilisés pour modifier les valeurs des paramètres qui varient en fonction du temps. Dans notre modèle, integer_age est nécessaire parce que les risques de mortalité dépendent de l'âge en années, tandis que age_status intervient parce que les risques de base pour la première grossesse et la formation d'une première union sont modélisés de manière à ce qu'ils changent par intervalles de 2,5 ans après le 15e anniversaire.

Tant integer_age que age_status doit être tenu à jour au cours de la simulation. Le concept Modgen d'état dérivé nous permet de les tenir à jour automatiquement. Tous deux sont dérivés de l'état  « âge » (qui est un état particulier produit et tenu à jour automatiquement par Modgen). Afin de diviser l'âge en intervalles de temps définis dans la partition AGEINT_STATE, nous utilisons la fonction Modgen self_scheduling_split. Le deuxième état dérivé, integer_age, peut être obtenu directement en utilisant la fonction Modgen self_scheduling_int. Pour être certain que sa valeur reste dans l'intervalle de valeurs possibles de LIFE, nous le convertissons au type LIFE, ce qui est effectué par la macro Modgen COERCE.

actor Person
{
//EN Current age interval
int age_status = self_scheduling_split(age, AGEINT_STATE);

//EN Current integer age
LIFE integer_age = COERCE( LIFE, self_scheduling_int(age) );

//EN Function starting the life of an actor
void Start();

//EN Function finishing the life of an actor
void Finish();
}

Le code qui reste dans ce module correspond à l'exécution des fonctions Start() et Finish(). La fonction Finish() est laissée vide car nous n'avons besoin d'aucune autre action que celle exécutée automatiquement par Modgen au moment du décès d'un acteur.

void Person::Start()
{
// Age and time are variables automatically maintained by
// Modgen. They can be set only in the Start function
age = 0;
time = 0;
}

/*NOTE(Person.Finish, EN)
The Finish function terminates the simulation of an actor.
*/
void Person::Finish()
{
// After the code in this function (if any) is executed,
// Modgen removes the actor from tables and from the simulation.
// Modgen also recuperates any memory used by the actor.
}

Fichiers de comportement

Dans RiskPaths, nous distinguons trois groupes de comportements : la mortalité, la fécondité et la formation/dissolution d'une union. Par conséquent, nous avons réparti le code dans trois fichiers .mpp : Mortality.mpp, Fertility.mpp et Unions.mpp. Chaque fichier de comportement est habituellement subdivisé en trois sections :

déclaration des paramètres (incluant tous types de définitions qui sont requises pour commencer);

déclarations des états d'acteur et des événements;

exécution des événements.

Mortality.mpp

Ce fichier définit l'événement de mortalité qui termine la vie de l'acteur simulé. Mortality.mpp est un module de comportement typique et nous suivons une présentation standard du code : déclarations des paramètres (avec les définitions des types), déclarations des acteurs et exécution des événements.

Déclarations des paramètres

La mortalité est paramétrisée par les probabilités de décès selon l'âge; donc, la probabilité de survivre une année supplémentaire change à chaque anniversaire. Nous introduisons aussi un paramètre qui nous permet de  « désactiver » la mortalité. Quand il est utilisé, chaque acteur atteint l'âge maximal de 100 ans (ce qui peut être utile pour certains types d'analyse de la fécondité). La figure 3 montre les tableaux des paramètres de mortalité de l'application RiskPaths.

Figure 3 : Paramètres de la mortalité

Figure 3 : Paramètres de la mortalité

Les paramètres sont déclarés dans un bloc de code  « parameters {.}; ». Modgen permet d'utiliser les types numériques standard de C++, tels que int, long, float, double ou boolean ( « logical » dans la terminologie de Modgen), ainsi que les types range (intervalle), partition et classification particuliers à Modgen qui ont été introduits dans PersonCore.mpp. La dimensionnalité des paramètres dans le modèle RiskPaths est définie par les classifications et les intervalles. Le code qui suit produit pour RiskPaths les paramètres illustrés à la figure 3. Pour les probabilités annuelles de décès, nous utilisons l'intervalle LIFE qui a été défini dans PersonCore.mpp. L'instruction (parameter_group) regroupe les deux paramètres de mortalité afin de fournir une liste de sélection hiérarchique ordonnée dans l'interface utilisateur (de nouveau, comme illustré à la figure 3).

parameters
{
logical CanDie;//EN Switch mortality on/off
double ProbMort[LIFE];//EN Death probabilities
};

parameter_group P01_Mortality//EN Mortality
{
CanDie, ProbMort
};

Déclarations des acteurs

Les acteurs sont décrits par des états qui sont modifiés par des événements. Les états peuvent être continus (entiers ou réels) ou catégoriques. Dans le module de la mortalité, l'état d'intérêt est le fait qu'une personne est en vie ou non, si bien qu'il est catégorique par nature. Les niveaux d'un état catégorique sont définis au moyen de la commande classification de Modgen.

Nous déclarons un état life_status de type LIFE_STATE, qui est initialisé avec LS_ALIVE à la naissance et fixé à LS_NOT_ALIVE par l'événement de décès. L'initialisation de tous les états en attribuant la valeur initiale est une bonne pratique. Cependant, chaque valeur initiale doit être comprise entre des parenthèses, c'est-à-dire {}; sinon, l'état est exécuté comme un état dérivé.

classification LIFE_STATE //EN Life status
{
LS_ALIVE,//EN Alive
LS_NOT_ALIVE//EN Dead
};

actor Person
{
LIFE_STATE life_status = {LS_ALIVE};//EN Life Status
event timeDeathEvent, DeathEvent;//EN Death Event
};

Les événements sont déclarés dans le bloc actor Person {..} en utilisant le motclé event. Tous les événements consistent en une fonction qui produit le temps de l'événement suivant et une fonction contenant le code décrivant les conséquences de l'événement.

Exécution d'un événement

Quand l'option de mortalité est activée, la fonction timeDeathEvent produit un temps aléatoire basé sur le paramètre de mortalité pour l'année d'âge donnée. Afin d'obtenir des durées aléatoires d'après les probabilités, nous supposons que les risques de mortalité sont constants durant chaque période, c'estàdire entre les anniversaires. (Fait exception la probabilité de décès qui est égale à 1, ce qui entraêne le décès immédiatement après le début de l'année d'âge). Il convient de souligner que tout temps ultérieur à l'anniversaire suivant entraênera la précédence de l'événement d'anniversaire sur l'événement de mortalité; autrement dit, l'événement d'anniversaire censurera l'événement de mortalité.

TIME Person::timeDeathEvent()
{
TIME event_time = TIME_INFINITE;
if (CanDie)
{
if (ProbMort[integer_age] >= 1)
{
event_time = WAIT(0);
}
else
{
event_time = WAIT(-log(RandUniform(3)) /
-log(1 - ProbMort[integer_age]));
}
}
// Death event can not occur after the maximum duration of life
if (event_time > MAX(LIFE))
{
event_time = MAX(LIFE);
}
return event_time;
}

La fonction d'exécution de l'événement DeathEvent est simple. Elle donne à life_status la valeur LS_NOT_ALIVE et appelle la fonction Finish(), qui élimine l'acteur de la simulation et récupère tout espace mémoire utilisé par cet acteur.

void Person::DeathEvent()
{
life_status = LS_NOT_ALIVE;
Finish();
}

Fertility.mpp

Ce fichier définit et exécute l'événement de première grossesse. Comme nous nous servons de RiskPaths pour étudier l'absence d'enfants, nous ne simulons aucun autre événement relié à la fécondité. Fertility.mpp est un module de comportement et, de nouveau, nous adoptons la même présentation standard du code : définitions des types, déclarations des paramètres, déclarations des acteurs et exécution des événements.

Déclarations des paramètres

La fécondité est paramétrisée par un risque de grossesse de base par intervalle d'âge de 2,5 ans en commençant au 15e anniversaire et par un facteur de risque relatif qui dépend de la situation d'union et de la durée. Nous définissons donc deux paramètres : AgeBaselinePreg1 et UnionStatusPreg1.

Figure 4 : Paramètres de fécondité

Figure 4 : Paramètres de fécondité

Pour les risques de fécondité, une partition du temps est utilisée pour définir les colonnes. Pour l'âge de référence, nous utilisons la partition AGEINT_STATE qui a été définie dans PersonCore.mpp. Pour définir les états d'union possibles pour les facteurs de risque relatif, le modèle utilise la classification UNION_STATE qui est déclarée dans PersonCore.mpp également.

parameters
{
//EN Age baseline for first pregnancy
double AgeBaselinePreg1[AGEINT_STATE];
//EN Relative risks of union status on first pregnancy
double UnionStatusPreg1[UNION_STATE];
};

parameter_group P02_Ferility //EN Fertility
{
AgeBaselinePreg1, UnionStatusPreg1
};

Déclarations des acteurs

Le seul état du module de la fécondité est « parity_status » qui ne peut posséder que deux niveaux :  « sans enfants » et  « enceinte ». (En effet, RiskPaths ne simule plus les événements de fécondité d'un acteur après la première grossesse.)

Dans Fertility.mpp, nous ne modélisons qu'un seul événement : la grossesse. La paire correspondante de fonctions d'événement est timeFirstPregEvent et FirstPregEvent.

classification PARITY_STATE //EN Parity status
{
PS_CHILDLESS,//EN Childless
PS_PREGNANT//EN Pregnant
};

actor Person
{
//EN Parity status derived from the state parity
PARITY_STATE parity_status = {PS_CHILDLESS};

//EN First pregnancy event
event timeFirstPregEvent, FirstPregEvent;
};

Exécution des événements

Comme tous les événements Modgen, l'événement de première grossesse est exécuté en deux parties. La première détermine le moment de l'événement et la deuxième, les conséquences si l'événement a lieu. La fonction timeFirstPregEvent vérifie si l'acteur est couramment exposé au risque et, dans l'affirmative, tire une durée aléatoire en se basant sur le modèle de régression à risques constants proportionnels par morceaux paramétrisé par un âge de référence et un risque relatif selon la situation d'union. Par conséquent, le taux de risque est calculé d'après les deux paramètres AgeBaselinePreg1 et UnionStatusPreg1. Une durée aléatoire peut être obtenue à partir d'un nombre aléatoire suivant une loi uniforme par la transformation :

randdur=-log(RandUniform(1))/taux de risque

La fonction Modgen RandUniform() produit un nombre aléatoire à distribution uniforme compris entre 0 et 1. La fonction requiert un argument entier utilisé pour attribuer une chaêne de nombres aléatoires indépendants différente à chaque fonction de production d'un nombre aléatoire dans le code. S'il est omis, Modgen réécrit automatiquement un indice unique dans le fichier .mpp avant la conversion en code C++.

Lorsque l'événement a lieu, la valeur de l'état  « parité » augmente de 1. (Il convient de souligner que l'état dérivé parity_status est placé automatiquement par  « PS_PREGNANT ».)

TIME Person::timeFirstPregEvent()
{
double dHazard = 0;
TIME event_time = TIME_INFINITE;
if (parity_status == PS_CHILDLESS)
{dHazard = AgeBaselinePreg1[age_status]
* UnionStatusPreg1[union_status];
if (dHazard > 0)
{
event_time = WAIT(-log(RandUniform(1)) / dHazard);
}
}
return event_time;
}

void Person::FirstPregEvent()
{parity++;
}

Unions.mpp

La programmation des transitions entre les unions ne donne lieu qu'à l'introduction de nouveaux concepts mineurs dans la programmation Modgen, si bien que la discussion du code qui suit est limitée principalement à la dissolution des unions. Les taux de risque pour les premier et deuxième événements de dissolution d'une union sont sauvegardés dans le même tableau de paramètres parce qu'ils utilisent tous deux les mêmes intervalles temporels de durée d'union.

Afin de construire un paramètre au moyen des dimensions temps et ordre de l'union, nous définissons une partition du temps et une classification :

partition UNION_DURATION//EN Duration of current union
{
1, 3, 5, 9, 13
};

classification UNION_ORDER //EN Union order
{
UO_FIRST,//EN First union
UO_SECOND//EN Second union
};

parameters
{
.
//EN Union Duration Baseline of Dissolution
double UnionDurationBaseline[UNION_ORDER][UNION_DUR];
.
};

Figure 5 : Paramètres de dissolution d'une union

Figure 5 : Paramètres de dissolution d'une union

Dans la fonction timeUnion1DissolutionEvent(), les taux de risque de dissolution de la première union sont obtenus de la façon suivante :

dHazard = UnionDurationBaseline[UO_FIRST][union_duration];

De la même façon, timeUnion2DissolutionEvent() fait référence à la deuxième ligne du paramètre :

dHazard = UnionDurationBaseline[UO_SECOND][union_duration];

Contrairement aux processus dont nous avons discuté jusqu'à présent, les processus de dissolution d'une union ne débutent pas à un moment prédéfini (p. ex.le 15e anniversaire), mais au moment des événements de formation d'une union. La durée d'une union est définie comme un état dérivé autoplanifié de la forme suivante :

//EN Currently in an union
logical in_union = (union_status == US_FIRST_UNION_PERIOD1
|| union_status == US_FIRST_UNION_PERIOD2
|| union_status == US_SECOND_UNION);

//EN Time interval since union formation
int union_duration = self_scheduling_split(
active_spell_duration( in_union, TRUE), UNION_DURATION);

En ce qui concerne la formation d'une union, l'exécution de l'horloge qui modifie l'état de durée de l'union union_status de US_FIRST_UNION_PERIOD1 à US_FIRST_UNION_PERIOD2 après trois ans dans une première union nécessite une certaine discussion. Contrairement aux états dérivés autoplanifiés utilisés pour toutes les autres horloges du modèle, ici, principalement pour illustrer cette alternative, nous exécutons explicitement l'horloge comme un événement proprement dit. Cet événement a lieu après trois ans dans la première union. L'horloge est réglée au moment de la formation de la première union. La déclaration d'acteur comprend un état qui enregistre le moment du changement d'état, ainsi que la déclaration de l'événement.

actor Person
{
.

//EN Time of union period change
TIMEunion_period2_change = {TIME_INFINITE};

//EN Union period change event
eventtimeUnionPeriod2Event, UnionPeriod2Event;
};

Le temps pour le changement d'état est réglé dans l'événement de formation de la première union. Dans l'exemple de code, WAIT est une fonction Modgen intégrée qui produit le temps de l'événement courant plus une durée spécifiée (dans notre exemple, trois ans).

void Person::Union1FormationEvent()
{
unions++;
union_status = US_FIRST_UNION_PERIOD1;union_period2_change = WAIT(3);
}

L'exécution de l'événement est simple :

TIME Person::timeUnionPeriod2Event()
{
return union_period2_change;
}

void Person::UnionPeriod2Event()
{
if (union_status == US_FIRST_UNION_PERIOD1)
{
union_status = US_FIRST_UNION_PERIOD2;
}
union_period2_change = TIME_INFINITE;
}

Tables.mpp

Modgen fournit une fonction de totalisation croisée très puissante et souple pour communiquer les résultats du modèle. La programmation de chaque tableau de sortie ne requiert habituellement que quelques lignes de code. RiskPaths ne contient qu'un seul fichier de tableaux qui regroupe les déclarations de tous ses tableaux de sortie. Cependant, pour des modèles plus détaillés, il est conseillé de regrouper les déclarations de tableau par groupes de comportement.

La syntaxe de base pour les tableaux est présentée à la figure 6. Les deux éléments centraux d'une déclaration de tableau sont les dimensions de classification de capture (qui définissent quand un acteur entre dans une cellule et quand il en sort) et la dimension d'analyse (qui enregistre ce qui se passe pendant que l'acteur est dans la cellule). Habituellement, les dimensions de classification sont des intervalles d'âge ou de temps (p. ex.fécondité par âge), des états (p. ex.fécondité selon la situation d'union) ou une combinaison des deux. Modgen ne limite pas le nombre de dimensions.

La dimension d'analyse peut contenir de nombreuses expressions, qui peuvent être des états ou des états dérivés. Modgen fournit une liste très utile de fonctions d'état dérivé spéciales qui enregistrent, par exemple, le nombre d'occurrences de certains événements, le nombre de changements dans les états, ou la durée de la présence de l'acteur dans les états. Deux concepts particulièrement utiles sont le motclé unit et la fonction d'état dérivé duration(). Le premier, c'estàdire unit, enregistre le nombre d'acteurs qui entrent dans une cellule d'un tableau, tandis que duration() enregistre le temps total qu'un acteur passe dans la cellule.

Les tableaux peuvent contenir des critères filtres pour définir si et dans quelles conditions les caractéristiques de l'acteurs seront enregistrées. Le meilleur moyen de comprendre les concepts de tableaux de Modgen consiste à examiner des exemples concrets tels que celui qui suit. Comme la richesse du langage de tableau de Modgen dépasse le cadre du présent chapitre, vous êtes invité à consulter le guide du développeur de Modgen.

Figure 6 : Syntaxe des tableaux

table actor_name table_name//EN table label
[filter_criteria]
{
dimension_a *//EN dimension label
.
{
analysis_dimension_expression_x,//EN expression label
.
}
* dimension_n//EN dimension label
.
};

Tableau 1 : Espérance de vie

Le premier exemple de tableau contient les valeurs sommaires de notre simulation et ne possède aucune dimension, autrement dit les cellules s'appliquent à l'ensemble de la population sur l'entièreté de la période de simulation. Nous utilisons le motclé unit de Modgen, qui compte le nombre d'acteurs qui entrent dans une cellule d'un tableau (dans notre exemple, la simulation proprement dite) et la fonction duration() de Modgen qui additionne le temps que les acteurs passent dans cette cellule (dans notre exemple, le nombre total d'années vécues par tous les acteurs dans la simulation). L'âge moyen au décès de tous le acteurs dans la simulation est alors obtenu en divisant duration() par unit. En ce qui concerne les déclarations des paramètres, les commentaires placés dans le code sont utilisés comme étiquette dans l'application. (Notons que dans la déclaration de tableau qui suit, la partie  « decimals=3 » du commentaire est utilisée pour déterminer le nombre de décimales dans les chiffres du tableau; cette partie du commentaire n'est pas transportée jusqu'à l'étiquette utilisée dans le rapport.)

table Person T01_LifeExpectancy //EN 1) Life Expectancy
{
{
unit, //EN Total simulated cases
duration(), //EN Total duration
duration()/unit //EN Life expectancy decimals=3
}
};

Tableau 2 : Table de mortalité

Dans le deuxième tableau, nous enregistrons la population selon l'âge. Pour la sortie par âge, nous utilisons integer_age comme dimension du tableau.

table Person T02_TotalPopulationByYear//EN Life table
{
//EN Age
integer_age *
{
unit,//EN Population start of year
duration()//EN Average population in year
}
};

unit et duration() font maintenant référence au nombre d'entrées et aux durées, respectivement, dans les intervalles d'âge d'un an. Donc, unit compte les acteurs présents au début de chaque année, tandis que duration() fait référence à la population moyenne durant l'année.

Tableaux 3 et 4 : Fécondité par âge

En plus du mot-clé unit et de la fonction d'état dérivé duration(), des états et un ensemble d'autres fonctions d'état dérivé peuvent être utilisés dans les tableaux. Si l'on utilise un état sans fonction, Modgen enregistre le changement de l'état pendant qu'il est dans une cellule particulière, c'est-à-dire la valeur de l'état au moment de la sortie de la cellule moins la valeur de l'état au moment de l'entrée dans la cellule.

Par conséquent, l'expression transitions(parity_status, PS_CHILDLESS, PS_PREGNANT) /duration() enregistre la fécondité (par âge) comme étant le nombre d'événements de naissance divisé par le nombre moyen de femmes par année d'âge.

La deuxième expression est utilisée pour calculer le taux réel, c.-à-d. le nombre d'événements de naissance par durée de l'exposition. Une femme est exposée au risque d'une première grossesse quand elle est sans enfants. Nous divisons donc le nombre d'événements par le terme  « duration( parity_status, PS_CHILDLESS ) ».

La dimension du tableau est l'âge en années complètes. Comme la fécondité est nulle jusqu'à l'âge de 15 ans et est très faible après 40 ans, les périodes d'âge avant 15 ans et après 40 ans ne sont pas subdivisées. Nous définissons donc une partition AGE_FERTILEYEARS qui est utilisée dans l'instruction self_scheduling_split qui définit la dimension du tableau.

partition AGE_FERTILEYEARS //EN Fertile age partition
{
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40
};

table Person T03_FertilityByAge//EN Age-specific fertility
{
//EN Age
self_scheduling_split(age,AGE_FERTILEYEARS) *
{
//EN First birth rate all women decimals=4
transitions(parity_status, PS_CHILDLESS, PS_PREGNANT) / duration() ,

//EN First birth rate woman at risk decimals=4
transitions(parity_status, PS_CHILDLESS, PS_PREGNANT) / duration( parity_status, PS_CHILDLESS )
}
};

Le tableau 4 produit les taux de premières naissances pour les tranches d'âge de 2,5 ans utilisées pour la paramétrisation. Nous ajoutons également une autre dimension, à savoir la situation d'union; nous obtenons ainsi les valeurs simulées des paramètres du modèle.

table Person T04_FertilityRatesByAgeGroup //EN Fertility rates by age group
[parity_status == PS_CHILDLESS]
{
{
parity / duration() //EN Fertility decimals=4
}
* self_scheduling_split(age, AGEINT_STATE)//EN Age interval
* union_status//EN Union Status
};

Tableau 5 : Fécondité de la cohorte

Le tableau 5 calcule deux mesures de fécondité de la cohorte--l'âge moyen à la première grossesse et l'absence d'enfants. Pour obtenir l'âge au moment de la grossesse, nous utilisons la fonction d'état dérivé value_at_transitions(parity_status, PS_CHILDLESS ,PS_PREGNANT, age) qui produit la valeur d'un état (âge) au moment d'une transition spécifique à un autre état, nommément quand parity_status change de PS_CHILDLESS à PS_PREGNANT.

table Person T05_CohortFertility//EN Cohort fertility
{
{
//EN Av. age at 1st pregnancy decimals=2
value_at_transitions(parity_status,PS_CHILDLESS,PS_PREGNANT,age)/
parity,

//EN Childlessness decimals=4
1 - parity / unit,

//EN Percent one child decimals=4
parity / unit
}
};

Tableau 6 : Grossesses selon la situation d'union et l'ordre de l'union

Dans le tableau 6, nous utilisons un exemple de filtre qui déclenche la simulation d'une personne exactement à l'entrée dans un état, ici à la survenue de la grossesse. Nous nous intéressons à la situation d'union à la première grossesse. Notons que ce filtre exclut aussi les femmes qui demeurent sans enfants.

table Person T06_BirthsByUnion //EN Pregnancies by union status & order

[trigger_entrances(parity_status, PS_PREGNANT)]

{

{

unit //EN Number of pregnancies

}

*union_status+ //EN Union Status at pregnancy

};

Tableau 7 : Risques de formation d'une première union

Comme le tableau 4, ce tableau reproduit un tableau de paramètres. Bien qu'un tableau de sortie de ce genre ne contienne aucune information (si la taille d'échantillon est suffisamment grande, il devient très proche des paramètres originaux du modèle), il est utile pour valider le modèle et pour évaluer la variabilité Monte Carlo.

table Person T07_FirstUnionFormation//EN First union formation
[parity_status == PS_CHILDLESS]
{
//EN Age group
self_scheduling_split(age, AGEINT_STATE) *
{
//EN First union formation risk decimals=4
entrances(union_status, US_FIRST_UNION_PERIOD1)
/ duration(union_status, US_NEVER_IN_UNION)
}
};

Groupement des tableaux de sortie

Comme les paramètres, les tableaux de sortie peuvent être groupés en vue de présenter les résultats de manière plus significative. Dans l'application RiskPaths, nous distinguons trois groupes de tableaux : les tableaux de mortalité, les tableaux de fécondité et les tableaux de situation d'union.

table_group TG01_Life_Tables//EN Life tables
{
T01_LifeExpectancy, T02_TotalPopulationByYear
};

table_group TG02_Birth_Tables//EN Fertility
{
T03_FertilityByAge, T04_FertilityRatesByAgeGroup, T05_CohortFertility
};

table_group TG03_Union_Tables//EN Unions
{
T06_BirthsByUnion, T07_FirstUnionFormation
};

Tracking.mpp

Le bloc de code track{} définit la liste des états qui doivent être enregistrés longitudinalement pour produire une sortie visuelle de BioBrowser. Cette commande est souvent placée dans des fichiers de tableaux. Dans notre modèle, cependant, nous avons décidé de coder un fichier Tracking.mpp distinct, puisque nous dépistons aussi les profils de risque calculés comme des états dérivés.

track Person
{
integer_age,
life_status,
age_status,
union_duration,
dissolution_duration,
unions,
parity_status,
union_status,
preg_hazard,
formation_hazard,
dissolution_hazard
};

Le fichier comprend aussi la déclaration de trois états dérivés. Nous avons utilisé le concept d'état dérivé pour calculer les trois principaux taux de risque (grossesse, formation d'une union et dissolution d'une union) pour la sortie de BioBrowser. Nous le faisons à titre d'exemple uniquement, car tous les taux de risque, ventilés selon l'ordre de l'union, sont calculés dans les fonctions d'événement.

La déclaration des états dérivés « preg_hazard », « formation_hazard » et « dissolution_hazard » sont également de bons exemples de syntaxe pour construire des états dérivés à partir d’états simples à l’aide des conditions « if-else ».

actor Person
{
//EN Pregnancy hazard
double preg_hazard = (parity_status == PS_CHILDLESS) ?
AgeBaselinePreg1[age_status] *
UnionStatusPreg1[union_status] : 0;

//EN Union formation hazard
double formation_hazard = (union_status != US_NEVER_IN_UNION
&& union_status != US_AFTER_FIRST_UNION) ? 0 :
((union_status == US_NEVER_IN_UNION) ?
AgeBaselineForm1[age_status] :
SeparationDurationBaseline[dissolution_duration] );

//EN Union dissolution hazard
double dissolution_hazard = (union_status != US_FIRST_UNION_PERIOD1 && union_status != US_FIRST_UNION_PERIOD2
&& union_status != US_SECOND_UNION) ? 0 :
((union_status == US_SECOND_UNION) ?
UnionDurationBaseline[UO_SECOND][union_duration] :
UnionDurationBaseline[UO_FIRST][union_duration]);
};

Fichier de traduction de langue RiskPathsFR.mpp

Ce fichier .mpp existe uniquement pour les modèles qui sont définis dans Modgen comme étant multilingues (ce qui, dans le cas de RiskPaths, signifie anglais et français). Toutefois, même dans un modèle bilingue, l'une des langues, l'anglais ou le français, est encore considérée comme étant la première langue ou langue primaire du modèle. L'anglais a été choisi comme langue primaire au moment où RiskPaths a été développé et, par conséquent, le fichier RiskPathsFR.mpp contient essentiellement les traductions des étiquettes et des notes du modèle dans l'autre langue, c'estàdire le français. (Si la langue primaire originale de RiskPaths avait été le français, ce fichier de traduction aurait été appelé RiskPathsEN.mpp et il aurait contenu les traductions en anglais des étiquettes et des notes du modèle.)

Normalement, toutes les notes et étiquettes sont entrées sous forme de commentaires de code dans les fichiers sources .mpp en utilisant la langue primaire du modèle, comme nous l'avons illustré à plusieurs occasions dans les exemples qui précèdent. Les traductions correspondantes sont subséquemment placées dans ce fichier .mpp distinct.

Un outil logiciel  « Translation Assistant » d'appoint est disponible dans Modgen pour faciliter le processus de traduction en vérifiant l'ensemble complet de termes qui doivent être traduits et en ajoutant des versions uniques des entités traduites dans le fichier .mpp approprié (RiskPathsFR.mpp dans notre exemple).

Partagez cette page
Date de modification :

Introduction à Modgen

Version PDF (PDF, 497.57 Ko)

Introduction

Modgen a été conçu pour faciliter la programmation de modèles de microsimulation. Son but est d'enlever autant que possible les obstacles à la création d'un modèle de microsimulation. Voici quelques uns de ces obstacles.

  • Programmation de l'interface
  • Documentation
  • Programmation de l'engin de simulation
  • Bilinguisme

Ces obstacles sont tous supprimés par l'utilisation de Modgen puisque Modgen fournit l'interface et l'engin de simulation, est bilingue et facilite la documentation. Évidemment, cette liste n'est pas exhaustive et n'est donnée qu'à titre d'exemple.

Une conséquence de l'utilisation de Modgen pour créer un modèle de microsimulation est la non nécessité d'engager un programmeur pour programmer le modèle. En effet, Modgen s'occupe de la majorité de la programmation. Ce qu'il reste est normalement suffisamment simple pour qu'une personne n'ayant pas de connaissances approfondies en programmation puisse le faire. Il se peut même que le fait d'avoir des connaissances approfondies en programmation soit nuisible puisque le concepteur doit alors se limiter à un style de programmation qui sera comprise par l'analyste responsable du modèle.

Aussi, il n'est pas nécessaire pour utiliser Modgen de comprendre en détail ce qu'il fait. Toutefois, il peut être utile d'avoir une idée générale de ce que fait Modgen. C'est ce que tente de faire le présent document.

Installation de Modgen

Il y a deux produits, et donc deux programmes d'installation, reliés à Modgen. Ces produits sont :

  • Composants préalables à Modgen 12
  • Modgen 12

Voici ce que chacun de ces produits contient ainsi qu'une description de leur utilité.

Composants préalables à Modgen 12

De façon générale, les Composants Préalables à Modgen 12 contiennent tout ce qui est nécessaire pour que les modèles fonctionnent sur une machine. Si un concepteur souhaite distribuer un modèle, il faut donc que les utilisateurs du modèle installent les Composants Préalables à Modgen 10 avant d'installer le modèle. Ce produit contient :

  • Licence pour l'utilisation des modèles Modgen
  • Documentation pour l'utilisateur des modèles Modgen : Cette documentation concerne les utilisateurs des modèles. Elle ne fournit aucune aide pour la création des modèles. De façon générale, il s'agit de l'information concernant l'interface des modèles. Cette documentation comprend :
    • Guide de l'interface visuelle de Modgen 12
    • Notes de publication des Composants Préalables à Modgen 12
  • Application Cleaner : Cette application nettoie les fichiers temporaires oubliés sur une machine lorsqu'une simulation d'un modèle échoue. Si la simulation termine avec succès, il ne reste aucun fichier temporaire. Elle est installée avec les Composants Préalables à Modgen 12 et est exécutée à chaque nouvelle session Windows. Il est également possible de la démarrer manuellement mais alors, il faut éviter de le faire lorsqu'une simulation est en cours.
  • Serveur automatisé de Modgen : Un composant permettant à un autre programme la lecture en l'enregistrement des fichiers des paramètres d'un scénario.
  • Composants préalables de Microsoft : Quelques fichiers fournis par Microsoft qui sont requis pour tourner un modèle Modgen.

Modgen 12

De façon générale, Modgen 10 contient ce qui est nécessaire au développement de modèles. Évidemment, Visual Studio 2015 ou 2017 est nécessaire et n'est pas inclus dans Modgen 12! Précisément, ce produit contient :

  • Les Composants Préalables à Modgen
  • Ce qui est nécessaire à la création d'un nouveau modèle : Cela inclut le pré-compilateur Modgen, la bibliothèque et des fichiers d'entête.
  • Documentation pour le concepteur de modèles : Cette documentation concerne les concepteurs de modèles. Elle fournit donc de l'aide concrète sur la création de modèles, la syntaxe à utiliser, etc. Cette documentation comprend :
    • Guide du concepteur de Modgen 12
    • Notes de publication de Modgen 12
  • Capacités d'intégration avec Visual Studio

Il y a trois composants principaux qui forment Modgen. Ces composants sont :

  • Pré-compilateur Modgen
  • Bibliothèque Modgen
  • Serveur automatisé

Les deux premiers composants sont utilisés ensemble pour créer des modèles et seront décrits dans le document. Le serveur automatisé, qui permet d'accéder aux fonctions de lecture et d'écriture de fichiers de paramètres, ne sera pas discuté dans le présent document.

En rappel, le schéma suivant illustre les liens entre les fichiers nécessaires à la création d'un fichier exécutable de modèle de simulation dans le cadre de l'application. Il présente aussi les entrées et les sorties dont a besoin le fichier exécutable du modèle.

Composants de Modgen
Description : Composants de Modgen

Le pré-compilateur Modgen prend le code source (fichiers mpp) et produit les fichiers C++ suivants :

  • actors.h
  • actors.cpp
  • tabinit.h
  • tabinit.cpp
  • model.h
  • model.rc
  • parse.inf

Ces fichiers, ainsi que la bibliothèque Modgen, sont compilés par le compilateur C++ pour créer un exécutable. Cet exécutable lit les fichiers .sce et .dat et produit des tableaux.

Notons que Modgen n'est pas indépendant de Visual Studio. Les concepteurs de modèles doivent avoir la version de Visual Studio correspondante afin de pouvoir créer les modèles (Visual Studio 2015 ou 2017 pour Modgen 12).

Pré-compilateur

Le pré-compilateur est l'exécutable « Modgen.exe ». Le langage Modgen dans lequel un concepteur écrit un modèle est une extension du langage C++. Avant d'être compilé, le code des modèles doit être transformés en code C++. C'est ce que fait le pré-compilateur. Il lit les fichiers .mpp contenant le code du modèle et crée les fichiers .cpp équivalents, en plus des fichiers spéciaux nécessaires à la création du modèle. De façon générale, le pré-compilateur Modgen a la responsabilité de comprendre le modèle de données du modèle voulu et de l'implanter. Voici une description plus précise de ce que fait Modgen, à l'étape de pré-compilation :

  • Vérifie que la syntaxe est correcte pour tout élément du langage Modgen. La syntaxe C++ sera par la suite vérifiée par le compilateur C++.
  • Vérifie que les fonctions essentielles comme « Simulation » sont présentes dans le code du modèle.
  • Comprend les acteurs et crée les classes en rassemblant toutes les déclarations des acteurs éparpillées dans les fichiers .mpp
  • Comprend les tableaux voulus et crée les classes pour les tableaux
  • Comprend les relations entre les états et les autres symboles (états dérivés, événements, tableaux) et crée le code nécessaire pour maintenir ces relations
  • Crée le code nécessaire pour mettre à jour le temps pour chaque acteur
  • Crée une structure interne permettant au modèle de créer un système d'aide du modèle au besoin et de façon autonome.

Notons que cette liste n'est pas exhaustive. Le pré-compilateur est appelé automatiquement lorsqu'un mode est compilé.

Bibliothèque

La bibliothèque de Modgen contient les éléments que tous les modèles ont en commun. Lors de la compilation, des liens seront faits avec la bibliothèque Modgen de façon à l'incorporer dans l'exécutable du modèle. De cette façon, chaque modèle est un exécutable indépendant. Entre autres, elle contient :

  • l'interface de tout modèle Modgen
  • l'engin de simulation
  • le générateur d'aide

Le langage C++ requiert quelques fichiers d'entête pour incorporer la bibliothèque dans un modèle. Ces fichiers sont installés avec Modgen. En plus de la bibliothèque de Modgen, il y a d'autres bibliothèques et fichiers d'entêtes de Microsoft qui sont fournis avec Visual Studio et incorporés dans le modèle.

Bilinguisme

La loi canadienne exige que toute application logicielle créée par un organisme du gouvernement du Canada soit bilingue, c'est-à-dire que le français et l'anglais soient traités également. Modgen étant une application logiciel créée à Statistique Canada, il se doit d'être bilingue. Toutefois, dans le cas de Modgen, il y a plus d'un niveau au bilinguisme requis. De fait, Modgen est une application qui permet de créer des applications. Il est donc nécessaire que Modgen soit bilingue, mais aussi qu'il permette de créer des applications bilingues.

Pré compilateur

Modgen lui-même est bilingue. Le français et l'anglais sont traités aussi également qu'il est possible de le faire. La langue choisie soit nécessairement être donnée en argument dans la ligne de commande du pré compilateur.

Exemple :

c:\Program Files\StatCan\Modgen 12\Modgen.exe -FR

En pratique, le pré compilateur Modgen est appelé lorsqu'un modèle est compilé. On peut changer la langue choisie de Modgen avec un utilitaire installé avec Modgen qui s'appelle Langue Modgen Language.

Modèles

Modgen contient tout ce qui est nécessaire pour que l'interface des modèles soit bilingue, c'est-à-dire en français et en anglais. De plus, il est possible et très simple pour les concepteurs de modèles d'utiliser d'autres langues que le français et l'anglais. Il suffit alors de traduire l'un des fichiers contenant toutes les chaênes de caractères de Modgen (ModgenEN.mpp, ModgenFR.mpp) et de l'inclure dans le modèle comme module.

Même si Modgen est bilingue, l'interface n'aura que la(les) langue(s) définie(s) dans le modèle. Pour obtenir le bilinguisme dans un modèle, il faut définir le modèle comme étant bilingue. Voici comment définir les langues utilisées au gouvernement du Canada :

// Voici les langues dans lesquelles le modèle peut être vu
languages
{
	EN,	// English
	FR	// Français
};

Il ne faut pas oublier que tout modèle distribué par le gouvernement du Canada doit être bilingue. Il se peut qu'il ne soit pas clair si un modèle est un logiciel ou un produit de données. Peu importe, puisque dans les deux cas, il doit être entièrement bilingue s'il est produit par un organisme du gouvernement du Canada.

Éléments d'un modèle Modgen

Modgen permet de créer deux types de modèles différents :

  • Modèles de cas : Un modèle de cas est un modèle dans lequel la simulation se déroule cas par cas. Un cas est alors typiquement constitué d'un acteur principal avec, au besoin, quelques acteurs secondaires formant son entourage. Toutefois, dans certains modèles, il est possible d'avoir plus d'un acteur principal par cas si, par exemple, un cas simule une famille. Le nombre de cas à simuler est défini comme paramètre de contrôle de l'exécution. Les modèles « LifePaths », « PopSim », et « Pohem » sont des exemples de modèles de cas.
  • Modèles basés sur le temps : Un modèle basé sur le temps est un modèle dans lequel est simulé une population, ensemble, pendant un certain temps. La durée de la simulation est alors définie comme paramètre de contrôle de l'exécution. Les modèles « CVMM » et « HIVMM » sont des exemples de modèles basés sur le temps.

Contenu d'un modèle

Les modèles de cas et les modèles basés sur le temps sont constitués de symboles Modgen. Ce sont ces symboles et les relations entre eux qui gèrent la simulation. Une courte description de chaque catégorie de symboles est donnée ici. Pour une description plus détaillez, veuillez vous référer au Guide du concepteur de Modgen 12.

Acteurs

Tout d'abord, les modèles Modgen simulent la vie d'un acteur. Un acteur peut être n'importe quelle entité que le concepteur de modèle souhaite simuler. Ce peut être une personne, un logement, un plan de pension, etc.

Les acteurs sont définis par leurs :

  • États
  • Événements
  • Fonctions
  • Crochets
États

Les états décrivent les caractéristiques de l'acteur. Il existe deux grandes catégories d'états dans un modèle Modgen :

  • États simples
  • États dérivés
États simples

Les états simples sont les états dont la valeur n'est pas maintenue automatiquement par Modgen. Plutôt, la valeur des états simples est modifiée dans le code créé par le concepteur de modèle. Les états simples ne doivent être modifiés qu'à l'intérieur d'un événement, ou d'une fonction appelée à l'intérieur d'un événement.

Exemple :

int age_int;	//FR Âge intègre

Les états simples peuvent avoir une valeur initiale. Afin de les distinguer des états dérivés, on assigne une valeur initiale à un état simple en utilisant des accolades.

Exemple :

int age_int = {0} ;	//FR Âge intègre
États dérivés

Les états dérivés sont les états dont la valeur est indiquée sous forme d'expression dans la déclaration. Modgen maintient la valeur de ces états tout au long de la simulation. Habituellement, ces états sont dérivés d'autres états, d'où leur nom.

Exemple :

//FR Année
MODELED_TIME modeled_year = COERCE(MODELED_TIME, year);

En plus des expressions simples comme dans l'exemple précédent, il existe également des fonctions que le concepteur de modèle peut choisir d'utiliser pour créer des états dérivés.

Exemple :

//FR Âge au début de l'année
int age_debut_annee = value_at_latest_change( annee, age_int);
Types

Généralement, les états sont déclarés de type :

  • Entier (int)
  • Réel (float ou double)
  • Logique (logical)
  • Temps (TIME)
  • Avec un type créé dans le modèle (classification, étendue, partition)
Événements

Les événements ont un rôle clé dans les modèles Modgen puisque c'est par l'exécution d'événements que la simulation est faite. Ces événements sont constitués d'une paire de fonctions :

  • fonction pour déterminer le temps de l'événement
  • fonction pour déterminer les conséquences de l'événement

Le temps des événements est mis à jour au besoin. Lorsque le temps doit être recalculé, Modgen évalue de nouveau la valeur de la fonction temps de l'événement. Modgen suppose que le temps de l'événement doit être recalculé lorsque :

  • un des états utilisés dans la fonction temps de l'événement a changé de valeur
  • l'événement a eu lieu.

La fonction temps de l'événement ne devrait pas affecter les acteurs. Cela implique que les états ne peuvent en aucun cas être modifiés à l'intérieur d'une fonction temps d'un événement. Le pré-compilateur Modgen veille à ce que ça soit respecté.

C'est tout le contraire pour la fonction de l'événement. La fonction qui détermine les conséquences de l'événement est en fait ce qui est exécuté lorsque l'événement a lieu. C'est à l'intérieur des fonctions d'événements que les états sont modifiés. Un état ne devrait jamais être modifié à l'extérieur d'un événement, ou d'une fonction appelée par la fonction de l'événement, une fois l'initialisation terminée. Modgen veille à ce que ça soit respecté.

Fonctions

Il est possible d'utiliser des fonctions membres d'un acteur pour généraliser une section de code qui sera utilisée dans un ou plusieurs événements. De façon générale, il est nécessaire de créer une fonction lorsqu'une partie de code sera réutilisée à plusieurs endroits. Dans un tel cas, l'utilisation d'une fonction simplifie la maintenance puisque lorsque le code doit être modifié, il ne doit être modifié qu'à un seul endroit. Ne pas utiliser une fonction dans ces cas là augmente le risque éventuel d'introduire des bogues. Parfois, on peut souhaiter utiliser une fonction même si le code n'est pas réutilisé, soit parce qu'il le sera éventuellement, soit afin d'obtenir plus de modularité.

En plus des fonctions créées par le concepteur du modèle, il existe des fonctions que tout acteur doit posséder. Il s'agit des fonctions « Start » et « Finish »

Fonction « Start »

La fonction « Start » doit être présente pour chaque acteur. Elle sera appelée une fois pour chaque acteur, lors de sa création. Elle contient l'initialisation de l'acteur, y compris l'initialisation faite par Modgen. Notons qu'un état initialisé dans la fonction « Start » n'affecte ni les tableaux, ni les états dérivés tels que « entrances() ». Pour cette raison, il vaut mieux faire ces initialisations dans la fonction « Start » et non dans la fonction qui crée l'acteur. Si le concepteur de modèle n'a aucune initialisation à faire et n'a pas inclus la fonction « Start », Modgen créera une fonction contenant simplement l'initialisation des états aux valeurs de défaut faite par Modgen.

Exemple 1 :

actor Personne	//FR Personne
{
	void Start();	//FR Initialise une nouvelle personne
};

void Personne::Start()
{
}

Exemple 2 :

actor Personne	//FR Personne
{
	//FR Commence Personne
	void Start( int nObs, logical lImmigrant, double dTempsDebut, logical lEnfant, Personne *prMere ); 
};  

/*NOTE(Personne.Start, FR)
	Cette fonction commence la personne.
*/
void Personne::Start( int nObs, bool bImmigrant, TIME tTempsDebut, bool bEnfant) 
{
	immigre_apres_recensement = bImmigrant;
	num_recense = nObs;

	ne_apres_recensement = bEnfant;

	time = CoarsenMantissa(tTempsDebut);
...
	vivant = TRUE;
	emigrant = FALSE;
   
	// Année 
	annee = (int) time;
};

Dans l'exemple précédent, les états « vivant » et « emigrant » auraient dê être initialisés à même leur déclaration. De façon générale, les états initialisés dans la fonction « Start » sont les états dont la valeur n'est pas constante, mais peut dépendre, par exemple, des valeurs données en argument à la fonction.

Fonction « Finish »

Il existe aussi une fonction « Finish » pour contenir tout ce qui doit être fait lorsqu'un acteur est détruit. Par exemple, on peut vouloir que tous les acteurs auxquels l'acteur est lié soient détruits également. Si le concepteur de modèle n'a rien de particulier à faire avant que l'acteur soit détruit et a omis la fonction « Finish », alors Modgen créera une fonction de base automatiquement. Notons que Modgen détruit tout lien aux autres acteurs lorsque la fonction « Finish » est appelée, sans toutefois appeler la fonction « Finish » de ces acteurs.

Exemple :

actor Personne	//FR Personne
{
	void Finish();	//FR Termine Personne 
};  

void Personne::Finish()
{
    // Vide pour le moment
}
Crochets

Les crochets permettent de relier des fonctions à des événements ou à d'autres fonctions. Cela permet de diviser un événement ou une fonction en différentes sections qui appartiennent à des modules différents.

En particulier, on utilise beaucoup les crochets avec les fonctions « Start » et « Finish » afin de faire l'initialisation qui se rapporte à un module à l'intérieur de ce module même. Par défaut, tous les crochets s'insèreront à la fin d'une fonction. Si on souhaite qu'ils soient tous insérés à un autre endroit, on peut le faire en définissant « IMPLEMENT_HOOK » à l'endroit approprié de la fonction.

Voici un exemple où les crochets s'inséreront au début de la fonction :

/* NOTE(Person.Finish,FR) 
	Fonction qui nettoie l'acteur, une fois qu'il a terminé.
*/
void Person::Finish()
{
	Person	*prChild = {NULL};
	int		 nIndex = {0};

	IMPLEMENT_HOOK();
...
	if ( tentative && sex == FEMALE ) 
	{
		mlChildren->FinishAll();
		mlChildrenAtHome->FinishAll();
		mlBiologicalChildren->FinishAll();
	}
}

Notons que dans le cas de la fonction « Finish », il fait plus de sens d'avoir les crochets au début de la fonction puisqu'à la fin de la fonction, les propriétés de l'acteur ne sont plus valides.

Il arrive aussi qu'on veuille insérer quelques crochets à un endroit différent des autres. On peut alors créer une fonction intermédiaire à laquelle se raccrochent les crochets, et appeler cette fonction au bon endroit.

Exemple :

actor Person	//FR Individu principal
{
	void Start( ...);	//FR Fonction qui lance l'acteur Personne
	void StartClockHere();	//FR Fonction fictive Start Clock

};

/* NOTE(Person.StartClockHere,FR) 
Fonction fictive qui permet d'initialiser l'horloge avant toutes 
les autres fonctions accrochées et fonctions dérivées.
*/
void Person::StartClockHere()
{
}

void Person::Start( ... )
{
...
	time = birth;
	StartClockHere(); 
...	
	year_of_birth = year;
	month_of_birth = month_of_year;
	day_of_birth = day_of_month;
...	
}

Dans cet exemple, la fonction « StartClockHere » sera exécutée immédiatement après que le temps ait été initialisé. Les autres crochets à la fonction « Start » ne sont exécutés qu'à la fin de la fonction. Ça leur permet d'utiliser les états de l'horloge tels que « year », « month », etc. pour initialiser d'autres états. La fonction « StartClockHere » ne contient pas de code, mais des crochets s'y rattachent :

actor Person	//FR Individu principal
{
	//FR Initialise l'horloge à la naissance de l'acteur
	void StartClock();	

	hook StartClock, StartClockHere;
};

C'est la fonction « StartClock », définie dans un autre module, qui contient le code qui initialise l'horloge et ses états, comme « year », « month », etc.

Ensembles d'acteurs

Les ensembles d'acteurs sont des collections d'acteurs maintenues dynamiquement par Modgen. Cela signifie que Modgen s'occupe de l'adhésion au groupe selon le critère fourni par Modgen. Les ensembles d'acteur peuvent être multidimensionnels. Dans ce cas, les dimensions sont constituées d'états des acteurs regroupés en ensembles. Pour chaque combinaison de valeur des dimensions, un sous-ensemble est créé. L'appartenance d'un acteur à un seul sous-ensemble est automatiquement maintenue par Modgen. Pour en savoir davantage sur les ensembles d'acteurs, vous pouvez vous référer au Guide du concepteur de Modgen.

Liens

Les liens définissent des relations entre acteurs de même type ou de type différents. Il peut y avoir des liens d'un acteur à un seul autre acteur, d'un acteur à plusieurs acteurs, ou de plusieurs acteurs à plusieurs acteurs. Dans tous les cas, les liens réciproques sont automatiquement créés et maintenus par Modgen. Cela implique que le code du modèle n'a qu'à assigner l'un des liens et le lien réciproque sera modifié pour refléter le changement.

Exemples de liens :

// Déclare le lien un-à-plusieurs pour l'appartenance à une famille 
link
	Person.lFamily	//FR Famille
	Family.mlMembers[]	//FR Membres de la famille 
;

// lien entre parents et enfants 
link 
	Person.mlChildren[]	//FR Enfants
	Person.mlParents[]	//FR Parents 
;

// lien entre la personne et son(sa) conjoint(e) 
link Person.lSpouse;	//FR Conjoint(e)

Pour de plus amples renseignements sur les liens, vous pouvez vous référer au Guide du concepteur de Modgen 12.

Paramètres

Les paramètres permettent à l'utilisateur du modèle d'avoir un certain contrôle sur la simulation. Les paramètres devraient être utilisés partout où le concepteur souhaite donner du contrôle à l'utilisateur du modèle. Le fait de permettre à l'utilisateur du modèle de préciser des hasards pour contrôler différents aspects de la simulation, par exemple, donne à l'utilisateur la possibilité d'explorer différents scénarios.

Il existe deux grandes catégories de paramètres :

  • paramètres
  • paramètres générés par le modèle
Paramètres

Il s'agit de la catégorie la plus fréquente. On utilise un paramètre lorsqu'on laisse à l'utilisateur le soin d'entrer une valeur. Les valeurs des paramètres se trouvent dans les fichiers .dat. L'utilisateur contrôle donc directement la valeur de ces paramètres.

Exemple :

parameters 
{
	//FR hazard total de mortalité (m total) 
	double MortHazard[MODELED_AGE][SEX];
};
Paramètres générés par le modèle

Il s'agit de paramètres qui doivent être dérivés, souvent à partir d'autres valeurs données en paramètres. Pour chaque paramètre généré par le modèle, il doit y avoir du code correspondant dans la fonction « PreSimulation » décrite à la section suivante.

Exemple :

parameters 
{
	//FR Hasards de mortalité résiduels 
	model_generated double 
		ResidualMortHazard[MODELED_AGE][SEX];
};

Tableaux

Les tableaux forment la sortie des modèles Modgen. Il existe deux types différents de tableaux :

  • tableaux : Les tableaux croisés d'un modèle génèrent des résultats agrégés d'une simulation.
  • tableaux d'utilisateurs : Ces tableaux sont mal nommés. Il ne s'agit pas ici des utilisateurs des modèles mais des utilisateurs de Modgen. Autrement dit, il s'agit des concepteurs de modèles! Les tableaux d'utilisateurs permettent aux concepteurs de modèle de créer du code qui calcule la valeur de chaque cellule. Pour chaque tableau d'utilisateur, du code doit être placé dans une fonction « UserTables » pour contrôler le contenu du tableau. Typiquement ce code lit et combine des valeurs de différents tableaux pour en créer d'autres.

Groupes de tableaux ou de paramètres

Il est possible de regrouper certains symboles en groupes. Ces groupes servent surtout à regrouper les symboles dans l'interface du modèle mais sont également décrits dans l'aide générée par Modgen du modèle. Les symboles qu'il est possible de grouper sont :

  • paramètres du modèle
  • paramètres générés par le modèle
  • tableaux et tableaux d'utilisateurs

L'appartenance d'un symbole à un groupe doit être précisée dans la déclaration du groupe. Notons qu'un groupe peut toujours contenir un autre groupe du même genre, ce qui permet de créer une hiérarchie.

Exemple d'un groupe de paramètres :

parameter_group DEMOGRAPHIE	//FR Paramètres démographiques
{
	HasardMortalite, HasardNatalite, AgeMaximal, ProbabiliteGarcon, VariationFecondite
};

Exemple d'un groupe de tableaux :

table_group TableauxDemographiques {	//FR Tableaux démographiques
    TauxNaissance,
    Population,
    Population5Ans
};

Types

Les symboles de type sont des symboles de support. Ils ne sont pas essentiels à la simulation puisqu'ils ne jouent aucun rôle précis dans le déroulement d'un modèle. Toutefois, ils sont partout puisqu'ils servent à définir d'autres symboles comme les états ou les paramètres. Ils servent également à donner des étiquettes aux tableaux. Il y a trois catégories de symboles de types :

  • Classifications
  • Étendues (« range »)
  • Partitions
Classifications

Une classification est un ensemble de niveaux ou de catégories avec leurs étiquettes.

Exemple :

classification LANGUE2 
{
	//FR francophone
	L2_FRANCO,
	//FR non francophone
	L2_NON_FRANCO
};
Étendues

Une étendue est un intervalle de nombres entiers.

Exemple :

range AGE_NATALITE {15, 49} ;	//FR Âge pour les taux de natalité
Partitions

Une partition est un ensemble de points limites d'une variable d'état continue (ou discrète).

Exemple :

//FR Groupes d'âge
partition GROUPE_AGE 
{ 
	5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 
};

Les descriptions présentées ici sont tirées du Guide du concepteur de Modgen 12. Vous pouvez vous y référer pour une description plus complète.

Déroulement d'un modèle

En plus des symboles contenus dans le modèle, le modèle est également constitué d'une série de fonctions générales qui en contrôlent le déroulement. Le déroulement présenté ici est celui d'un modèle de cas. Toutefois, la majorité de ce qui est présenté ici s'applique également aux modèles basés sur le temps. Notons que cette section ignore la question du traitement en parallèle qui est intégré à Modgen.

Lecture des paramètres

La première étape d'une simulation d'un modèle de cas ou basé sur le temps est la lecture des paramètres. Il n'est pas nécessaire de créer une fonction globale dans le code du modèle pour gérer la lecture ou la modification interactive des paramètres. Cela est fournit par Modgen.

Validation des paramètres

Modgen comprend des fonctions permettant au concepteur de valider et modifier les valeurs des paramètres fournies par l'utilisateur. Pour de plus amples renseignements sur ces fonctions, vous pouvez vous référer au Guide du concepteur de Modgen 12.

Pré-simulation

Après la lecture des paramètres vient la phase de pré-simulation. La phase de pré-simulation ne fera rien du tout à moins que le concepteur du modèle ait défini une fonction « PreSimulation » ou plus. Notons qu'il est possible de créer plus d'une fonction « PreSimulation » afin d'avoir plus de modularité. Dans une version future de Modgen, il sera même possible de préciser l'ordre d'exécution des fonctions PreSimulation d'un modèle.

Habituellement, les fonctions «PreSimulation » servent à calculer les paramètres générés par le modèle. À ce stade, il n'y a toujours qu'un seul fil d'exécution alors on peut modifier les paramètres générés par le modèle sans craindre les collisions entre différents fils d'exécution. De plus, il est impossible pour une fonction « PreSimulation » de modifier les acteurs, puisque les acteurs n'ont pas encore été créés.

Exemple :

parameters 
{
	//FR Hasards de mortalité totaux ( m total) 
	double MortHazard[MODELED_AGE][SEX];

	//FR Hasards de mortalité due à la maladie X de la population(mx)
	double MortHazardX[MODELED_AGE][SEX];

	//FR Hasards de mortalité due à la maladie C de la population(mc)
	double MortHazardC[MODELED_AGE][SEX];

	//FR Hasards de mortalité résiduels 
	model_generated double 
		ResidualMortHazard[MODELED_AGE][SEX];
};

void PreSimulation()
{	int nAge = {0};
	int nSex = {0};
	int nTime = {0};

	for (nAge = 0; nAge < SIZE(MODELED_AGE); nAge++)
	{
		for (nSex = 0; nSex < SIZE(SEX); nSex++)
		{
			// Calcul des hazards de mortalité résiduels 
			ResidualMortHazard[nAge][nSex] = 
				MortHazard[nAge][nSex] 
					– MortHazardC[nAge][nSex] 
					– MortHazardX[nAge][nSex];
		}
	}
}

Simulation

Une fois la pré-simulation terminée commence la phase de simulation. Le modèle doit absolument contenir une fonction « Simulation ». Typiquement, dans le cas d'un modèle de cas, il s'agira simplement d'une boucle appelant la fonction « CaseSimulation » pour chaque cas du modèle.

Exemple :

void Simulation()
{
	long  lCase = 0;
	
	for ( lCase = 0; lCase < CASES() && !gbInterrupted && !gbCancelled && !gbErrors; lCase++ )
	{
		StartCase(); 
		CaseSimulation(); 
		SignalCase();
	}
}

La fonction « Simulation » est plus compliquée pour un modèle basé sur le temps, parce qu'elle doit également créer la population de début. Elle doit également contenir la boucle d'événements contenue dans la fonction « CaseSimulation » présentée ci-bas pour les modèles de cas.

Notons que cette fonction est incluse dans les modèles créés par un des assistants de création d'un modèle de Modgen.

CaseSimulation

Dans un modèle de cas, Modgen n'exige pas une fonction appelée « CaseSimulation ». Par contre, l'utilisation d'une telle fonction simplifie le code. Cette fonction est responsable de la simulation d'un cas, et commence par créer l'acteur de départ du cas. C'est à l'intérieur de cette fonction que doit se trouver la boucle d'événements contrôlant la simulation du cas.

Exemple d'une boucle d'événements :

// boucle d'événements pour le cas actuel 
while ( !gpoEventQueue->Empty() ) 
{
	if ( gbCancelled || gbErrors)
	{
		// en cas d'erreurs, ferme le cas, détruis tous les acteurs 
		gpoEventQueue->FinishAllActors();
	}
	else 
	{
		// avance le temps des acteurs au temps de l'événement suivant	
		gpoEventQueue->WaitUntil( gpoEventQueue->NextEvent() );
	
		// exécute l'événement suivant 
		gpoEventQueue->Implement();
	}
}

Cette boucle est au cour de la simulation d'un modèle et ne devrait être modifié qu'avec grand soin. Notons d'ailleurs qu'elle est incluse dans les modèles créés par un des assistants de création d'un modèle de Modgen.

Dans les faits, cette boucle contrôle l'engin de simulation de Modgen. À l'intérieur de l'engin de simulation, il y a une queue d'événements qui maintient le temps d'attente de chaque événement du modèle. Cette queue est ordonnée de sorte que les événements sont exécutés en un ordre précis. L'engin de simulation à l'intérieur de Modgen exécute les événements dans l'ordre suivant :

  • l'événement ayant le temps le plus rapproché est exécuté en premier
  • Si les temps sont identiques, alors l'événement ayant la plus haute priorité est exécuté en premier
  • Si les priorités sont également identiques, alors les événements sont exécutés en ordre alphabétique
  • Si les noms sont aussi identiques, alors l'événement de l'acteur créé en premier dans la simulation est exécuté en premier.

Notons que si les noms sont identiques, alors il s'agit forcément d'événements d'acteurs différents puisque les événements ne se trouvent qu'une seule fois par acteur dans la queue d'événements.

PostSimulation

Au besoin, le concepteur de modèles peut définir une fonction « PostSimulation ». Si elle est définie, cette fonction est exécutée après la phase de simulation, mais avant la tabulation des données. Il est rare que cette fonction soit utile. Toutefois, si des variables globales sont utilisées dans le modèle, il peut être utile de les réinitialiser dans cette fonction. De cette façon, si l'utilisateur redémarre une simulation sans avoir fermé le modèle, les variables globales sont initialisées aux mêmes valeurs que lors de la première simulation.

Tabulation

La dernière phase produit les tableaux. Cette expression est toutefois trompeuse puisque la tabulation dans Modgen est faite au fur et à mesure. Il s'agit simplement ici d'enregistrer les tableaux produits pendant la simulation dans la base de données de sortie.

Toutefois, les tableaux d'utilisateurs sont calculés à cette étape avant d'être enregistrés dans la base de données. C'est à cette étape que sont exécutées les fonctions « UserTables » créées par le concepteur du modèle pour calculer les valeurs des cellules des tableaux d'utilisateur.

Partagez cette page
Date de modification :

Télécharger

Sommaire

Chacun des produits suivants a son propre assistant qui vous permet d'exécuter ou d'enregistrer le fichier exécutable correspondent. Lorsque vous serez prêt à exécuter ou à installer le produit, l'assistant vous demandera de choisir la langue d'installation. Ensuite, il vous présentera un contrat de licence que vous devez accepter afin de pouvoir continuer. Ensuite, l'assistant vous demandera de confirmer la destination, après quoi vous pourrez finalement installer le produit.

Ces produits ont été testés sur les systèmes d'exploitation Windows 7 SP1, Windows 8 et Windows 10. Les concepteurs de modèles doivent également avoir une copie de Microsoft Visual Studio 2015 ou 2017 (édition « Community », « Pro », ou « Enterprise »).

Si vous avez des difficultés avec l'installation, veuillez contacter statcan.microsimulation-microsimulation.statcan@statcan.gc.ca.

Modgen 12 (pour Visual Studio 2015 ou 2017)

Modgen 12 installe tout logiciel et documentation nécessaire à la modification de modèles existants ainsi qu’à la création de nouveaux modèles. Modgen 12 inclut aussi les fichiers qui sont dans les Composants Préalables à Modgen. Les machines sur lesquelles aucun développement n'aura lieu (les machines qui ne seront utilisées que pour exécuter des modèles) requièrent seulement les Composants Préalables à Modgen, et non Modgen-même. Visual Studio doit être installé avant l’installation de Modgen. La Configuration du système Modgen explique quelles options de Visual Studio 2015 et 2017 doivent être installées pour le fonctionnement de Modgen ainsi que la façon de configurer Modgen lorsqu’installé.

Téléchargez la version 12.1 de Modgen (EXE, 66.1 Mo)

Composants préalables à Modgen

Les Composants Préalables à Modgen installent tout ce qui est nécessaire pour exécuter un modèle créé avec Modgen. Cela inclut un fichier « .chm » (aide compilée) correspondent au Guide de l'interface visuelle Modgen.

Téléchargez la version 12 des Composants Préalables à Modgen (EXE, 51.7 Mo)

Exemple d'un modèle – RiskPaths 4

RiskPaths est un modèle de microsimulation simple, à temps continu, basé sur les cas et à risques concurrentiels; originalement développé pour étudier les changements de fertilité dans la Russie et la Bulgarie post-transitoires. Ce modèle est principalement utilisé comme outil d'enseignement, par exemple dans des cours à l'Ecole Doctorale Européenne de Démographie. Il démontre ce que la microsimulation peut ajouter à l'analyse d'histoire d'événements et comment les modèles de microsimulation démographiques peuvent être programmés efficacement avec le langage Modgen. RiskPaths a aussi, jusqu'à présent, été utilisé comme point de départ pour deux études; en France et au Canada. Le modèle sera installé dans un répertoire spécifique à l’utilisateur. Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle RiskPaths 4 (EXE, 1.39 Mo)

Exemple d'un modèle – IDMM 3

IDMM (« Infectious Disease Microsimulation Model ») est un modèle de microsimulation simple, à risques concurrentiels, basé sur le temps et avec temps continu, qui simule une maladie hypothétique se propageant à travers un réseau social d'hôtes. Le réseau social est construit au début de la simulation. Les interactions sociales sont ensuite modélisées comme des événements distincts d'interactions qui surviennent entre des paires d'hôtes à travers le temps. La maladie peut se propager d'un hôte infectieux à un hôte susceptible lors de ces interactions. Le réseau social change à travers le temps, parce que dans ce modèle un hôte en bonne santé a tendance à abandonner ses contacts malades et à les remplacer par de nouveaux contacts. Une fois infecté, un hôte entre dans une phase de latence, suivie par une phase d'infection puis par une phase d'immunité. À la fin de la phase d'immunité, l'hôte redevient susceptible. IDMM démontre comment de grandes populations avec interactions peuvent être modélisées efficacement dans le temps continu avec le langage Modgen. Le modèle sera installé dans un répertoire spécifique à l’utilisateur.  Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle IDMM 3 (EXE, 1.22 Mo)

Exemple d'un modèle – MicroParam 2

MicroParam est un modèle de microsimulation simple, à temps continu, basé sur les cas et à risques concurrentiels, qui illustre comment utiliser des microdonnées dans un paramètre afin de créer une population de départ. Cette technique est utile comme point de départ, ou lorsque le fichier de microdonnées est relativement petit. Pour de gros fichiers de microdonnées, utiliser un paramètre pour les microdonnées causera un manque de mémoire. Pour ces gros fichiers de microdonnées, utiliser un fichier binaire ou .csv est une meilleure technique. Le modèle sera installé dans un répertoire spécifique à l’utilisateur. Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle MicroParam 2 (EXE, 1.52 Mo)

Exemple d'un modèle – MicroBinary 2

MicroBinary est un modèle de microsimulation simple, à temps continu, basé sur les cas et à risques concurrentiels, qui illustre comment utiliser des microdonnées dans un fichier binaire pour créer une population de départ. Cette technique est complexe et ne devrait être utilisée que pour les fichiers de microdonnées trop gros pour être copié dans un paramètre. Le modèle sera installé dans un répertoire spécifique à l’utilisateur. Veuillez noter que les droits d’administrateurs ne sont pas requis pour l’installation de ce modèle.

Téléchargez le modèle MicroBinary 2 (EXE, 1.49 Mo)

BioBrowser

BioBrowser est une application compagne de Modgen qui permet d'examiner graphiquement les profils longitudinaux des entités de bas-niveau générées par les modèles Modgen. Des exemples de fichiers sont inclus afin de permettre l'exploration des capacités de BioBrowser sans installer un modèle Modgen.

Téléchargez la version 5.1 de BioBrowser (EXE, 1.11 Mo)

Anciennes versions (pour Visual Studio 2010)

Composants préalables à Modgen 11

Téléchargez la version 11 des Composants préalables de Modgen (EXE, 6.42 Mo)

Modgen 11.7.3

Téléchargez la version 11.7.3 de Modgen (EXE, 16.1 Mo)

Exemple d'un modèle – RiskPaths 3

Téléchargez le modèle RiskPaths 3.0 (EXE, 4.13 Mo)

Exemple d'un modèle – IDMM 2

Téléchargez le modèle IDMM 2.0 (EXE, 4.12 Mo)

Partagez cette page
Date de modification :

Pour commencer

Nouveau à microsimulation?

Qu'est-ce qu'une microsimulation dynamique en sciences sociales?

Cette discussion introduit la microsimulation en sciences sociales par une définition de ses concepts sous-jacents, son développement historique, ses points forts et inconvénients, et les situations dans lesquelles la microsimulation est une approche bien appropriée pour la simulation.

Approches de microsimulation

Cette discussion classifie les approches de microsimulation, concentrant sur pourquoi et comment les sociétés sont simulées avec un ordinateur. Il y a une section sur l'explication par opposition à la prédiction comme le but de microsimulation, et la différence est donnée entre les modèles de cohorte et les modèles de population, les modèles avec une population de départ transversale ou une population synthétique, les modèles avec le temps continu ou le temps discret, et les modèles orientés cas par opposition aux modèles orientés temps.

Nouveau à Modgen?

Introduction à Modgen

Cette discussion introduit le Modgen généralement, y compris ses composants principaux (pré-compilateur, bibliothèque, serveur automatisé), les éléments fondamentaux d'un modèle (acteurs, états, évènements, autre fonctions), et les entités principales pour l'entrée (les paramètres) et la sortie (les tableaux). Une vue d'ensemble de la bilinguisme et le déroulement d'un modèle sont provisés aussi.

Caractéristiques générales des applications Modgen - Exploration du modèle RiskPaths

Cette discussion fait un bref compte rendu des fondations d'un modèle relativement simple développé à des fins de formation pour étudier l'absence d'enfants. Puis elle donne des précisions sur comment la microsimulation est une approche appropriée. Enfin, il y a une introduction sur commet l'interface visuelle de Modgen peut être utilisée pour explorer le modèle.

Modgen et l'application RiskPaths du point de vue du Concepteur de modèles

Cette discussion se concentre sur les points essentiels pour construire le modèle à des fins de formation, RiskPaths, en utilisant Modgen dans l'environnement de développement « Visual Studio ». Elle suggère des modules séparés pour les comportements différents dans le modèle, et elle inclut le contenu possible de chaque module, avec des exemples du code.

Partagez cette page
Date de modification :

Microsimulation

Les modèles de microsimulation sont des modèles informatiques qui traitent l'information sur le comportement au niveau d'une entité telle une personne, une famille ou une entreprise. Ces modèles simulent d'importantes populations représentatives de ces entités de bas niveau afin de permettre de tirer des conclusions qui s'appliquent à un niveau d'agrégation supérieur, par exemple un pays. Ce type de modèle diffère des modèles agrégés dont les variables explicatives représentent déjà des propriétés collectives. Le taux national de chômage serait un exemple de variable explicative agrégée. La microsimulation constitue le meilleur moyen d'aborder certains types de problèmes de modélisation alors qu'une approche agrégée convient mieux à d'autres types de problèmes.

Statistique Canada a élaboré un certain nombre de modèles de microsimulation ainsi que des outils génériques qui en facilitent la construction. Certains de ces modèles et outils peuvent être téléchargés à partir des pages avec lesquelles un lien est établi ci-dessous. On a procédé à l'aide de ces modèles à diverses analyses, dont certaines ont été effectuées à Statistique Canada et d'autres, à l'extérieur.

Pour plus de renseignements sur les activités de microsimulation à Statistique Canada, cliquez sur l'un ou plusieurs des liens ci-dessous.

BD/MSPS

BD/MSPS est un modèle de microsimulation transversal détaillé d'individus et de familles. Il est fondé sur une base de données annuelle non confidentielle construite au moyen de diverses enquêtes et sources de données administratives. Il sert à l'élaboration de politiques et à l'analyse de programmes fiscaux et de transferts fédéraux et provinciaux ainsi qu'à l'analyse de questions liées à la répartition du revenu.

Archivée - LifePaths Archivée

LifePaths est un modèle longitudinal dynamique de microsimulation des individus et des familles. À l'aide d'équations sur le comportement fondées sur des données chronologiques, il crée des échantillons statistiquement représentatifs de cheminements de vie individuels complets. Il est utilisé pour analyser et élaborer des politiques gouvernementales ayant une composante essentiellement longitudinale, particulièrement celles qui, de par leur nature, exigent une évaluation au niveau de l'individu ou de la famille. Il peut aussi être utilisé pour analyser diverses questions sociales de nature longitudinale comme l'équité entre les générations et l'emploi du temps tout au long de la vie.

Le projet LifePaths est maintenant abandonné et n'est plus soutenu. Le personnel de Statistique Canada est en train d'élaborer de nouveaux outils de microsimulation socioéconomique dynamique. Plus de renseignements sur l'élaboration des outils peuvent être obtenus en envoyant un courriel à statcan.microsimulation-microsimulation.statcan@statcan.gc.ca.

Demosim

Demosim est un modèle de projections démographiques par microsimulation prenant pour point de départ le fichier de microdonnées du Recensement de la population du Canada. Il permet d'obtenir des projections d'un grand nombre de caractéristiques de la population pour différents échelons géographiques et scénarios d'accroissement.

Modèles de santé

Cette vue d'ensemble décrit les modèles de microsimulation dans le domaine de la santé, incluant les modèles développés par la division de l'analyse de la santé de Statistique Canada.

Modgen

Modgen est un outil général créé à Statistique Canada pour faciliter la construction et l'utilisation de modèles longitudinaux de microsimulation. La structure, les équations, la documentation et les résultats d'un modèle sont entrés dans Modgen au moyen d'un langage de haut niveau. Modgen construit ensuite un programme informatique entièrement fonctionnel doté d'une interface utilisateur qui met en oeuvre le modèle spécifié. BioBrowser, une application associée à Modgen, permet d'explorer visuellement les profils longitudinaux des entités simulées de bas niveau générées par les modèles Modgen.

Partagez cette page
Date de modification :

Modèles de santé

Microsimulation dans le domaine de la santé

La Division de l'analyse de la santé de Statistique Canada est un pionnier en matière de développement de modèles de simulation informatique d'importance stratégique dans le domaine de la santé. Ces modèles sont des outils qui servent à évaluer les répercussions des interventions et des politiques en matière de santé au niveau de la population.

En s'appuyant sur les riches bases de données de Statistique Canada, et s'appuyant sur le travail analytique des collègues et des collaborateurs universitaires, ces modèles de microsimulation représentent la population et des attributs comme les expositions aux facteurs de risque, les antécédents médicaux et les caractéristiques démographiques des Canadiens. Les modèles simulent les antécédents des personnes individuelles et tabulent les données sur les personnes de manière à produire des résultats agrégés pour la population dans son ensemble. Les modèles produisent des projections futures réalistes fondées sur les tendances actuelles et permettent aux utilisateurs de mettre à l'essai des « scénarios de simulation » se rapportant à diverses interventions éventuelles sur le plan des politiques et des programmes.

Modèle de santé de la population

Le Modèle de santé de la population (POHEM) est un modèle de microsimulation des maladies et des facteurs de risque dans lequel l'unité d'analyse de base est la personne. La simulation consiste à créer et à faire vieillir un grand échantillon de population représentative du Canada, une personne à la fois, jusqu'au décès. La trajectoire de vie de chaque personne simulée se déroule sous forme d'exposition à divers événements de la vie, comme le début et l'arrêt de l'usage du tabac, les changements de poids, et/ou de l'activité physique de loisir, ainsi que la manifestation de maladies comme l'arthrose, le diabète, les maladies cardiovasculaires, et la maladie démence.

Le POHEM combine des données provenant de sources très diverses, y compris des enquêtes transversales et longitudinales représentatives de la population à l'échelle nationale, les statistiques de l'état civil, et le recensement, ainsi que des paramètres extraits d'études publiées.

OncoSim

OncoSim, anciennement connu sous le nom de modèle de gestion du risque de cancer (CRMM), est un outil de simulation gratuit en ligne qui permet d'évaluer les stratégies de lutte contre le cancer. Combinant des données réelles avec des opinions d'experts et des renseignements tirés de la littérature publiée, OncoSim effectue des projections quant aux résultats de différentes stratégies sur les plans économique et de la santé, et leur attribue vingt-sept facteurs de risque tels que le tabagisme et le manque d'activité physique. OncoSim permet actuellement de modéliser en détail quatre sièges de cancer (sein, colorectal, poumon et col de l'utérus) ainsi que leurs programmes de dépistage associés, et offre des projections de haut niveau pour vingt-huit autres sièges de cancer. Cet outil unique et sophistiqué est utilisé par les décideurs de tout le Canada afin de mieux comprendre les répercussions et l'utilité des investissements dans la lutte contre le cancer.

OncoSim est dirigé et soutenu par le Partenariat canadien contre le cancer, et rendu possible par un financement de Santé Canada. L'élaboration du modèle est effectuée par Statistique Canada.

Modèles de maladies neurologiques

En 2009, la division de l'analyse de la santé à Statistique Canada a reçu du financement dans le cadre de l'Étude nationale sur la santé de la population des affections neurologiques pour développer un modèle de microsimulation pour projeter le futur fardeau économique et en matière de santé de sept principales maladies neurologiques : Maladie d'Alzheimer et autres démences, la paralysie cérébrale, l'épilepsie, la sclérose en plaques, la maladie de Parkinson / syndrome parkinsonien, traumatismes cérébraux nécessitant une hospitalisation et traumatismes de la moelle épinière nécessitant une hospitalisation. Ce modèle, appelé POHEM – affections neurologiques, projette l'incidence et la prévalence de ces principales maladies neurologiques, leurs répercussions sur la mortalité, l'espérance de vie, ainsi que les coûts. POHEM – affections neurologiques inclus aussi les répercussions sur les familles et les fournisseurs de soins.

Une sélection des projections à partir du modèle POHEM – affections neurologiques sont disponsibles dans la publication Établir les connexions : mieux comprendre les affections neurologiques au Canada, publiée par les Organismes caritatifs neurologiques du Canada.

Demosim

Demosim est un modèle de projections démographiques développé et maintenu à Statistique Canada qui utilise la technique de la microsimulation. Prenant pour point de départ le fichier de microdonnées du Recensement de la population du Canada de 2016, il vise à projeter de manière dynamique le devenir possible de la population à l'échelon des provinces, des territoires, des régions métropolitaines de recensement et d'une sélection d'unités géographiques plus fines selon plusieurs caractéristiques : âge, sexe, groupe de minorités visibles, lieu de naissance, statut des générations, identité autochtone, statut d'Indien inscrit, niveau de scolarité et participation au marché du travail, notamment. À cette fin, il simule des événements tels les naissances, décès, migrations et changements de niveau de scolarité et ce, en fonction de divers scénarios d'accroissement démographique. Il permet également la projection des familles et des ménages selon diverses caractéristiques.

Résultat d'un travail initié en 2004 qui se poursuit à ce jour, le modèle a servi depuis lors à effectuer des projections de la composition ethnoculturelle de la population canadienne, des projections des populations autochtones, des projections de la population active au Canada ainsi que diverses études analytiques. Le modèle sert également à la production de tableaux personnalisés spécifiés par les utilisateurs, de même qu'à combler certains besoins en données d'autres programmes de Statistique Canada.

Vue d'ensemble

Il est possible d'obtenir une vue d'ensemble de la version la plus à jour du modèle Demosim en consultant le document méthodologique intitulé Projections des populations et des ménages autochtones au Canada, 2016 à 2041 : aperçu des sources de données, méthodes, hypothèses et scénarios. Ce document permet d'en connaître davantage sur le contenu actuel de Demosim, notamment sur sa population de départ, son fonctionnement d'ensemble de même que sur les sources de données et méthodes ayant servi à la modélisation des diverses composantes qu'il comporte.

Contactez-nous

Pour plus de renseignements sur le modèle Demosim et les projections démographiques par microsimulation, veuillez contacter le service à la clientèle du Centre de démographie par courriel à statcan.demography-demographie.statcan@statcan.gc.ca.

Partagez cette page
Date de modification :

Formation

Matériel disponible

Une série d'ateliers a été présentée en 2008 à Statistique Canada. Le matériel provenant de ces ateliers est disponible comme matériel de référence. Veuillez noter que l'information contenue dans ces ateliers peut être désuet.

Téléchargez une copie des présentations des ateliers de Modgen (EXE, 20.21 Mo)

Sommaire des ateliers de formation

Présentation matérielle

  • Introduction à Modgen (1_IntroductionAModgen.ppt et 1_IntroductionAModgen.doc) : un aperçu des produits composants Modgen et des éléments majeurs des modèles Modgen, ainsi qu'un sommaire des étapes de l'exécution d'un modèle Modgen
  • Modgen - une vue d'ensemble (8_AtelierIMA2009_Partie1.ppt) : un aperçu des capacités puissantes de génération de modèles de Modgen (interface commune, maintien d'une queue d'événements, tabulation au fur et à mesure, documentation du modèle générée automatique, etc.) et des outils compagnons, ainsi qu'une description de chaque modèle connu créé en utilisant Modgen depuis sa création en 1994, ce qui démontre la grande diversité de modèles que Modgen est capable de produire
  • À l'intérieur des modèles Modgen (8_AtelierIMA2009_partie2.ppt) : un coup d'œil aux différentes entités ou blocs de construction (acteurs, états, événements, paramètres, tableaux, etc.) nécessaires et/ou disponibles pour construire un modèle, ainsi qu'une description de la séquence d'étapes ou phases qui surviennent lors de la simulation

Programmer avec Modgen

  • Syntaxe de base de Modgen (6c_BasicModgenSyntax_FR.ppt) : un aperçu de la syntaxe requise pour déclarer et/ou définir les symboles Modgen majeurs (types, paramètres, acteurs, états, événements, tableaux, etc.), avec un document connexe contenant un résumé de cette syntaxe ( Aide-mémoire syntaxe Modgen.doc)
  • Construction du modèle « RiskPaths » (8_AtelierIMA2009_Partie3.ppt et 8_AtelierIMA2009_Partie4.ppt) : une introduction au modèle de formation RiskPaths, incluant une explication du contenu du modèle, son interface utilisateur, et des échantillons de code pour créer des événements et générer des tableaux; ainsi qu'une section additionnelle contient une liste des étapes requises à l'ajout d'un événement au modèle original, avec des instructions pour mettre en œuvre chaque étape
  • L'art du débogage (7_Débogage.ppt) : un aperçu de trois catégories majeures de bogues (bogues de compilation, erreurs d'exécution et résultats inattendus), avec des exemples de bogues dans chaque catégorie et de méthodes pour identifier et résoudre ces bogues, et un répertoire connexe (Débogage) avec plusieurs exemples de code utilisés dans la présentation.
  • Conventions pour les modèles Modgen (1_Conventions pour les modèles Modgen.ppt et 1_Conventions_FR.doc) : un synopsis de différentes conventions de programmation (noms de symboles, mise en page, etc.) qui peuvent être utilisées dans les modèles Modgen afin de faciliter la compréhension du code du modèle et de minimiser le risque de générer certains types de bogues
  • Suivi (3_Suivi.ppt et 3_Suivi.doc) : une discussion indiquant comment définir le suivi pour un acteur et comment l'activer dans un scénario, avec des coûts potentiels associés au suivi

Environnement de développement

  • C++ pour les concepteurs de modèles (6b_C++ pour concepteurs.ppt) : un bref aperçu du langage de programmation C++, concentrant sur les concepts les plus utiles lors de la conception de modèles Modgen, avec un document connexe (Aide-mémoire C++.doc) contenant un résumé de ces commandes C++
  • Visual Studio 2008 pour les concepteurs de modèles (6a_Visual Studio 2005_FR.ppt) : un bref aperçu de l'environnement de développement Visual Studio 2008 dans le contexte de la conception de modèles Modgen, avec un document connexe (Aide-MémoireVS2008.doc) contenant un résumé de cet environnement

Composants des modèles Modgen

  • Atelier sur les tableaux (3_Tableaux.ppt) : une introduction aux techniques de tabulation utilisées dans les modèles Modgen, avec un document connexe (MesTableaux.mpp) contenant des exemples de tableaux
  • États dérivés (4_ÉtatsDérivés) : un aperçu des différentes catégories d'états dérivés disponibles aux concepteurs de modèles Modgen, incluant la syntaxe, la description et le type fournis pour chaque état dérivé et avec un exemple d'une utilisation d'un tel état; une présentation connexe (ExemplesÉtatsDérivésV2) fournit un questionnaire interactif d'utilisations d'états dérivés dans diverses situations
  • États mis à jour continuellement (5_États mis à jour continuellement.ppt) : une introduction aux états mis à jour continuellement, leurs forces et leurs faiblesses, avec une discussion des utilisations appropriées et inappropriées de ces états
  • Progression du temps dans un modèle Modgen(5_ProgressionTemps.ppt) : les façons d'avancer le temps dans les modèles Modgen basés sur les cas (populations sans interactions) et basés sur le temps (populations avec interactions), avec plusieurs échantillons de code

Diffuser un modèle

  • Diffusion d'un modèle Modgen (2_Diffusion d'un modèle Modgen.ppt): un synopsis des diverses considérations (licences, notes de publications, programmes d'installation, contenu des versions publiques, etc.) qui doivent être incorporés avant la diffusion d'un modèle Modgen
  • Gestion d'un modèle (2_Gestion d'un modèle.doc) : une description des diverses techniques qui peuvent être utilisées pour gérer efficacement le code de modèles Modgen et les différentes versions

Documentation d'un modèle

  • Documentation d'un modèle Modgen (2_Documentation d'un modèle Modgen.ppt et 2_Documentation d'un modèle.doc) : une discussion des aspects d'un modèle qui doivent être documentés, avec une indication des aspects pour lesquels la documentation est générée automatiquement par Modgen et ceux sur lesquels le concepteur devrait se concentrer (incluant des aspects spécifiques à documenter et comment le faire), avec un aperçu des considérations de traduction
  • Assistant de traduction Modgen (2_AssistantTraductionModgen.doc) : une description de l'Assistant de traduction qui facilite le processus de création de modèles multilingues, que le modèle ait déjà été traduit ou non

Théorie derrière Modgen

  • Obtention des temps d'événements à partir des hasards (6_Détermination du temps des événements à partir des hasards.ppt) : une présentation technique décrivant les calculs derrières l'obtention ou la dérivation des temps d'événements à partir d'hasards constants par morceaux
Partagez cette page
Date de modification :

Modgen (Générateur de modèles)

Modgen (Générateur de modèles) est un langage générique de programmation pour la microsimulation qui supporte la création, le maintien et la documentation des modèles de microsimulation dynamiques. Plusieurs types de modèles peuvent être créés, en temps continu ou en temps discret, avec des populations qui interagissent ou non.

Un concepteur de modèle n'a pas besoin de capacités de programmation avancées pour pouvoir utiliser Modgen. Cela est possible parce que Modgen cache les mécanismes de base tels que la file d'attente des événements et crée un modèle autonome avec une interface visuelle complète et une documentation détaillée du modèle. Les concepteurs de modèles peuvent donc concentrer sur le code spécifique au modèle, soit la déclaration des paramètres, des acteurs simulés et des événements.

La grande efficacité dans la programmation s'applique également aux résultats du modèle. La programmation d'un tableau de sortie ne requiert que quelques lignes de code. La tabulation est faite en temps continu et inclue un mécanisme d'estimation de la variation de Monte Carlo pour toute cellule de tout tableau.

Heading goes here

Pour commencer

Fournit des liens aux différentes introductions prévues pour les gens qui ne connaissent pas encore la microsimulation, ainsi que pour les gens qui conanissent la microsimulation mais ne connaisse pas encore Modgen.

Télécharger

Contient les applications logicielles essentielles à télécharger afin d'utiliser Modgen—Modgen (pour développer des modèles) et les Composants Préalables à Modgen (pour exécuter des modèles). L'application BioBrowser (afin de visualiser des cheminements de vie individuels) est également disponible ici, ainsi que les deux modèles exemples, l'un avec une population qui interagit et l'autre avec une population qui n'interagit pas.

Formation

Information sur les sessions de formation à venir ainsi que téléchargement de matériel provenant de plusieurs ateliers techniques sur Modgen offerts en 2008 (tels que des ateliers pour créer un modèle, pour distribuer un modèle, pour documenter un modèle)

Partagez cette page
Date de modification :

Annexe : Création d'une nouvelle base de données

Introduction

La création d’une base de données a lieu pendant l’exécution d’un modèle de simulation Modgen et, par conséquent, elle exige une certaine connaissance de l’environnement de simulation Modgen.  Le nom, l’emplacement et le contenu de ce fichier spécial sont régis par les règles suivantes.

  • Le nom du fichier, son emplacement dans la structure de répertoires de même que le nombre de durées de vie simulées contenues dans la base de données sont définis par un fichier de scénario et dans la fenêtre de dialogue « Scénario/Mise en place ».  Modgen produit les sorties du modèle en leur donnant le nom du scénario suivi d’un identificateur entre crochets qui indique le type de sortie Modgen, et d’une extension indiquant le type de fichier.  Pour le sortie de suivi en MS Access utilisée par le BioBrowser de Modgen: nom_scénario(trk).mdb.
  • Toutes les états que le navigateur pourrait afficher doivent d’abord être créées dans la fonction de suivi des variables de modèle qui doit être adjointe au code du modèle Modgen définissant le modèle de simulation.

Mise en place du scénario

La fenêtre de dialogue « Scénario/Mise en place » sert à définir la nature de chaque simulation.  Cette fenêtre est décrit en détail dans le Guide de l’utilisateur Modgen.  Il existe toutefois trois paramètres de contrôle principaux qu’on doit préciser pour créer une base de données adéquate à laquelle le navigateur de biographie accède.

  • Dans la fenêtre de dialogue Scénario/Mise en place/Généralités, cliquez Suivi dans Access MS. Ce paramètre indique au système Modgen qu’en plus des autres éléments de sortie précisés, un sortie de suivi en MS Access est nécessaire à l’exécution de ce modèle.
  • Pour les modèles fondés sur des cas,  choisissez le nombre de durées de vie dans la fenêtre de dialogue Scénario/Mise en place/Généralités.  En général, il est préférable d’entrer un petit nombre car toutes les durées de vie simulées seront incluses dans la base de données. La taille de ce fichier peut rapidement devenir très imposante selon le nombre de cas et d’états inclus. De plus, le suivi des variables ralentira considérablement la simulation.
  • Pour les modèles fondés sur le temps, choisissez le nombre d’unités de temps à simuler dans la fenêtre de dialogue Scénario/Mise en place/Généralités.

Le fichier exemple fournit avec la version 4.0.3, demo(trk).mdb, comprend 20 durées de vie simulées.  Il a été créé à partir du modèle LifePaths du Statistique Canada.

Suivi de variable de modèle Modgen

La fonction de suivi offerte par le langage Modgen détermine le type des acteurs à inclure dans le fichier de base de données ainsi que la liste des variables devant être analysées par BioBrowser.

La commande track doit figurer dans un des fichiers .mpp qui renferment le code Modgen servant à définir le modèle de simulation.  Si les analystes souhaitent changer le type des acteurs dont le suivi doit être assuré, ou modifier l’ensemble des états à produire, ils doivent recompiler le modèle.  Pour de plus amples renseignements, reportez-vous au Guide du programmeur Modgen.  Nous conseillons également à ceux et celles qui ne connaissent pas la syntaxe des commandes ou les concepts des exemples qui figurent ci-dessous de consulter ce guide.

Syntaxe de la commande “track”     

actor_name [filter] { state_or_link , ... , state_or_link } ;

Il importe de préciser qu’une seule définition de suivi est permise pour chaque acteur d’un modèle.  De plus, le filtre précise si les variables d’un acteur doivent être ajoutées ou non au fichier de base de données, et le moment de le faire.

Exemple:

Dans cet exemple, les variables qui décrivent la personne ne sont ajoutées au fichier de base de données que lorsque cette personne se marie ou se remarie (pour plus de détails sur la caractéristique dominante, reportez-vous au Guide de l’utilisateur Modgen).  Par conséquent, si la personne s’est mariée à 25 ans, a divorcé à 40 ans et s’est remariée à 50 ans, le fichier de base de données ne contiendrait que les renseignements se rapportant aux périodes 25-40 ans et de 50 ans à sa mort.  Un total de 9 variables décrivent les attributs de la personne et sont stockées dans le fichier de base de données.  Les deux derniers éléments de la définition du suivi (track) ne sont pas des variables, mais plutôt des liens avec d’autres personnes qui sont en rapport avec la personne qui nous intéresse.  Dans ce cas, la base de données contiendrait les renseignements associés aux 9 variables définies par la commande track et se rapportant au conjoint et aux enfants de la personne, si ces renseignements sont disponibles.

track Person
[ dominant || mar_status == MARRIED || mar_status == REMARRIED ]
{
      es_state,
      ed_level_ep,
      sex,
      dominant,
      employed,
      mar_status,
      marstat_legal,
      fte_earnings,
      children_at_home,
      lSpouse,
      mlChildren
};

Exemple:

Dans cet exemple, les variables de la date de naissance et du sexe d’un acteur enfant sont envoyées au fichier de base de données une fois que l’enfant fait partie de la famille (la caractéristique provisoire, tentative, est présentée dans le Guide de l’utilisateur Modgen).

track Child [ !tentative ]
{
      date_of_birth,
      sex,
      mlParents
};

Contenu de la base de données

Le fichier Microsoft Access produit par la simulation Modgen comprend une table de données appelée History ainsi que les dictionnaires suivants disposés hiérarchiquement.

ActorDic - Dictionnaire des acteurs
ActorStateDic - Dictionnaire des états suivis
ActorLinkDic - Dictionnaire des états de liaison
TypeDic - Dictionnaire des types d'état contenant un pointeur lié à un des dictionnaires indiqués ci-dessous.

Les dictionnaires de chaque type d'état sont les suivants :

SimpleTypeDic - Types d'état simples, par exemple nombre entier, nombre en double précision, nombre en virgule flottante.
LogicalDic - États logiques.
ClassificationDic et ClassificationValueDic - États de classification et les valeurs associées.
RangeDic - États de type plage.
LinkTypeDic - États de liaison.

Les dictionnaires qui comprennent des identificateurs sous forme de texte renferment un enregistrement pour chaque langue prise en charge par le modèle Modgen particulier, conformément aux indications du dictionnaire LanguageDic.

En outre, une table de versions de fichiers, appelée VersionInfo, indiquera la version du fichier de suivi.  Le BioBrowser utilise cette version pour conserver la compatibilité amont si la conception de la base de données de suivi est modifiée.

La table History renferme un enregistrement pour chaque état suivi à un moment précis.  Plus précisément, les champs utilisés par le navigateur sont : identificateur d’objet, temps, identificateur d’état et identificateur de valeur pour l’état en question.

Partagez cette page
Date de modification :