introduction aux processus stochastiques

dés aléatoires
lancé de dés aléatoires

lorsque votre système évolue au cours du temps, on utilise les fameux processus stochastiques ; il s’agit d’utiliser une suite de VA (X(t)) où t est le paramètre temps ; on peut distinguer 4 cas :

  1. VA à valeur discrète avec t discret
  2. VA à valeur discrète avec t continue
  3. VA à valeur continue avec t discret
  4. VA à valeur continue avec t continue

nous allons travailler avec des VA à valeurs discrète (cas 1 & 2)

  • ex cas 1 : on regarde l’état de la machine à café toutes les secondes ; elle est soit libre soit en fonction
  • ex cas 2 : dans un centre d’appel, un opérateur est soit libre soit occupé ; lorsqu’il répond au téléphone, le temps d’appel est une durée continue

node-RED chaîne de markov 😍

en restant simple, on dira que la suite de VA (X_n) est processus de markov si :

  • l’état du système est connu (au départ)
  • on connait la règle (en terme de probabilité) pour passer à l’étape suivante

de façon schématique, cela ressemble à une suite récurrente … le tout est de savoir quand un évènement se déclenche ; on distingue alors 2 cas :

  • CM discrète : le temps avance avec un pas de 1
  • CM continue : le temps est continue

remarque : au lieu de simplifier (brutalement) le cas discret (à un pas de 1), on rester un poil plus sophistiqué en choisissant pour le cas discret la loi (discrète) géométrique et dans le cas continue la loi (continue) exponentielle ; et comme par hasard la loi géométrique est la discrétisation de la loi exponentielle …

mais restons simple et regardons de plus près avec 3 exemples :


DTMC Good (G) and Bad (B) 😎

(X_n) une DTMC à 2 positions (voir diagramme)

from random import random

n = 10
S = []

S.append('G')   # Initial state

for i in range(n):
    u = random()
    if S[i] == 'G':
        if u < 0.5:
            S.append('G')
        else:
            S.append('B')
    elif S[i] == 'B':
        if u < 0.7:
            S.append('G')
        else:
            S.append('B')

print('Sample Path: ', S)

CTMC : simulation d’un processus de poisson 😎

(X_n) est un processus de poisson si c’est un CTMC à un état (naissance)

from random import expovariate

from random import expovariate
from matplotlib.pyplot import *

Avg_IAT = 2.0    # Average IAT
Sim_Time = 100    # Total simulation time
N = 0            # Count number of arrivals
clock = 0       # Simulation time

X = []  # Times of events
Y = []  # Values of N

while clock <= Sim_Time:
    N = N + 1
    # Advance simulation clock
    clock = clock + expovariate(1/Avg_IAT)
    X.append(clock)
    Y.append(N)

step(X, Y, Linewidth=1.2, color='black')
xlabel('Time', size=16)
ylabel('N', size=16)
xlim(0, 101)
#show()
savefig('sim_poisson_process_process.pdf', format='pdf', bbox_inches='tight')

node-RED CTMC : birth-death process 😍

(X_n) est un processus à 2 états : naissance et décès

from random import expovariate
from matplotlib.pyplot import *

Avg_IAT = 2.0
Avg_ST = 1.0    # Avg service time
Sim_Time = 100  # Total simulation time
N = 0            
clock = 0   # Simulation time
X = []  # Times of events
Y = []  # Values of N

while clock <= Sim_Time:
    IAT = expovariate(1 / Avg_IAT)
    ST = expovariate(1 / Avg_ST)
    if IAT <= ST:
        N += 1
        clock = clock + IAT
        X.append(clock)
        Y.append(N)
    else:
        if N > 0:
            N -= 1
            clock = clock + ST
            X.append(clock)
            Y.append(N)

step(X, Y, Linewidth=1.2, color='black')
xlabel('Time', size=16)
ylabel('N', size=16)
xlim(0, 101)
#show()
savefig('sim_birth_death_process.pdf', format='pdf', bbox_inches='tight')
A propos de math13net 10 Articles
math13net