Pour réaliser un plan de simulations, il faut :
- Ecrire un fichier de description du plan, en suivant les directives de la page 'Les plans d'expérience' ;
- Lire et interpréter ce fichier en préambule de la série d'exécution des simulations. A cette fin, on ajoutera dans la ligne de commande une option -EXPE, de la manière suivante :
./main ..... -EXPE <fichier>où <fichier> est le fichier de description du plan d'expérience.La présence de cette option (comme c'est aussi le cas pour les autres composants de la ligne de commande) doit être d'une part reconnue et d'autre part exploitée par le programme principal de l'application, la fonction main(...).
La reconnaissance est faite automatiquement par la partie générale, ParseMainArguments(), définie dans BD, de la fonction App_ParseMainArguments(). Cette fonction est le premier service invoqué dans la fonction main(...). La rencontre de l'option '-EXPE' provoque la création d'une instance de la classe FactorialDesignOfExperiment. Cette classe restera unique, puisqu'une seule spécification 'FED' doit être écrite dans le fichier.
L'enchaînement des simulations est provoqué, dans la fonction main(...), par l'adressage itératif du message prédéfini NextSimulationSettings à l'instance de FactorialDesignOfExperiment. Ce service établit la situation initiale et le contexte de la prochaine simulation. L'itération s'arrête quand NextSimulationSettings s'aperçoit que toutes les modalités du plan d'expérience ont été traitées.
L'instance de FactorialDesignOfExperiment est renvoyée par l'appel à la fonction globale prédéfinie GetDesignOfExperiment.
Le codage proposé ci-dessous, et généré par défaut par l'interface Solfege, présente une boucle d'itération compatible avec l'absence de l'option '-EXPE' dans la ligne de commande. Puisqu'on est alors dans le cas d'une simulation isolée, on donne la valeur 1 au nombre de répétitions à effectuer et on stoppe immédiatement l'itération en donnant la valeur vrai à sa variable de contrôle (isExpeOver).
Avant de débuter l'itération, on lit une (et donc une seule) fois le fichier des paramètres du système (par ParseParameterFile). C'est ensuite NextSimulationSettings qui surchargera la valeur des paramètres mis en jeu dans le plan d'expérience, les autres restant constants. Les structures allouées à cette étape (les instances de la classe Parameter) sont désallouées au sortir de la boucle d'itération (DeleteParameters). On fait de même pour les structures dédiées à la mise en oeuvre dun plan d'expérience (DeleteExpeSpecifications).
Le corps de l'itération consiste alors seulement à lire et exploiter les quatre autres fichiers déclaratifs. Pour assurer la rémanence des paramètres, il ne faut pas inscrire dans le fichier des directives la désallocation des paramètres.
int main (int argc, char* argv[]) { App_ParseMainArguments(argc, argv); ParseParameterFile(argv[1]); int nbRepl = 1; FactorialDesignOfExperiment* pFEDS = GetDesignOfExperiment(); if(pFEDS) { //pFEDS->Display(); } Boolean isExpeOver = FALSE; while(! isExpeOver) { nbRepl = 1; // default value if no FEDS if(pFEDS) nbRepl = pFEDS->NextSimulationSettings(); if(! pFEDS || (nbRepl < 0)) //no FEDS or FEDS is over isExpeOver = TRUE; for(int i=0;i<nbRepl;i++) { InitSimulation(); ParseSimulationFile(argv[2]); ParseOutputSpecFile(argv[3]); ParseStructureFile(argv[4]); ParseDirectiveFile(argv[5]); } } DeleteParameters(); DeleteExpeSpecifications(); return 0; }