Aller au contenu

Correction : Exercice Probabilités 2

Télécharger la correction

# Exercice 2: Chaîne de Markov


#   On considère un système avec 3 états numérotés 0, 1, et 2. Le système évolue de manière
#   probabiliste selon les transitions suivantes:
#   - Au temps t=0, le système est dans l'état 0 avec une probabilité de 1.
#   - Si l'état actuel est 0, il peut passer à 0 avec une probabilité de 0.3, à 1 avec une
#     probabilité de 0.4, et à 2 avec une probabilité de 0.3.
#   - Si l'état actuel est 1, il peut passer à 0 avec une probabilité de 0.2, à 1 avec une
#     probabilité de 0.5, et à 2 avec une probabilité de 0.3.
#   - Si l'état actuel est 2, il peut passer à 0 avec une probabilité de 0.6, à 1 avec une
#     probabilité de 0.3, et à 2 avec une probabilité de 0.1.
#   La variable aléatoire X représente l'état du système à chaque instant t.
#
# 1) Créez une fonction transition_etat(etat) qui prend l'état actuel en entrée et renvoie le
#    nouvel état après une transition aléatoire en fonction des probabilités données, affichez
#    le nouvel état avec comme état actuel l'état 1.
#
# 2) Créez une fonction simulation_markov(k) qui simule k transitions successives et renvoie la
#    suite d'états traversés grâce à une liste, affichez cette liste pour k=20.
#
# 3) Créez une fonction pourcentages_etats(etats) qui prend en entrée la liste des états et
#    renvoie le pourcentage de fois où le système est dans l'état 0, 1 ou 2 après k transitions.
#    Affichez ces pourcentages pour k=20.



# Correction possible de l'exercice 2:

# 1)

import random

def transition_etat(etat):
    if etat == 0:
        prob_0 = 0.3
        prob_1 = 0.4
        prob_2 = 0.3 # Les valeurs prob_2 ne sont jamais utilisées pour le random, car on passe à l'état 2 si on ne passe ni à l'état 0 ni à l'état 1 (prob_2=1-prob_0-prob_1). On peut supprimer ces lignes.
    elif etat == 1:
        prob_0 = 0.2
        prob_1 = 0.5
        prob_2 = 0.3 # Pareil ici
    else:
        prob_0 = 0.6
        prob_1 = 0.3
        prob_2 = 0.1 # Pareil ici

    tirage = random.random()
    if tirage < prob_0:
        return 0
    elif tirage < prob_0 + prob_1:
        return 1
    else:
        return 2

print(transition_etat(1)) 


# 2)

def simulation_markov(k):
    etat_courant = 0 # Cas initial
    etats = [etat_courant]
    for i in range(k):
        etat_courant = transition_etat(etat_courant) # On remplace l'état courant par le nouvel état après la transition
        etats.append(etat_courant)
    return etats

print(simulation_markov(20))


# 3)

def pourcentages_etats(etats):
    comptage_0 = etats.count(0)
    comptage_1 = etats.count(1)
    comptage_2 = etats.count(2)

    pourcentage_0 = (comptage_0 / len(etats)) * 100
    pourcentage_1 = (comptage_1 / len(etats)) * 100
    pourcentage_2 = (comptage_2 / len(etats)) * 100

    return pourcentage_0, pourcentage_1, pourcentage_2

print(pourcentages_etats(simulation_markov(20)))