<!-- mailto joanna.akrouche@hds.utc.fr -->
#### Paco Pompeani et Maylis de Talhouet
# Compte rendu TP1 - Blocs digrammes de Fiabilité
## Objectifs
Le but de ce TP était d'évaluer des paramètres de sûreté de fonctionnement de différentes architectures. Pour cela nous avons utilisé fiabilipy, une librairie python développée par des UTCéens.
Durant le TP, nous avons modélisé deux architectures afin de les comparer et proposer une troisième architecture.
### Architecture 1
#### Modélisation de l'architecture proposée

Cette architecture est en parallèle - série. C'est une série de composants en parallèle dedans.
#### Programme permettant la modélisation avec Fiabilipy
``` python
#Création des composants
hba1 = Component('HBA1', 1.25e-6,7.e-3)
hba2 = Component('HBA2', 1.25e-6, 7.e-3)
linkA = Component('Link A', 2.52e-6, 3.e-3)
linkB = Component('Link B', 2.52e-6, 3.e-3)
linkC = Component('Link C', 2.52e-6, 3.e-3)
linkD = Component('Link D', 2.52e-6, 3.e-3)
concentrateur = Component('Concentrateur', 1.71e-6, 2.e-3)
disqueC = Component('Disquec', 1e-5, 5.e-4)
disqueD = Component('DisqueD', 1e-5, 5.e-4)
#Création du système
S = System()
S['E'] = [hba1, hba2]
S[disqueC] = S[disqueD] = 'S'
S[hba1] = [linkA]
S[hba2] = [linkB]
S[linkA] = S[linkB] = [concentrateur]
S[concentrateur] = [linkC, linkD]
S[linkC] = [disqueC]
S[linkD] = [disqueD]
# Tracage des courbes de fiabilité et disponibilité sur une durée de 2 ans
timerange = range(0, 365*2*24 , 100)
reliability = [S.reliability(t) for t in timerange]
availability = [S.availability(t) for t in timerange]
print("Fiabilité sur 2 ans :", S.reliability(365*2*24))
print("Disponibilité sur 2 ans :", S.availability(365*2*24))
print("Fiabilité asymptotique :", S.reliability(365*100*24))
print("Disponibilité asymptotique : ", S.availability(365*100*24))
p.plot(timerange, reliability)
p.plot(timerange, availability)
p.show()
```
#### Résultats obtenus
++Courbes de disponibilité et fiabilité sur 2 ans :++

++Résultats asymptotiques :++
Fiabilité : 6.40502643152021e-685
Disponibilité = D1 : 0.998727639877047
Nous remarquons que la fiabilité tend vers 0, ce résultat est cohérent car aucun système n'est immortel.
### Architecture 2
#### Modélisation de l'architecture proposée

L'architecture présente est une série - parallèle. Deux séries sont mises en parallèle.
#### Programme permettant la modélisation avec Fiabilipy
```python
# Création des composants
hba1 = Component('HBA1', 1.25e-6,7.e-3)
hba2 = Component('HBA2', 1.25e-6, 7.e-3)
linkA = Component('Link A', 2.52e-6, 3.e-3)
linkB = Component('Link B', 2.52e-6, 3.e-3)
linkC = Component('Link C', 2.52e-6, 3.e-3)
linkD = Component('Link D', 2.52e-6, 3.e-3)
concentrateur1 = Component('Concen1', 1.71e-6, 2.e-3)
concentrateur2 = Component('Concen2', 1.71e-6, 2.e-3)
disqueC = Component('Disquec', 1e-5, 5.e-4)
disqueD = Component('DisqueD', 1e-5, 5.e-4)
# Création du système
S = System()
S['E'] = [hba1, hba2]
S[disqueC] = S[disqueD] = 'S'
S[hba1] = [linkA]
S[linkA] = [concentrateur1]
S[concentrateur1] = [linkC]
S[linkC] = [disqueC]
S[hba2] = [linkB]
S[linkB] = [concentrateur2]
S[concentrateur2] = [linkD]
S[linkD] = [disqueD]
timerange = range(0, 17520, 100)
reliability = [S.reliability(t) for t in timerange]
availability = [S.availability(t) for t in timerange]
print("Fiabilité sur 2 ans :", S.reliability(365*2*24))
print("Disponibilité sur 2 ans :", S.availability(365*2*24))
print("Fiabilité asymptotique :", S.reliability(365*100*24))
print("Disponibilité asymptotique : ", S.availability(365*100*24))
p.plot(timerange, reliability)
p.plot(timerange,availability)
p.show()
```
#### Résultats obtenus
++Courbe de disponibilité et fiabilité sur 2 ans :++

++Résultats asymptotiques :++
Fiabilité : 3.20251321576010e-685
Disponibilité = D2 : 0.999504334842817
### Comparaison
La disponibilité asymptotique est supérieure sur le système 2 → $D_2$ > $D_1$
Ce résultat s'explique par les différence au niveau du concentrateur. Dans le système 1, si le concentrateur ne fonctionne plus, le système ne fonctionnera plus. Sur le système 2, si l'un des deux concentrateurs ne fonctionne plus, le système peut continuer à fonctionner.
La redondance permet une plus forte disponibilité.
### Proposition d'un troisième système
#### Modélisation de l'architecture proposée

Dans ce système, les deux concentrateurs sont en redondance.
On a un système parallèle série. <!--ajout paco -->
Fiabilité asymptotique = 1.28100528630404e-684
Disponibilité asymptotique = 0.999580822537965
$0.9995043 < 0.99958$ donc la disponibilité du troisième système est meilleure.
### Facteurs d'importance avec t = 2 ans
1) Formule du facteur d'importance : $F_{imp} = \mathbb{P}(S|e) - \mathbb{P}(S|¬{e})$
"Probabilité que le système fonctionne si $e$ fonctionne moins la probabilité que le système fonctionne si $e$ ne fonctionne pas".
Pour l'architecture 1, HBA1 / HBA2 et LinkC / LinkD et Disque1 / Disque2 ont le même $F_{imp}$.
Pour le calcul, nous allons **diviser le système en sous-systèmes**.
- **SS1**: HBA1 et LinkA (système en série) ou HBA2 et LinkB
- **SS2**: HBA1/2 avec LinkA/B : il est composé de 2 fois le sous-système 1 en parallèle
- **SS3**: LinkC et DisqueC (système en série) ou LinkD et DisqueD
- **SS4**: LinkC/D avec Disque C/D : il est composé de 2 fois le sous-système 3 en parallèle
- et le sytème total : composé de SS2, SS4 et du concentrateur en série
La fiabilité d'un système en série est : $R(t) =\Pi_{i=1}^{n} \exp^{-\lambda_{i}t}$
La fiabilité d'un système en parallèle est : $1-(\Pi_{i=1}^{n} [1 - R(i)])$
La probabilité que le sous-système 1 marche avec tous les composants qui marchent est donc : $\mathbb{P}(SS1|e) = R_{SS1}(t) = [\exp^{-1.25.10^{-6}*365*2*24}][\exp^{-2.52.10^{-6}*365*2*24}] = 0.9360836844849996$
$\mathbb{P}(SS2|e) = R_{SS2}(t) = 1 - [1-\mathbb{P}(SS1|e)]^2 = 0.995914704610987$
$\mathbb{P}(SS3|e) = R_{SS3}(t) = [\exp^{-2.52.10^{-6}*365*2*24}][\exp^{-10^{-5}*365*2*24}] = 0.8030402835338104$
$\mathbb{P}(SS4|e) = R_{SS4}(t) = 1 - [1-\mathbb{P}(SS3|e)]^2 = 0.9612068700895582$
<!-- $\mathbb{P}(S|e) = R_{S}(t) =\mathbb{P}(SS2|e)*\mathbb{P}(SS4|e)*\mathbb{P}(S|C)=$ -->
$\mathbb{P}(S|e) = R_{S}(t) =\mathbb{P}(SS2|e)*\mathbb{P}(SS4|e)*\mathbb{P}(C)= 0.9290260582826846$
**++Facteur d'importance de LinkA et LinkB :++**
Ces deux composants ayant une position identiques et la même fiabilité, le facteur d'importance sera identique.
Si l'un des deux ne fonctionne plus, la fiabilité de SS1 change. Elle passe à 0 car $\mathbb{P}(SS1|¬{LinkA})= \mathbb{P}(HBA1)*\mathbb{P}(LinkA)$ avec $\mathbb{P}(LinkA) = 0$ donc $\mathbb{P}(SS1|¬{LinkA})=0$
<!-- Je suis tenté de dire que si une des deux séries de SS2 n'est pas fonctionnelle (i.e LinkA dead) → P(SS2|¬LinkA) = P(SS1)
Après vérification, on obtient les mêmes résultats. -->
<!-- $\mathbb{P}(SS2|\overline{LinkA})=1 - [1-\exp^{-1.25.10^{-6}*365*2*24}*\exp^{-2.52.10^{-6}*365*2*24}]=0.9360836844849996$ -->
Si $LinkA$ ne fonctionne pas, le sous-système en série $SS1$ ne fonctionne pas. Le sous-système en parallèle $SS2$ repose alors uniquement sur un de ses deux "*pieds*". Donc
$\mathbb{P}(SS2|¬{LinkA})= R_{SS1}(t)$
$\mathbb{P}(SS3|¬{LinkA}) = R_{SS3}(t)$
$\mathbb{P}(SS4|¬{LinkA}) = R_{SS4}(t)$
$=>\mathbb{P}(S|¬{LinkA}) = \mathbb{P}(SS2|¬{LinkA})*\mathbb{P}(SS4|¬{LinkA})*\mathbb{P}(C) = 0.8732134705848356$
$F_{impLinkA} = \mathbb{P}(S|e) - \mathbb{P}(S|¬{LinkA})= 0.055812587697849025$
Ce facteur d'importance est le même pour LinkB.
**++Facteur d'importance de HBA1 et HBA2 :++**
Ces deux composants ayant une position identiques et la même fiabilité, le facteur d'importance sera identique.
En suivant le même raisonnement que pour $LinkA$, on conclut que $\mathbb{P}(SS2|¬{HBA1}) = \mathbb{P}(SS1)$
$\mathbb{P}(SS2|¬{HBA1})= R_{SS1}(t)$
$\mathbb{P}(SS3|¬{HBA1}) = R_{SS3}(t)$
$\mathbb{P}(SS4|¬{HBA1}) = R_{SS4}(t)$
$=>\mathbb{P}(S|¬{HBA1}) =0.8732134705848356$
$F_{impHBA1} = \mathbb{P}(S|e) - \mathbb{P}(S|¬{HBA1})=0.055812587697849025$
Ce facteur est le même pour HBA2.
++**Facteur d'importance du concentrateur :**++
Si concentrateur ne fonctionne pas, $\mathbb{P}(S|¬{C}) = 0$ donc $F_{imp} = \mathbb{P}(S|C)=\mathbb{P}(S|e)=0.9290260582826846$
++**Facteur d'importance de LinkC et linkD :**++
La démarche est la même que pour LinkA mais avec cette fois-ci $\mathbb{P}(¬{LinkC}) = 0$ donc $\mathbb{P}(SS3|¬{LinkC})=0$
$\mathbb{P}(SS1|¬{LinkC}) = R_{SS1}(t)$
$\mathbb{P}(SS2|¬{LinkC}) = R_{SS2}(t)$
$\mathbb{P}(SS4|¬{LinkC}) = R_{SS3}(t)$
$=>\mathbb{P}(S|¬{LinkC}) = 0.7761548241786018$
$F_{impLinkC} = \mathbb{P}(S|e) - \mathbb{P}(S|¬{LinkC})=0.15287123410408276$
Ce résultat est le même pour LinkD
++**Facteur d'importance de DisqueC et DisqueD :**++
La démarche est la même que pour LinkC mais avec cette fois-ci $\mathbb{P}(¬{DisqueC}) = 0$ donc $\mathbb{P}(SS3|¬{DisqueC})=0$
$\mathbb{P}(SS1|¬{DisqueC}) = R_{SS1}(t)$
$\mathbb{P}(SS2|¬{DisqueC}) = R_{SS2}(t)$
$\mathbb{P}(SS4|¬{DisqueC}) = R_{SS3}(t)$
$=>\mathbb{P}(S|¬{DisqueC}) = 0.7761548241786018$
$F_{impDisqueC} = \mathbb{P}(S|e) - \mathbb{P}(S|¬{DisqueC})=0.15287123410408276$
### Analyse des résultats
On remarque que les facteurs d'importance de LinkA et LinkB sont les mêmes que ceux de HBA1 et HBA2.
En effet, si un de ces composants dysfonctionne, le SS1 dysfonctionne, et SS2 ne "compte" que sur son autre série pour fonctionner.
De la même manière, les facteurs d'importance de LinkC et LinkD sont les mêmes que ceux de DisqueC et DisqueD.
Enfin, le concentrateur est un *Single Point of Failure*, son facteur d'importance de Birnbaum est donc égal à la probabilité que le système fonctionne.
L'architecture 3 proposée limite le facteur d'importance d'un concentrateur en parallélisant deux concentrateurs.