If you're seeing this message, it means we're having trouble loading external resources on our website.

Si vous avez un filtre web, veuillez vous assurer que les domaines *. kastatic.org et *. kasandbox.org sont autorisés.

Contenu principal

Les lois de probabilité non uniformes

Vous rappelez-vous quand vous avez commencé à programmer ici ? Vous avez peut être souhaité dessiner plein de cercles sur l'écran. Et vous vous êtes dit : “Oh, je sais. Je vais dessiner tous ces cercles à des emplacements aléatoires, avec des tailles aléatoires et des couleurs aléatoires !” Dans un environnement infographique, il est souvent facile de semer en utilisant l'aléatoire. Dans ce cours, cependant, nous allons plutôt rechercher à modéliser ce que nous pouvons observer dans la nature. Se défausser sur l'aléatoire n'est pas la meilleure solution pour résoudre un problème de conception (en particulier les problèmes qui impliquent des simulations organiques ou de phénomènes naturels).
En utilisant quelques astuces, il est possible de modifier l'utilisation de la fonction random() afin de produire des nombres aléatoires suivant une loi "non uniforme". Cela va nous être utile, durant ce cours, alors que nous aborderons de nombreux scénarios différents. Quand on examine les algorithmes génétiques, par exemple, il nous faut trouver une méthodologie pour accomplir une “sélection” (quels individus de notre population doivent être sélectionnés pour passer leurs ADN à la prochaine génération ?). Connaissez-vous le concept de survie du plus adapté ? Mettons que nous avons une population de singes en évolution. Les singes ne sont pas tous égaux lorsqu'il s'agit de se reproduire. Pour simuler l'évolution darwinienne, nous ne pouvons pas simplement choisir aléatoirement deux singes pour en faire des parents. Il nous faut choisir parmi les plus "adaptés", définir une "probabilité du plus adapté". Par exemple, un singe particulièrement rapide et fort pourrait avoir 90% de chance de procréer, alors qu'un faible n'aurait que 10% de chance.
Faisons une pause et abordons les concepts de base de la théorie des probabilités. Nous allons tout d'abord examiner la probabilité d'un événement (c'est à dire la probabilité que se réalise un événement donné).
Si on considère une expérience aboutissant à un certain nombre de résultats, la probabilité d'apparition d'un événement donné est égale au nombre de résultats qui correspondent à cet événement donné, divisé par le nombre total de tous les résultats possibles. Prenons l'exemple d'un lancer de pièce (il n'y a que deux résultats possibles : pile ou face). On ne peut obtenir pile que d'une seule façon. La probabilité que la pièce donne pile, par conséquent, est de un divisé par deux : 1/2 ou 50%.
Prenez un jeu de cinquante-deux cartes. La probabilité de tirer un AS à partir de ce jeu de carte est :
nombre d'AS / nombre de cartes = 4 / 52 = 0,077 = ~ 8 %
La probabilité de tirer un CARREAU est :
nombre de CARREAUX / nombre de cartes = 13 / 52 = 0,25 = 25 %
On peut aussi calculer la probabilité d'événements multiples, se réalisant en séquence. Pour cela, il suffit de multiplier tout simplement les probabilités individuelles de chaque événement.
La probabilité qu'une pièce jetée en l'air retombe trois fois de suite sur pile est :
(1/2) * (1/2) * (1/2) = 1/8 (ou 0,125)
… ce qui signifie qu'une pièce retombe une fois sur huit, trois fois de suite sur pile (à chaque "fois" qu'elle est lancée trois fois).
Vous souhaitez réviser les probabilités avant de continuer ? Étudiez Calculer la probabilité d'un événement et les probabilités conditionnelles.
Il existe plusieurs façon d'utiliser la fonction random() dans du code qui utilise les probabilités. L'une d'entre elles consiste à remplir un tableau d'une sélection de nombres (certains pouvant être répétés), puis de faire des choix aléatoires parmi ceux-ci et générer des événements en fonction de ces choix.
Exécuter ce code nous permettra d'obtenir un 1 avec 40% de chance, un 2 avec 20% de chance et un 3 avec 40% de chance.
Nous pouvons aussi tirer un nombre aléatoire (pour faire simple, un nombre décimal entre 0 et 1) et permettre à un événement de se produire seulement si notre nombre aléatoire est compris dans une certaine fourchette. Jetez un œil à l'exemple ci-dessous, et cliquez sur Redémarrer (Restart) jusqu'à ce que le nombre aléatoire tiré soit inférieur au seuil (quand "doing something!" s'affiche - "fais quelque chose" en français) :
Cette méthode peut également être appliquée pour des résultats multiples. Mettons que le résultat A a 60 % de chances de se produire, le résultat B, 10 % et le résultat C, 30 %. On code cela en tirant un nombre aléatoire et on regarde dans quelle fourchette il se situe.
  • entre 0,00 et 0,60 (60%) –> Résultat A
  • entre 0,60 et 0,70 (10%) –> Résultat B
  • entre 0,70 et 1,00 (30%) –> Résultat C
Cliquez sur le bouton Redémarrez (Restart) pour voir la fréquence d'apparition des résultats (outcomes en anglais) :
Nous pouvons utiliser la méthode précédente pour créer un marcheur aléatoire qui tend à se déplacer plutôt vers la droite. Voici un exemple d'un Walker qui suit les probabilités suivantes :
  • chance de se déplacer vers le haut : 20%
  • chance de se déplacer vers le bas : 20%
  • chance de se déplacer vers la gauche : 20%
  • chance de se déplacer vers la droite : 40%

Ce cours sur les "simulations de phénomènes naturels" est dérivé de l'ouvrage "The Nature of Code" de Daniel Shiffman, utilisé sous licence Creative Commons Attribution-NonCommercial 3.0 Unported License.

Vous souhaitez rejoindre la discussion ?

Vous comprenez l'anglais ? Cliquez ici pour participer à d'autres discussions sur Khan Academy en anglais.