Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

les_scenarios [2015/09/09 21:59]
les_scenarios [2021/03/20 21:14] (Version actuelle)
Ligne 1: Ligne 1:
 +====== Les scénarios ======
 +
 +===== Généralité =====
 +
 +Lorsque l'on modélise un système avec des arbres de défaillances, il est souvent nécessaire de réaliser différentes variantes afin de tenir compte des évolutions de définition du système ou bien pour comparer différentes solutions technologiques.
 +
 +Arbre-Analyste propose une gestion de scénarios avancée qui permet de modifier de façon automatique la structure des arbres et les paramètres des évenements.
 +
 +===== Utilisation des scénarios =====
 +
 +Les scénarios sont décrits par l'intermédiaire d'un langage simplifié et spécifique aux arbres de défaillances.
 +
 +Voici deux exemples simples:
 +
 +<code python># Modification de la prise en compte des erreurs humaines
 +E("E002").Probabilite("ERREUR_HUMAINE")
 +E("E002").Description("Erreur lors du contrôle par un opérateur")
 +</code>
 +
 +Le scénario ci-dessus change le paramètre "Probabilité" de l'événement de base "E002" ainsi que sa description.
 +
 +<code python># Ne plus prendre en compte les défaillances du contrôle-commande
 +E("P012").Detacher("P009")
 +</code>
 +
 +Le scénario ci-dessus détache la porte "P012". De ce fait, toute la branche, à partir de cette porte, ne sera plus prise en compte lors des calculs.
 +
 +===== Syntaxe des scénarios =====
 +
 +Une instruction d'un scénario est constituée de deux parties:
 +
 +    - Un sélecteur qui permet d'identifier l'élément sur lequel on souhaite agir;
 +    - Les actions que l'on souhaite exécuter sur l'élément sélectionné.
 +
 +==== Le sélecteur ====
 +
 +Pour sélectionner un élément, il est nécessaire d'utiliser la fonction suivante:
 +
 +    - **E()**;
 +
 +Elle s'utilise en lui passant le nom de l'élément à sélectionner en paramètre.
 +
 +<code python># Exemple de sélection d'une porte dont le nom est CA_01
 +E("CA_01")
 +# Exemple de sélection de l’événement de base EH001
 +E("EH001")
 +</code>
 +
 +==== Les actions ====
 +
 +Les actions permettent de modifier un élément de l'arbre en passant par un sélecteur. Plusieurs actions peuvent être exécutées simultanément.
 +
 +=== Actions sur les événements: ===
 +
 +    - **Description()**      : permet de changer la description de l'événement;
 +    - **Etat()**      : permet de changer l'état d'un événement maison.     \\ Peut prendre les valeurs: "Vrai" et "Faux";
 +    - **Loi()**      : permet de changer le type de loi de probabilité d'un événement de base.     \\ Peut prendre les valeurs : "Exponentielle", "Probabilité" et "GLM";
 +    - **Lambda()**      : permet de changer le paramètre nommé du champ λ de l'événement;
 +    - **Mu()**      : permet de changer le paramètre nommé du champ μ de l'événement;
 +    - **Probabilite()**      : permet de changer le paramètre nommé du champ γ de l'événement;
 +    - **Mttr()**      : permet de changer le paramètre nommé du champ MTTR de l'événement;
 +    - **Alpha() **    : permet de changer le paramètre nommé du champ α de l'événement;
 +    - **Beta() **    : permet de changer le paramètre nommé du champ β de l'événement;
 +    - **Tau() **    : permet de changer le paramètre nommé du champ τ de l'événement;
 +    - **Teta() **    : permet de changer le paramètre nommé du champ θ de l'événement;
 +    - **Temps()**      : permet de changer le paramètre nommé du champ temps de l'événement.
 +=== Actions sur les portes: ===
 +
 +    - **Description()**      : permet de changer la description d'une porte;
 +    - **Logique()**      : permet de changer la logique booléenne d'une porte.     \\ Peut prendre les valeurs: "OU", "NON OU", "ET", "NON ET" et "K/N";    \\ Logique() prend un paramètre suplémentaire facultatif permettant de changer la valeur K d'une porte K/N.    \\ Exemple: E("P005").Logique("K/N", 5)
 +    - **Attacher()**      : permet d'attacher la porte sélectionnée sous une autre porte;
 +    - **Detacher()**      : permet de détacher une porte de l'arbre.
 +
 +==== Les commentaires ====
 +
 +Afin d'expliquer et de capitaliser les scénarios, les commentaires sont supportés. Deux types de commentaires existent:
 +
 +    - Les commentaires d'une seule ligne sont tout simplement précédés du caractères #;
 +    - Les commentaires multi-lignes sont entourés de trois ".
 +
 +<code python># Commentaire sur une seule ligne
 +
 +"""
 +Voici un commentaire
 +qui est écrit
 +sur plusieurs lignes
 +"""
 +</code>
 +
 +===== Utilisation avancée des scénarios =====
 +
 +Les scénarios sont réalisés par l'intermédiaire d'une version du langage Python simplifiée et sécurisée. De ce fait, il est possible d'utiliser toute la puissance de la syntaxe du langage [[wp>Python_|Python]].
 +
 +On peut, par exemple, utiliser des boucles:
 +
 +<code python># Changement de la probabilité des erreurs humaines.
 +# Événements à modifier : EH1, EH2, EH3, EH4, EH5
 +for e in ("EH1","EH2","EH3","EH4","EH5"):
 +    E(e).Probabilite("EH_AVEC_CONTROLE")
 +</code>
 +
 +On peut aussi utiliser des variables:
 +
 +<code python># Changement de la probabilité des erreurs humaines.
 +# Événements à modifier : EH1 à EH100 soit 100 évènements de base
 +# Initiation d'une variable
 +compteur = 1
 +# On boucle afin de traiter les 100 évènements
 +while compteur < 101:
 +    # Reconstitution du nom de l'élément à partir du compteur
 +    nom = "EH%i" % compteur
 +    # On traite chacun des évènements
 +    E(nom).Probabilite("EH_AVEC_CONTROLE")
 +    # On incrémente la variable afin de traiter l'évènement suivant
 +    compteur = compteur + 1
 +</code>
 +
 +Voici un exemple pour attacher et pour détacher un ensemble de portes:
 +
 +<code python># On liste dans une variable l'ensemble des portes à attacher
 +# avec le nom de la porte "parente" ("PORTE A ATTACHER", "PORTE PARENTE")
 +listePortes = (
 +                ("P002", "P053"),
 +                ("P064", "P063"),
 +                ("P072", "P070"),
 +                ("P132", "P128"),
 +                ("P152", "P134"),
 +                ("P210", "P200")
 +              )
 +
 +# Rattacher chacune des portes à sa porte "parente"
 +# On créé une boucle afin de traiter chacune des portes
 +for porte, parent in listePortes:
 +    E(porte).Attacher(parent)
 +
 +# Détacher chacune des portes
 +# On créé une boucle afin de traiter chacune des portes
 +for porte, parent in listePortes:
 +    E(porte).Detacher(parent)
 +</code>