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:

# 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")

Le scénario ci-dessus change le paramètre “Probabilité” de l'événement de base “E002” ainsi que sa description.

# Ne plus prendre en compte les défaillances du contrôle-commande
E("P012").Detacher("P009")

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:

  1. Un sélecteur qui permet d'identifier l'élément sur lequel on souhaite agir;
  2. 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:

  1. E();

Elle s'utilise en lui passant le nom de l'élément à sélectionner en paramètre.

# 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")

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:

  1. Description() : permet de changer la description de l'événement;
  2. Etat() : permet de changer l'état d'un événement maison.
    Peut prendre les valeurs: “Vrai” et “Faux”;
  3. Loi() : permet de changer le type de loi de probabilité d'un événement de base.
    Peut prendre les valeurs : “Exponentielle”, “Probabilité” et “GLM”;
  4. Lambda() : permet de changer le paramètre nommé du champ λ de l'événement;
  5. Mu() : permet de changer le paramètre nommé du champ μ de l'événement;
  6. Probabilite() : permet de changer le paramètre nommé du champ γ de l'événement;
  7. Mttr() : permet de changer le paramètre nommé du champ MTTR de l'événement;
  8. Alpha() : permet de changer le paramètre nommé du champ α de l'événement;
  9. Beta() : permet de changer le paramètre nommé du champ β de l'événement;
  10. Tau() : permet de changer le paramètre nommé du champ τ de l'événement;
  11. Teta() : permet de changer le paramètre nommé du champ θ de l'événement;
  12. Temps() : permet de changer le paramètre nommé du champ temps de l'événement.

Actions sur les portes:

  1. Description() : permet de changer la description d'une porte;
  2. 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)
  3. Attacher() : permet d'attacher la porte sélectionnée sous une autre porte;
  4. 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:

  1. Les commentaires d'une seule ligne sont tout simplement précédés du caractères #;
  2. Les commentaires multi-lignes sont entourés de trois “.
# Commentaire sur une seule ligne
 
"""
Voici un commentaire
qui est écrit
sur plusieurs lignes
"""

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 Python.

On peut, par exemple, utiliser des boucles:

# 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")

On peut aussi utiliser des variables:

# 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

Voici un exemple pour attacher et pour détacher un ensemble de portes:

# 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)