Bonjour,
Je cherche à créer aléatoirement des pannes de machine dans un vecteur, "V", contenant autant de lignes que de pas de temps. J'étais parti pour utiliser la fonction rand() de MATLAB en vue d'encadrer ce nombre avec des if pour définir mes catégories de pannes.
Cependant, étant donné que j'ai 29 catégories de pannes il serait plus propre d'éviter une telle répétition de boucles conditionnelles. Voici sur quoi je me suis orienté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if(rand()<0.95) 'Pas de panne' elseif rand()<0.984452 'Panne categorie 1' else 'Panne categorie 2' end
Définir un vecteur, "V", contenant des chiffres allant de 1 à 29 correspondant à des catégories de pannes. Il est complété par des zéros jusqu'à atteindre autant de ligne que de pas de temps.
Tirer un chiffre aléatoire entre 1 et la taille du vecteur. On regarde ensuite quelle est la valeur du vecteur à la position du chiffre aléatoire. Si c'est un 0 alors il n'y a pas de panne, sinon il y a une panne dont la catégorie est indiquée par le nombre correspondant à la position.
Sur un exemple:
V=[1 1 1 2 0 0 0 0 0 0 0 0]
Ici on a 12 pas de temps.
La probabilité d'avoir une panne de catégorie 1 est de 3/12 et celle d'avoir une panne de catégorie 2 de 1/12.
Chiffre aléatoire=3 => On a une panne de catégorie 1.
Le problème c'est que mes taux de pannes sont très faibles et très précis. Par exemple: probabilité d'avoir une panne de catégorie 1: 0.00001 (taux de panne par an et par machine). Sachant que mon pas de temps est fixé à 1h donc 8760 pas de temps pour une simulation, si je rempli 1 colonne de mon vecteur "V" avec un 1 la probabilité associée sera de 0.000114.
Auriez-vous d'autres idées pour résoudre ce problème ?
Merci d'avance,
Bien cordialement,
Martin
Partager