Lowlight.fr

Peut-être est-il l'une des variables régies par les lois de la causalité, guidée par le destin sans en connaître la cause.

Berserk
Kentaro Miura

Les générateurs pseudo-aléatoires

Un **générateur pseudo-aléatoire** se compose d'un algorithme **prédéfini** ainsi que d'un nombre initial, que l'on appelle plus communément **seed**. La connaissance des deux permet d'anticiper le prochain nombre généré : il s'agit donc d'un système totalement déterministe.

Celui-ci suit également ce qu'on appelle une **loi de probabilités**, que l'on caractérise avec différents **paramètres**. Quel que soient le nombre d'origine et l'algorithme de départ, le changement d'un de ces paramètres altèrera son comportement **futur**. Le système reste donc déterministe mais la séquence de nombres générés peut être manipulée.

Cet article consiste en une **présentation** de la bibliothèque lowlighter/random (documentation ) que j'ai réalisé, ainsi qu'en la réalisation d'un **générateur totalement aléatoire**.

Démonstration et exemples de code

La méthode native de génération de nombres aléatoires en JavaScript, Math.random, n'offre malheureusement pas la possibilité aux développeurs de **semer** le générateur, en plus de les obliger à se contenter uniquement d'une loi uniforme (il faut parfois se satisfaire du nécessaire). Pour procurer plus que de l'eau fraîche et de la verdure, cette bibliothèque pallie ces deux problèmes au lieu de semer le doute !

Le nombre de tirages maximum n'est pas limité, mais un trop grand nombre risque de ralentir la page.

Seed
Nombre de tirages
Loi de probabilité

        //Instanciation
            let Distribution = Lowlight.Random.Distribution
            let generator = new Distribution.Normal().seed(0)

        //Configuration
            generator.alpha(0).beta(0).mean(0).deviation(0).min(0).max(0).mode(null).concentration(0).scale(0).shape(0).rate(0)

        //Génération
        //Peut retourner par exemple random number
            setInterval(function () { console.log(generator.next()) }, 500)
                

A propos de cette bibliothèque

Celle-ci s'inspire fortement du code source Python de la bibliothèque random.py.

Caractéristiques de cette bibliothèque

  • **11** différentes lois de probabilités
    • Lois Normales (et Gaussienne), Log-normales, Exponentielles, Uniformes, Beta, Gamma, de Pareto, de Von Mises, de Weibull, Triangulaire et Uniforme sur un sous-ensemble.
  • Support du **semage** (numérique et textuel)
  • Méthodes **utilitaires**
    • Mélanges et tirages issus un tableau d'éléments

Les générateurs totalement aléatoires

La plupart des jeux de hasard en ligne n'utilisent pas de générateurs de nombres pseudo-aléatoires à cause de leurs propriétés évoquées en début de cet article. L'astuce consiste à faire en sorte que la condition requise à l'existence du démon de Laplace ne puisse être remplie : utiliser notre univers. L'utilisation de **grandeurs physiques** telles que la température ou la pression atmosphérique permettent d'empêcher la prédiction par les mathématiques puisque l'on bascule dans le domaine des sciences physiques, science inexacte.

°Mathématiciens : 1, Physiciens : 10-16180339887°.

Et s'il suffisait de noyer le poisson ?

Avec l'utilisation d'une caméra pour suivre le déplacement de mes deux poissons rouges, **Azerty** et **Qwerty**, ces derniers sont devenus des générateurs de nombres aléatoires...

Le principe est très simple, en supposant que les poissons ne sont pas soumis à des éléments perturbateurs °(nourritures, personnes, etc.)°, on peut considérer leurs déplacements comme totalement aléatoires dans la mesure où il n'est pas possible de les prédire.

Notez tout de même que même si à strictement parler les positions relevées sont des valeurs **discrètes** °(en raison de l'échantillonage de la vidéo)°, elles sont néanmoins soumises à contraintes physiques °(les poissons ne maitrisant pas le déplacement instantané)°, ce qui oblige à affectuer des transformations sur les nombres récupérés afin de pouvoir récupérer un nombre réelement aléatoire.

Démonstration

Prochainement