Dessin de numéros en ligne. Générateur de nombres aléatoires pour la loterie

  • 30.04.2019
  • Didacticiel

Vous êtes-vous déjà demandé comment fonctionne Math.random() ? Qu'est-ce qu'un nombre aléatoire et comment est-il obtenu ? Imaginez une question d'entretien : écrivez votre générateur de nombres aléatoires en quelques lignes de code. Alors, qu’est-ce que c’est, un accident et est-il possible de le prédire ?

Je suis très fasciné par diverses énigmes et tâches informatiques, et le générateur de nombres aléatoires est l'une de ces tâches. Habituellement, sur ma chaîne Telegram, j'analyse toutes sortes d'énigmes et diverses tâches issues d'entretiens. Le problème du générateur de nombres aléatoires a gagné en popularité et j'ai voulu le perpétuer dans les profondeurs de l'une des sources d'information faisant autorité - c'est-à-dire ici sur Habré.

Ce matériel sera utile à tous les développeurs front-end et Node.js qui sont à la pointe de la technologie et souhaitent se lancer dans un projet/startup blockchain où les questions de sécurité et de cryptographie sont au moins niveau de base, demandent-ils même aux développeurs front-end.

Générateur de nombres pseudo-aléatoires et générateur de nombres aléatoires

Afin d’obtenir quelque chose d’aléatoire, nous avons besoin d’une source d’entropie, une source de chaos à partir de laquelle nous utiliserons pour générer du hasard.

Cette source est utilisée pour accumuler de l'entropie puis en obtenir une valeur initiale (graine), nécessaire aux générateurs de nombres aléatoires (RNG) pour générer des nombres aléatoires.

Le générateur de nombres pseudo-aléatoires utilise une seule graine, d'où son caractère pseudo-aléatoire, tandis que le générateur de nombres aléatoires génère toujours un nombre aléatoire en commençant par une variable aléatoire de haute qualité tirée de diverses sources d'entropie.

L'entropie est une mesure du désordre. L'entropie de l'information est une mesure de l'incertitude ou de l'imprévisibilité de l'information.
Il s'avère que pour créer une séquence pseudo-aléatoire, nous avons besoin d'un algorithme qui générera une certaine séquence basée sur une certaine formule. Mais une telle séquence est prévisible. Cependant, imaginons comment nous pourrions écrire notre propre générateur de nombres aléatoires si nous n'avions pas Math.random()

PRNG possède un algorithme qui peut être reproduit.
Le RNG est le processus d'obtention de nombres entièrement à partir d'une sorte de bruit, la capacité de calculer lequel tend vers zéro. Dans le même temps, le RNG dispose de certains algorithmes pour égaliser la répartition.

Nous proposons notre propre algorithme PRNG

Le générateur de nombres pseudo-aléatoires (PRNG) est un algorithme qui génère une séquence de nombres dont les éléments sont presque indépendants les uns des autres et obéissent à une distribution donnée (généralement uniforme).
Nous pouvons prendre une séquence de quelques nombres et en déduire le module du nombre. L'exemple le plus simple qui me vient à l'esprit. Nous devons réfléchir à la séquence à prendre et au module à partir de quoi. Si vous passez directement de 0 à N et de module 2, vous obtenez un générateur de 1 et 0 :

Fonction* rand() ( const n = 100; const mod = 2; let i = 0; while (true) ( ​​​​rendement i % mod; if (i++ > n) i = 0; ) ) let i = 0; for (let x of rand()) ( if (i++ > 100) break; console.log(x); )
Cette fonction génère la séquence 01010101010101... et elle ne peut même pas être qualifiée de pseudo-aléatoire. Pour qu’un générateur soit aléatoire, il doit réussir le test binaire suivant. Mais nous n’avons pas une telle tâche. Néanmoins, même sans aucun test, nous pouvons prédire la séquence suivante, ce qui signifie qu’un tel algorithme n’est pas adapté, mais nous sommes dans la bonne direction.

Et si nous prenions une séquence bien connue mais non linéaire, par exemple le nombre PI. Et comme valeur du module, nous ne prendrons pas 2, mais autre chose. Vous pouvez même penser à la valeur changeante du module. La séquence de chiffres de Pi est considérée comme aléatoire. Le générateur peut fonctionner en utilisant des nombres Pi à partir d’un point inconnu. Un exemple d'un tel algorithme, avec une séquence basée sur PI et un module variable :

Vecteur const = [...Math.PI.toFixed(48).replace(".","")]; fonction* rand() ( pour (soit i=3; i<1000; i++) { if (i >99) je = 2; pour (soit n=0; n Mais dans JS, le numéro PI ne peut être affiché que jusqu'à 48 chiffres et pas plus. Par conséquent, il est toujours facile de prédire une telle séquence, et chaque exécution d’un tel générateur produira toujours les mêmes nombres. Mais notre générateur a déjà commencé à afficher des nombres de 0 à 9.

Nous avons un générateur de nombres de 0 à 9, mais la distribution est très inégale et il générera la même séquence à chaque fois.

On peut prendre non pas le nombre Pi, mais le temps en représentation numérique et considérer ce nombre comme une séquence de nombres, et afin de s'assurer que la séquence ne se répète pas à chaque fois, nous la lirons depuis la fin. Au total, notre algorithme pour notre PRNG ressemblera à ceci :

Fonction* rand() ( let newNumVector = () => [...(+new Date)+""].reverse(); let vector = newNumVector(); let i=2; while (true) ( ​​​​si ( i++ > 99) i = 2 ; soit n=-1 ; tandis que (++n< vector.length) yield (vector[n] % i); vector = newNumVector(); } } // TEST: let i = 0; for (let x of rand()) { if (i++ >100) pause ; console.log(x)
Cela ressemble déjà à un générateur de nombres pseudo-aléatoires. Et le même Math.random() est un PRNG, nous en reparlerons un peu plus tard. De plus, à chaque fois nous obtenons un premier numéro différent.

En fait sur ceux-ci exemples simples Vous pouvez comprendre comment fonctionnent les générateurs de nombres aléatoires plus complexes. Et il existe même des algorithmes prêts à l'emploi. À titre d'exemple, regardons l'un d'eux — il s'agit du PRNG linéaire congruent (LCPRNG).

PRNG linéaire congruent

Le PRNG linéaire congruent (LCPRNG) est une méthode courante pour générer des nombres pseudo-aléatoires. Ce n’est pas cryptographiquement fort. Cette méthode consiste à calculer les termes d'une séquence récurrente linéaire modulo certains entier naturel m, donné par la formule. La séquence résultante dépend du choix du numéro de départ — c'est-à-dire graine. À différentes significations la graine produit différentes séquences de nombres aléatoires. Un exemple d'implémentation d'un tel algorithme en JavaScript :

Const a = 45 ; const c = 21 ; const m = 67 ; var graine = 2 ; const rand = () => graine = (a * graine + c) % m; pour(soit i=0; je<30; i++) console.log(rand())
De nombreux langages de programmation utilisent LCPRNG (mais pas exactement cet algorithme (!)).

Comme mentionné ci-dessus, une telle séquence peut être prédite. Alors pourquoi avons-nous besoin de PRNG ? Si nous parlons de sécurité, alors PRNG est un problème. Si nous parlons d'autres tâches, ces propriétés peuvent être un plus. Par exemple, pour divers effets spéciaux et animations graphiques, vous devrez peut-être fréquemment appeler au hasard. Et c’est là que la répartition des sens et la performance sont importantes ! Les algorithmes sécurisés ne peuvent pas se vanter d’être rapides.

Une autre propriété est la reproductibilité. Certaines implémentations vous permettent de spécifier une graine, ce qui est très utile si la séquence doit être répétée. La reproduction est nécessaire dans les tests, par exemple. Et il y a bien d’autres choses qui ne nécessitent pas de RNG sécurisé.

Comment fonctionne Math.random()

La méthode Math.random() renvoie un nombre à virgule flottante pseudo-aléatoire de la plage = crypto.getRandomValues(new Uint8Array(1)); console.log(rvalue)
Mais contrairement au PRNG Math.random(), cette méthode est très gourmande en ressources. Le fait est que ce générateur utilise des appels système dans l'OS pour accéder aux sources d'entropie (adresse MAC, CPU, température, etc...).

Il est évident que la chance joue un rôle important dans toute entreprise. Mais lorsque vous jouez à la loterie, vous devez comprendre que la fortune est le seul facteur dont dépend la réalisation de vos rêves. Dans la plupart des loteries, pour remporter le jackpot, il vous suffit de deviner certains numéros dans une certaine fourchette. Dans ce cas, celui présenté sur notre site Internet peut vous aider.

Nous proposons d'essayer gratuitement un générateur simple, qui peut éliminer complètement l'influence du facteur humain et augmentez vos chances de gagner. Nous présentons également les générateurs les meilleurs et les plus fonctionnels, mais simples, ainsi que des services capables de prédire des combinaisons gagnantes de nombres sur la base d'algorithmes d'analyse spéciaux.

Si vous souhaitez tenter votre chance à l’une des loteries populaires (4 sur 20, 5 sur 36, 6 sur 45), mais que vous ne savez pas quels numéros peuvent augmenter vos chances de gagner, alors nous pouvons vous aider. Ensuite, nous présentons à votre attention revue du TOP 5 des plus fonctionnels, mais en même temps des générateurs de numéros de loterie faciles à utiliser avec de nombreuses fonctions et capacités supplémentaires.

Voyons d’abord les principaux critères de la liste.:

TOP 1 - Générateur de numéros GSgen.RU


Description: Le logiciel intégré est implémenté dans le langage de programmation Javascript et est un générateur de nombres pseudo-aléatoires. Distribue uniformément les nombres aléatoires, éliminant ainsi la perception subjective des joueurs, qui influence la sélection manuelle.

Avantages: Le script RNG vous permet de sélectionner des numéros porte-bonheur pour Gosloto (et pas seulement) de diverses variantes à partir de modes prédéfinis. Il existe la possibilité de réglages individuels pour d'autres types de loteries. Disponible pour une utilisation gratuite.

Défauts: Il n'y a aucun moyen de saisir des numéros d'exclusion que vous ne souhaitez pas voir, vous ne pouvez pas obtenir plusieurs combinaisons à la fois et obtenir un lien vers le résultat final.

TOP 2 – Générateur Soft-Arhiv


Description: Un autre service de génération de SP pour les loteries russes. Sélectionnez simplement la combinaison requise et obtenez le résultat final. Vous n'avez besoin d'aucun logiciel supplémentaire pour l'utiliser, car il fonctionne très bien en ligne.

Avantages: Dispose d'un formulaire simple et clair à remplir et à obtenir des résultats. La possibilité de sélectionner un type de loterie prêt à l'emploi, les paramètres de génération vous permettent d'inclure des exceptions et le nombre de combinaisons requises rendent le service très pratique à utiliser. Également des fonctionnalités entièrement gratuites.

TOP 3 - RNG : Calculatrice888


Description: Calculator888 occupe la troisième place honorable parmi les services considérés. Comme les options précédentes, elle vous permet d'obtenir le nombre de numéros requis sans trop d'effort. Même un utilisateur novice du réseau peut utiliser le générateur de nombres aléatoires, car tout est intuitif.

Avantages: Des paramètres étendus vous permettront de générer le nombre requis de nombres, de définir leur plage et également de déterminer les options de saisie. De plus, contrairement aux services précédents, il permet d'obtenir un lien vers le résultat. Complètement libre.

Défauts: Les inconvénients incluent le manque de choix de types de loterie prêts à l'emploi, ce qui vous oblige à créer vous-même la tâche. Vous ne pouvez pas introduire d'exceptions et obtenir plusieurs combinaisons à la fois. La comptabilisation des circulations passées n'est pas non plus effectuée.

Générateurs de numéros basés sur les tirages passés

Il convient d'attirer votre attention sur le fait qu'il existe des services spéciaux qui peuvent prédire les numéros porte-bonheur sur lesquels vous devez parier. Leurs créateurs assurent aux utilisateurs que l'analyse et la présentation des résultats sont effectuées sur la base des résultats des tirages, de l'utilisation théorie des probabilités et d'autres calculs mathématiques.

Cependant, il ne faut pas y croire inconditionnellement. Nous n’y croyons certainement pas et pensons que l’un de ces services produit de manière aléatoire des résultats similaires à n’importe quel autre RNG.

Cependant, vous pouvez le vérifier vous-même. Ci-dessous, nous présentons deux autres services qui offrent la possibilité de sélectionner les résultats du loto d'État, du loto Viking, du keno, du loto sportif, etc. en tenant compte de leurs circulations passées. La fonctionnalité de certains d’entre eux est payante.

Attirons votre attention sur le fait que vous ne devriez pas payer d'argent pour une prévision payante, car il ne s'agit que d'argent perdu pour des combinaisons que tout autre service gratuit peut produire. Ainsi, le maintien des meilleurs services pour la génération, en tenant compte de l'analyse des circulations passées :

TOP 4 – RNG prenant en compte les circulations : Fortunablog


Description: Selon le développeur, le script est capable non seulement d'émettre des combinaisons numériques au hasard, mais également d'analyser les balles précédemment lâchées sur la base d'un certain nombre d'algorithmes et de théories des probabilités. Il est également précisé que le but du générateur est de sélectionner une combinaison pour le jackpot.

Avantages: Il existe deux types de loterie prédéfinis parmi lesquels vous pouvez tenter votre chance en sélectionnant. Cependant, le principal avantage réside dans la prise en compte des résultats des circulations passées et, surtout, de la gratuité de l'utilisation.

TOP 5 - Générateur de loterie prenant en compte les tirages : Igraivloto


Description: Le service présenté vous permet d'obtenir des combinaisons des combinaisons gagnantes les plus probables. Le principe de fonctionnement est similaire aux options précédentes envisagées, à l'exception de certains éléments de fonctionnalité.

Avantages: Il s'agit d'un script prêt à l'emploi pour émettre une prévision pour la loterie Gosloto 6 sur 45, ce qui élimine le besoin de sélectionner le tirage requis. Il se positionne comme un site fonctionnant sur des algorithmes et des filtres spéciaux qui créent les prévisions les plus probables sur la base des tirages effectués. Vous permet d'obtenir plusieurs résultats à la fois et de partager un lien vers le résultat.

Défauts: Il n'est pas possible de saisir une plage de nombres et les exceptions nécessaires. Cependant, le plus gros inconvénient est la fourniture de prévisions payantes, ce qui le distingue clairement de ses précédents homologues gratuits.

Conclusion

Que vous utilisiez ou non les services évoqués, cela dépend bien entendu de vous. D'une part, l'utilisation de tels sites peut vous aider à sélectionner certaines combinaisons, vous libérant de choix difficiles, puisque, par exemple, pour un tirage de 5 sur 36, absolument toute combinaison générée ou sélectionnée manuellement par le joueur lui-même a une probabilité de victoire de 1 sur 376 992.

Tableau montrant la probabilité de gagner à la loterie :


Comparée à d’autres stratégies de loterie, cette option offre de bonnes chances de gagner. Cependant, vous devez comprendre que l'utilisation de pronostics payants dans ce cas n'est pas conseillée et ne correspond pas à la probabilité de gagner.


Notez qu’idéalement, la courbe de densité de distribution de nombres aléatoires ressemblerait à celle illustrée à la Fig. 22.3. Autrement dit, idéalement, chaque intervalle contient le même nombre de points : N je = N/k , Où N nombre total de points, k nombre d'intervalles, je= 1, , k .

Riz. 22.3. Diagramme de fréquence de nombres aléatoires,
généré théoriquement par un générateur idéal

Il ne faut pas oublier que la génération d'un nombre aléatoire arbitraire comprend deux étapes :

  • générer un nombre aléatoire normalisé (c'est-à-dire uniformément distribué de 0 à 1) ;
  • conversion de nombres aléatoires normalisée r je aux nombres aléatoires X je, qui sont distribués selon la loi de distribution (arbitraire) requise par l'utilisateur ou dans l'intervalle requis.

Les générateurs de nombres aléatoires selon la méthode d'obtention des nombres sont divisés en :

  • physique;
  • tabulaire;
  • algorithmique.

RNG physique

Un exemple de RNG physique peut être : une pièce de monnaie ("face" 1, "face" 0) ; dé; un tambour avec une flèche divisée en secteurs avec des chiffres ; générateur de bruit matériel (HS), qui utilise un dispositif thermique bruyant, par exemple un transistor (Fig. 22.422.5).

Riz. 22.4. Schéma d'une méthode matérielle pour générer des nombres aléatoires
Riz. 22.5. Schéma d'obtention de nombres aléatoires à l'aide de la méthode matérielle
Tâche « Générer des nombres aléatoires à l'aide d'une pièce de monnaie »

Générez un nombre aléatoire à trois chiffres, uniformément réparti entre 0 et 1, à l'aide d'une pièce de monnaie. Précision à trois décimales.

La première façon de résoudre le problème
Lancez une pièce 9 fois, et si la pièce tombe sur face, écrivez « 0 » ; si elle tombe sur face, écrivez « 1 ». Supposons donc qu’à la suite de l’expérience, nous ayons reçu la séquence aléatoire 100110100.

Tracez un intervalle de 0 à 1. En lisant les nombres dans l'ordre de gauche à droite, divisez l'intervalle en deux et choisissez à chaque fois une des parties de l'intervalle suivant (si vous obtenez un 0, alors celle de gauche, si vous obtenez un 1, puis le bon). Ainsi, vous pouvez accéder à n’importe quel point de l’intervalle, aussi précisément que vous le souhaitez.

Donc, 1 : l'intervalle est divisé en deux et , la moitié droite est sélectionnée, l'intervalle est rétréci : . Numéro suivant 0 : l'intervalle est divisé en deux et , la moitié gauche est sélectionnée, l'intervalle est rétréci : . Numéro suivant 0 : l'intervalle est divisé en deux et , la moitié gauche est sélectionnée, l'intervalle est rétréci : . Numéro suivant 1 : l'intervalle est divisé en deux et , la moitié droite est sélectionnée, l'intervalle est rétréci : .

Selon la condition de précision du problème, une solution a été trouvée : il s'agit de n'importe quel nombre de l'intervalle, par exemple 0,625.

En principe, si nous adoptons une approche stricte, alors la division des intervalles doit être poursuivie jusqu'à ce que les limites gauche et droite de l'intervalle trouvé COINCIDE avec une précision à la troisième décimale. Autrement dit, du point de vue de la précision, le nombre généré ne se distinguera plus d'aucun nombre de l'intervalle dans lequel il se trouve.

La deuxième façon de résoudre le problème
Divisons la séquence binaire résultante 100110100 en triades : 100, 110, 100. Après avoir converti ces nombres binaires en nombres décimaux, nous obtenons : 4, 6, 4. En remplaçant « 0. » devant, nous obtenons : 0,464. Cette méthode ne peut produire que des nombres compris entre 0,000 et 0,777 (puisque le maximum pouvant être « extrait » de trois chiffres binaires est 111 2 = 7 8), c'est-à-dire qu'en fait, ces nombres sont représentés dans le système numérique octal. Pour traduire octal nombres dans décimal exécutons la représentation :
0,464 8 = 4 8 1 + 6 8 2 + 4 8 3 = 0,6015625 10 = 0,602 10.
Ainsi, le nombre requis est : 0,602.

RNG tabulaire

Les RNG tabulaires utilisent des tableaux spécialement compilés contenant des nombres vérifiés non corrélés, c'est-à-dire ne dépendant en aucun cas les uns des autres, comme source de nombres aléatoires. Dans le tableau La figure 22.1 montre un petit fragment d'un tel tableau. En parcourant le tableau de gauche à droite de haut en bas, vous pouvez obtenir des nombres aléatoires répartis uniformément de 0 à 1 avec le nombre de décimales requis (dans notre exemple, nous utilisons trois décimales pour chaque nombre). Étant donné que les nombres du tableau ne dépendent pas les uns des autres, le tableau peut être parcouru de différentes manières, par exemple de haut en bas ou de droite à gauche, ou, par exemple, vous pouvez sélectionner des nombres qui sont dans des positions paires.

Tableau 22.1.
Nombres aléatoires. Uniformément
nombres aléatoires distribués de 0 à 1
Nombres aléatoires Distribué équitablement
0 à 1 nombres aléatoires
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

L’avantage de cette méthode est qu’elle produit des nombres véritablement aléatoires, puisque le tableau contient des nombres vérifiés non corrélés. Inconvénients de la méthode : stocker un grand nombre de chiffres nécessite beaucoup de mémoire ; La génération et la vérification de ce type de tableaux présentent de grandes difficultés : les répétitions lors de l'utilisation d'un tableau ne garantissent plus le caractère aléatoire de la séquence numérique, et donc la fiabilité du résultat.

Il existe un tableau contenant 500 nombres vérifiés absolument aléatoires (tirés du livre de I. G. Venetsky, V. I. Venetskaya « Concepts et formules mathématiques et statistiques de base dans l'analyse économique »).

RNG algorithmique

Les nombres générés par ces RNG sont toujours pseudo-aléatoires (ou quasi-aléatoires), c'est-à-dire que chaque nombre suivant généré dépend du précédent :

r je + 1 = F(r je) .

Les séquences composées de tels nombres forment des boucles, c'est-à-dire qu'il existe nécessairement un cycle qui se répète un nombre infini de fois. Les cycles répétitifs sont appelés périodes.

L’avantage de ces RNG est leur rapidité ; les générateurs ne nécessitent pratiquement aucune ressource mémoire et sont compacts. Inconvénients : les nombres ne peuvent pas être entièrement qualifiés de aléatoires, puisqu'il existe une dépendance entre eux, ainsi que la présence de points dans la séquence de nombres quasi-aléatoires.

Considérons plusieurs méthodes algorithmiques pour obtenir du RNG :

  • méthode des carrés médians ;
  • méthode de produits intermédiaires;
  • méthode d'agitation;
  • méthode linéaire congruente.

Méthode du carré médian

Il y a un numéro à quatre chiffres R. 0 . Ce nombre est mis au carré et entré dans R. 1 . Suivant à partir de R. 1 prend le nouveau nombre aléatoire du milieu (quatre chiffres du milieu) et l'écrit dans R. 0 . Ensuite, la procédure est répétée (voir Fig. 22.6). Notez qu'en fait, comme nombre aléatoire, vous ne devez pas prendre ghij, UN 0.ghij avec un zéro et un point décimal ajouté à gauche. Ce fait se reflète comme sur la Fig. 22.6, et dans les figures similaires ultérieures.

Riz. 22.6. Schéma de la méthode des carrés moyens

Inconvénients de la méthode : 1) si à une certaine itération le nombre R. 0 devient égal à zéro, puis le générateur dégénère, le choix correct de la valeur initiale est donc important R. 0 ; 2) le générateur répétera la séquence jusqu'à M. nétapes (au mieux), où n chiffre du nombre R. 0 , M. base du système numérique.

Par exemple sur la Fig. 22.6 : si le numéro R. 0 sera représenté dans le système de nombres binaires, puis la séquence de nombres pseudo-aléatoires sera répétée en 2 4 = 16 étapes. A noter que la répétition de la séquence peut intervenir plus tôt si le numéro de départ est mal choisi.

La méthode décrite ci-dessus a été proposée par John von Neumann et remonte à 1946. Cette méthode s’étant révélée peu fiable, elle fut rapidement abandonnée.

Méthode intermédiaire

Nombre R. 0 multiplié par R. 1, à partir du résultat obtenu R. 2 le milieu est extrait R. 2 * (c'est un autre nombre aléatoire) et multiplié par R. 1 . Tous les nombres aléatoires suivants sont calculés à l'aide de ce schéma (voir Fig. 22.7).

Riz. 22.7. Schéma de la méthode des produits médians

Méthode d'agitation

La méthode shuffle utilise des opérations pour déplacer cycliquement le contenu d’une cellule vers la gauche et la droite. L'idée de la méthode est la suivante. Laissez la cellule stocker le numéro initial R. 0 . En décalant cycliquement le contenu de la cellule vers la gauche d'1/4 de la longueur de la cellule, nous obtenons un nouveau nombre R. 0*. De la même manière, parcourir le contenu de la cellule R. 0 vers la droite d'1/4 de la longueur de la cellule, on obtient le deuxième nombre R. 0**. Somme des nombres R. 0* et R. 0** donne un nouveau nombre aléatoire R. 1 . Plus loin R. 1 est inscrit dans R. 0, et toute la séquence d'opérations est répétée (voir Fig. 22.8).


Riz. 22.8. Schéma de la méthode de mélange

Veuillez noter que le nombre résultant de la sommation R. 0* et R. 0 ** , peut ne pas tenir complètement dans la cellule R. 1 . Dans ce cas, les chiffres supplémentaires doivent être supprimés du numéro obtenu. Expliquons cela dans la Fig. 22.8, où toutes les cellules sont représentées par huit chiffres binaires. Laisser R. 0 * = 10010001 2 = 145 10 , R. 0 ** = 10100001 2 = 161 10 , Alors R. 0 * + R. 0 ** = 100110010 2 = 306 10 . Comme vous pouvez le constater, le nombre 306 occupe 9 chiffres (dans le système de numération binaire), et la cellule R. 1 (identique à R. 0) peut contenir au maximum 8 bits. Par conséquent, avant de saisir la valeur dans R. 1, il est nécessaire de supprimer un bit « supplémentaire », le plus à gauche du nombre 306, ce qui donne R. 1 n'ira plus au 306, mais au 00110010 2 = 50 10 . Notez également que dans des langages comme Pascal, le « rognage » des bits supplémentaires lorsqu'une cellule déborde est effectué automatiquement en fonction du type de variable spécifié.

Méthode congruente linéaire

La méthode de congruence linéaire est l’une des procédures les plus simples et les plus couramment utilisées actuellement pour simuler des nombres aléatoires. Cette méthode utilise le mod( X, oui) , qui renvoie le reste lorsque le premier argument est divisé par le second. Chaque nombre aléatoire suivant est calculé sur la base du nombre aléatoire précédent à l'aide de la formule suivante :

r je+ 1 = module( k · r je + b, M.) .

La séquence de nombres aléatoires obtenue à l'aide de cette formule est appelée séquence congruente linéaire. De nombreux auteurs appellent une séquence congruente linéaire lorsque b = 0 méthode congruente multiplicative, et quand b ≠ 0 — méthode congruente mixte.

Pour un générateur de qualité, il est nécessaire de sélectionner des coefficients adaptés. Il faut que le numéro M.était assez longue, puisque la période ne peut pas avoir plus M.éléments. D'un autre côté, la division utilisée dans cette méthode est une opération plutôt lente, donc pour un ordinateur binaire le choix logique serait M. = 2 N, puisque dans ce cas, trouver le reste de la division se réduit à l’intérieur de l’ordinateur à l’opération logique binaire « ET ». Choisir le plus grand nombre premier est également courant M., moins de 2 N: dans la littérature spécialisée, il est prouvé que dans ce cas les chiffres de poids faible du nombre aléatoire résultant r je+ 1 se comportent de manière tout aussi aléatoire que les plus âgés, ce qui a un effet positif sur l'ensemble de la séquence de nombres aléatoires. A titre d'exemple, l'un des Numéros de Mersenne, égal à 2 31 1, et donc, M.= 2 31 1 .

L’une des exigences pour les séquences linéaires congruentes est que la durée de la période soit aussi longue que possible. La durée de la période dépend des valeurs M. , k Et b. Le théorème que nous présentons ci-dessous nous permet de déterminer s'il est possible d'atteindre une période de longueur maximale pour des valeurs spécifiques M. , k Et b .

Théorème. Séquence congruente linéaire définie par des nombres M. , k , b Et r 0, a une période de longueur M. si et seulement si:

  • Nombres b Et M. relativement simple;
  • k 1 fois p pour chaque premier p, qui est un diviseur M. ;
  • k 1 est un multiple de 4, si M. multiple de 4.

Enfin, concluons avec quelques exemples d'utilisation de la méthode de congruence linéaire pour générer des nombres aléatoires.

Il a été déterminé qu'une série de nombres pseudo-aléatoires générés sur la base des données de l'exemple 1 seraient répétés tous les M./4 numéros. Nombre q est fixé arbitrairement avant le début des calculs, il convient cependant de garder à l'esprit que la série donne l'impression d'être aléatoire dans son ensemble k(et donc q). Le résultat peut être quelque peu amélioré si bétrange et k= 1 + 4 · q dans ce cas, la ligne sera répétée tous les M. Nombres. Après une longue recherche k les chercheurs ont opté pour les valeurs de 69069 et 71365.

Un générateur de nombres aléatoires utilisant les données de l'exemple 2 produira des nombres aléatoires et non répétitifs avec une période de 7 millions.

La méthode multiplicative pour générer des nombres pseudo-aléatoires a été proposée par D. H. Lehmer en 1949.

Vérification de la qualité du générateur

La qualité de l'ensemble du système et l'exactitude des résultats dépendent de la qualité du RNG. Par conséquent, la séquence aléatoire générée par le RNG doit satisfaire un certain nombre de critères.

Les contrôles effectués sont de deux types :

  • vérifie l'uniformité de la distribution;
  • tests d’indépendance statistique.

Vérifie l’uniformité de la distribution

1) Le RNG doit produire des valeurs proches des valeurs suivantes de paramètres statistiques caractéristiques d'une loi aléatoire uniforme :

2) Test de fréquence

Un test de fréquence vous permet de savoir combien de nombres se trouvent dans un intervalle (m r – σ r ; m r + σ r) , c'est-à-dire (0,5 0,2887 ; 0,5 + 0,2887) ou, finalement, (0,2113 ; 0,7887). Puisque 0,7887 0,2113 = 0,5774, nous concluons que dans un bon RNG, environ 57,7 % de tous les nombres aléatoires tirés devraient tomber dans cet intervalle (voir Fig. 22.9).

Riz. 22.9. Diagramme de fréquence d'un RNG idéal
en cas de vérification pour le test de fréquence

Il est également nécessaire de prendre en compte que le nombre de nombres tombant dans l'intervalle (0 ; 0,5) doit être approximativement égal au nombre de nombres tombant dans l'intervalle (0,5 ; 1).

3) Test du chi carré

Le test du chi carré (test du χ 2) est l'un des tests statistiques les plus connus ; c'est la principale méthode utilisée en combinaison avec d'autres critères. Le test du Chi carré a été proposé en 1900 par Karl Pearson. Son travail remarquable est considéré comme le fondement de la statistique mathématique moderne.

Dans notre cas, les tests utilisant le critère du chi carré nous permettront de savoir dans quelle mesure réel Le RNG est proche du benchmark RNG, c'est-à-dire qu'il satisfasse ou non à l'exigence de distribution uniforme.

Diagramme de fréquence référence Le RNG est présenté sur la Fig. 22.10. Puisque la loi de distribution du RNG de référence est uniforme, alors la probabilité (théorique) p je entrer des chiffres dans jeème intervalle (tous ces intervalles k) est égal à p je = 1/k . Et ainsi, dans chacun de k les intervalles vont frapper lisse Par p je · N Nombres ( N nombre total de numéros générés).

Riz. 22.10. Diagramme de fréquence du RNG de référence

Un vrai RNG produira des nombres répartis (et pas nécessairement uniformément !) k intervalles et chaque intervalle contiendra n je nombres (au total n 1 + n 2 + + n k = N ). Comment pouvons-nous déterminer la qualité du RNG testé et sa proximité avec celui de référence ? Il est tout à fait logique de considérer les carrés des différences entre le nombre de nombres résultant n je et "référence" p je · N . Additionnons-les et le résultat est :

χ 2 exp. = ( n 1 p 1 · N) 2 + (n 2 p 2 · N) 2 + + ( n k – p k · N) 2 .

De cette formule, il s'ensuit que plus la différence entre chacun des termes est petite (et donc plus la valeur de χ 2 exp.) est petite, plus la loi de distribution des nombres aléatoires générés par un RNG réel a tendance à être uniforme.

Dans l’expression précédente, chacun des termes se voit attribuer le même poids (égal à 1), ce qui en fait peut ne pas être vrai ; par conséquent, pour les statistiques du chi carré, il est nécessaire de normaliser chaque jeème terme, en le divisant par p je · N :

Enfin, écrivons l’expression résultante de manière plus compacte et simplifions-la :

Nous avons obtenu la valeur du test du chi carré pour expérimental données.

Dans le tableau 22.2 sont donnés théorique valeurs du chi carré (χ 2 théorique), où ν = N 1 est le nombre de degrés de liberté, p il s'agit d'un niveau de confiance spécifié par l'utilisateur qui indique dans quelle mesure le RNG doit satisfaire aux exigences d'une distribution uniforme, ou p — est la probabilité que la valeur expérimentale de χ 2 exp. sera inférieur au tableau (théorique) χ 2 théorique. ou égal à celui-ci.

Tableau 22.2.
Quelques points de pourcentage de la distribution χ 2
p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% p = 99%
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν + sqrt(2 ν ) · X p+ 2/3 · X 2 p 2/3 + Ô(1/carré( ν ))
X p = 2.33 1,64 0,674 0.00 0.674 1.64 2.33

Considéré comme acceptable p de 10% à 90%.

Si χ 2 exp. bien plus que la théorie χ 2. (c'est p est grand), alors le générateur ne satisfait pas l'exigence d'une distribution uniforme, puisque les valeurs observées n je aller trop loin du théorique p je · N et ne peut pas être considéré comme aléatoire. En d’autres termes, il est installé si grand Intervalle de confiance, que les restrictions sur le nombre deviennent très souples, les exigences en matière de nombre deviennent faibles. Dans ce cas, une erreur absolue très importante sera observée.

Même D. Knuth dans son livre « The Art of Programming » a noté qu'avoir χ 2 exp. pour les petits, en général, ce n'est pas bon non plus, même si cela semble, à première vue, merveilleux du point de vue de l'uniformité. En effet, prenons une série de nombres 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, ils sont idéaux du point de vue de l'uniformité, et χ 2 exp. sera pratiquement nul, mais il est peu probable que vous les reconnaissiez comme aléatoires.

Si χ 2 exp. bien inférieur à la théorie χ 2. (c'est p petit), alors le générateur ne satisfait pas l'exigence d'une distribution aléatoire uniforme, puisque les valeurs observées n je trop proche du théorique p je · N et ne peut pas être considéré comme aléatoire.

Mais si χ 2 exp. se situe dans une certaine plage entre deux valeurs de la théorie χ 2. , qui correspondent par exemple, p= 25% et p= 50%, on peut alors supposer que les valeurs de nombres aléatoires générées par le capteur sont complètement aléatoires.

En outre, il convient de garder à l’esprit que toutes les valeurs p je · N doit être suffisamment grand, par exemple supérieur à 5 (découvert empiriquement). Ce n’est qu’à ce moment-là (avec un échantillon statistique suffisamment grand) que les conditions expérimentales peuvent être considérées comme satisfaisantes.

Ainsi, la procédure de vérification est la suivante.

Tests d'indépendance statistique

1) Vérification de la fréquence d'apparition des nombres dans la séquence

Regardons un exemple. Le nombre aléatoire 0,2463389991 est constitué des chiffres 2463389991, et le nombre 0,5467766618 est constitué des chiffres 5467766618. En reliant les séquences de chiffres, nous avons : 24633899915467766618.

Il est clair que la probabilité théorique p je perte je Le ème chiffre (de 0 à 9) est égal à 0,1.

2) Vérification de l'apparence des séries de numéros identiques

Notons par n L nombre de séries de chiffres identiques dans une rangée de longueur L. Tout doit être vérifié L de 1 à m, Où m il s'agit d'un nombre spécifié par l'utilisateur : le nombre maximum de chiffres identiques dans une série.

Dans l'exemple « 24633899915467766618 » 2 séries de longueur 2 (33 et 77) ont été trouvées, soit n 2 = 2 et 2 séries de longueur 3 (999 et 666), soit n 3 = 2 .

La probabilité d'apparition d'une série de longueur L est égal à: p L= 9 10 L (théorique). Autrement dit, la probabilité d’apparition d’une série d’un caractère est égale à : p 1 = 0,9 (théorique). La probabilité qu’une série de deux caractères apparaisse est : p 2 = 0,09 (théorique). La probabilité qu’une série de trois caractères apparaisse est : p 3 = 0,009 (théorique).

Par exemple, la probabilité d’apparition d’une série d’un caractère est p L= 0,9, puisqu'il ne peut y avoir qu'un seul symbole sur 10, et qu'il y a 9 symboles au total (zéro ne compte pas). Et la probabilité que deux symboles « XX » identiques apparaissent dans une rangée est de 0,1 · 0,1 · 9, c'est-à-dire que la probabilité de 0,1 que le symbole « X » apparaisse en première position est multipliée par la probabilité de 0,1 que le symbole « X » apparaisse dans une rangée. le même symbole apparaîtra en deuxième position « X » et multiplié par le nombre de ces combinaisons 9.

La fréquence d'apparition des séries est calculée à l'aide de la formule du chi carré dont nous avons discuté précédemment en utilisant les valeurs p L .

Remarque : Le générateur peut être testé plusieurs fois, mais les tests ne sont pas complets et ne garantissent pas que le générateur produit des nombres aléatoires. Par exemple, un générateur qui produit la séquence 12345678912345 sera considéré comme idéal lors des tests, ce qui n'est évidemment pas tout à fait vrai.

En conclusion, notons que le troisième chapitre du livre de Donald E. Knuth The Art of Programming (Volume 2) est entièrement consacré à l'étude des nombres aléatoires. Il examine diverses méthodes de génération de nombres aléatoires, les critères statistiques de caractère aléatoire et la conversion de nombres aléatoires uniformément distribués en d'autres types. Variables aléatoires. Plus de deux cents pages sont consacrées à la présentation de ce matériel.

Clair et générateur pratique numéros en ligne, qui sont utilisés dans Dernièrement popularité. Il était le plus largement utilisé dans les tirages au sort en dans les réseaux sociaux, parmi les utilisateurs.

Il est également populaire dans d’autres domaines. Nous avons également des mots de passe et des numéros.

Notre générateur de nombres aléatoires en ligne.

Notre générateur randomiseur ne nécessite pas de téléchargement sur votre PC personnel. Tout se passe en mode générateur de numéros en ligne. Spécifiez simplement des paramètres tels que : la plage de numéros en ligne dans laquelle les numéros seront sélectionnés au hasard. Indiquez également le nombre de numéros qui seront sélectionnés.

Par exemple, vous disposez d'un groupe VKontakte. Dans le groupe, vous gagnerez 5 prix parmi le nombre de participants qui republieront le post. Grâce à une application spéciale, nous avons reçu une liste des participants. Chacun s'est vu attribuer son propre numéro de série pour les numéros en ligne.

Nous allons maintenant sur notre générateur en ligne et indiquons la plage de nombres (nombre de participants). Par exemple, nous définissons que 5 numéros sont nécessaires en ligne, puisque nous avons 5 prix. Cliquez maintenant sur le bouton Générer. Ensuite, nous obtenons 5 nombres aléatoires en ligne, allant de 1 à 112 inclus. Les 5 numéros générés en ligne correspondront numéro de série cinq participants qui sont devenus les gagnants du tirage au sort. Tout est simple et pratique.

Un autre avantage du générateur de nombres aléatoires est que tous les numéros en ligne sont émis de manière aléatoire. Autrement dit, il n'est pas possible de l'influencer ou de calculer quel sera le prochain numéro. Qu'est-ce que cela signifie de dire, honnête et fiable, et l'administration, qui distribue des prix à l'aide de notre générateur gratuit, est honnête et décente en la personne des participants au concours. Et si vous avez des doutes sur une décision, vous pouvez utiliser notre

Pourquoi le générateur de nombres aléatoires est-il le meilleur ?

Le fait est que générateur de nombres en ligne disponible sur n’importe quel appareil et toujours en ligne. En toute honnêteté, vous pouvez générer n’importe quel nombre pour n’importe quelle idée que vous avez. Et utilisez la même chose pour le projet générateur de nombres aléatoires en ligne. Surtout si vous avez besoin de déterminer le gagnant d'un jeu ou d'un autre numéro en ligne. Le fait est que générateur de nombres aléatoires génère des nombres de manière complètement aléatoire sans algorithmes. C'est essentiellement la même chose que pour les chiffres.

Générateur de nombres aléatoires en ligne gratuitement !

Générateur de nombres aléatoires en ligne gratuit pour tout le monde. Vous n'avez pas besoin d'en télécharger ou d'en acheter générateur de nombres aléatoires en ligne pour le tirage au sort. Il vous suffit d'aller sur notre site Web et d'obtenir le résultat aléatoire dont vous avez besoin. Nous avons non seulement générateur de nombres aléatoires mais également nécessaire à beaucoup et vous aidera certainement à gagner à la loterie. Un véritable générateur de nombres aléatoires en ligne pour les loteries est le hasard absolu. Ce que notre site est en mesure de vous fournir.

Numéro aléatoire en ligne

Si vous recherchez un nombre aléatoire en ligne, nous avons créé cette ressource juste pour vous. Nous améliorons constamment nos algorithmes. Vous obtiendrez le vrai ici générateur de nombres aléatoires. Il répondra à tous vos besoins selon vos besoins générateur aléatoire totalement gratuit et à tout moment. Générez des nombres aléatoires en ligne avec nous. Assurez-vous toujours que chaque numéro généré est complètement aléatoire.

Générateur de nombres aléatoires

Notre générateur de nombres aléatoires sélectionne des nombres de manière complètement aléatoire. Peu importe le jour ou l'heure que vous avez sur votre ordinateur. C’est un véritable choix aveugle. Le générateur aléatoire mélange simplement tous les nombres dans un ordre aléatoire. Et puis il sélectionne au hasard le nombre de nombres aléatoires que vous spécifiez parmi eux. Parfois, les nombres peuvent être répétés, ce qui prouve le caractère totalement aléatoire du générateur de nombres aléatoires.

Aléatoire en ligne

Le hasard est l’option la plus sûre pour un tirage au sort. Le générateur en ligne est-il réel sélection aléatoire. Vous êtes protégé de toute influence sur la sélection d'un nombre aléatoire. En filmant le processus au hasard sélection en ligne gagnant en vidéo. C'est tout ce dont vous avez besoin. Organisez des tirages au sort en ligne avec notre générateur en ligne Nombres. Vous obtenez des gagnants et des joueurs satisfaits. Et nous sommes heureux d'avoir pu vous plaire avec notre générateur aléatoire.

Nous avons une suite de nombres constituée d'éléments pratiquement indépendants qui obéissent à une distribution donnée. En règle générale, distribution uniforme.

Vous pouvez générer des nombres aléatoires dans Excel en différentes manières et les moyens. Considérons seulement les meilleurs d'entre eux.

Fonction de nombre aléatoire dans Excel

  1. La fonction RAND renvoie un nombre réel aléatoire et uniformément distribué. Il sera inférieur à 1, supérieur ou égal à 0.
  2. La fonction RANDBETWEEN renvoie un entier aléatoire.

Regardons leur utilisation avec des exemples.

Échantillonnage de nombres aléatoires à l'aide de RAND

Cette fonction ne nécessite aucun argument (RAND()).

Pour générer un nombre réel aléatoire compris entre 1 et 5, par exemple, utilisez la formule suivante : =RAND()*(5-1)+1.

Le nombre aléatoire renvoyé est réparti uniformément sur l’intervalle.

Chaque fois que la feuille de calcul est calculée ou que la valeur d'une cellule de la feuille de calcul change, un nouveau nombre aléatoire est renvoyé. Si vous souhaitez sauvegarder la population générée, vous pouvez remplacer la formule par sa valeur.

  1. Cliquez sur la cellule avec un nombre aléatoire.
  2. Dans la barre de formule, sélectionnez la formule.
  3. Appuyez sur F9. ET ENTREZ.

Vérifions l'uniformité de la distribution des nombres aléatoires du premier échantillon à l'aide d'un histogramme de distribution.


La plage de valeurs verticales est la fréquence. Horizontal - "poches".



Fonction ALÉATOIRE

La syntaxe de la fonction RANDBETWEEN est (limite inférieure ; limite supérieure). Le premier argument devrait être moins de deux. Sinon, la fonction générera une erreur. Les limites sont supposées être des nombres entiers. La formule supprime la partie fractionnaire.

Exemple d'utilisation de la fonction :

Nombres aléatoires avec précision 0,1 et 0,01 :

Comment créer un générateur de nombres aléatoires dans Excel

Créons un générateur de nombres aléatoires qui génère une valeur dans une certaine plage. Nous utilisons une formule comme : =INDEX(A1:A10,INTEGER(RAND()*10)+1).

Créons un générateur de nombres aléatoires compris entre 0 et 100 par pas de 10.

Vous devez en sélectionner 2 au hasard dans la liste des valeurs de texte. À l'aide de la fonction RAND, nous comparons les valeurs de texte dans la plage A1:A7 avec des nombres aléatoires.

Utilisons la fonction INDEX pour sélectionner deux valeurs de texte aléatoires dans la liste d'origine.

Pour sélectionner une valeur aléatoire dans la liste, utilisez la formule suivante : =INDEX(A1:A7,RANDBETWEEN(1,COUNT(A1:A7))).

Générateur de nombres aléatoires à distribution normale

Les fonctions RAND et RANDBETWEEN produisent des nombres aléatoires avec une distribution uniforme. Toute valeur ayant la même probabilité peut tomber dans la limite inférieure de la plage demandée et dans la limite supérieure. Cela entraîne un énorme écart par rapport à la valeur cible.

Une distribution normale implique que la plupart des nombres générés sont proches du nombre cible. Ajustons la formule RANDBETWEEN et créons un tableau de données avec une distribution normale.

Le coût du produit X est de 100 roubles. L'ensemble du lot produit suit une distribution normale. Une variable aléatoire suit également une distribution de probabilité normale.

Dans de telles conditions, la valeur moyenne de la gamme est de 100 roubles. Générons un tableau et traçons un graphique avec une distribution normale à écart-type 1,5 roubles.

On utilise la fonction : =NORMINV(RAND();100;1.5).

Excel a calculé quelles valeurs se trouvaient dans la plage de probabilité. Étant donné que la probabilité de produire un produit d'un coût de 100 roubles est maximale, la formule affiche des valeurs proches de 100 plus souvent que d'autres.

Passons au tracé du graphique. Vous devez d’abord créer un tableau avec des catégories. Pour ce faire, nous divisons le tableau en périodes :

Sur la base des données obtenues, nous pouvons générer un diagramme avec une distribution normale. L'axe des valeurs est le nombre de variables dans l'intervalle, l'axe des catégories est celui des périodes.