Je cherche un moyen de générer des nombres aléatoires qui semblent distribués de manière uniforme - et chaque test montrera qu'ils sont uniformes - sauf qu'ils sont distribués de manière plus uniforme que les données véritablement uniformes .
Le problème que j'ai avec les "vrais" aléas uniformes, c'est qu'ils vont parfois se regrouper. Cet effet est plus fort lorsque l'échantillon est petit. En gros, quand je dessine deux ronds uniformes dans U [0; 1], il y a de bonnes chances qu'ils se situent dans une fourchette de 0,1% à 1%, et à 1% dans un intervalle de 0,01.
Je cherche donc un bon moyen de générer des nombres aléatoires mieux répartis que les aléas uniformes .
Exemple d'utilisation: disons que je fais un jeu d'ordinateur et que je veux placer un trésor au hasard sur une carte (sans se soucier de rien d'autre). Je ne veux pas que le trésor soit tout au même endroit, il devrait être partout sur la carte. Avec des randoms uniformes, si je place, disons, 10 objets, les chances qu’il y en ait 5 vraiment très proches ne sont pas très faibles. Cela peut donner à un joueur un avantage sur un autre. Pensez au dragueur de mines, les chances (bien que faibles, s’il ya suffisamment de mines) sont que vous ayez vraiment de la chance et que vous gagniez en un seul clic.
Une approche très naïve de mon problème consiste à diviser les données en une grille. Tant que le nombre est assez grand (et comporte des facteurs), on peut imposer une uniformité supplémentaire de cette façon. Ainsi, au lieu de tirer 12 variables aléatoires de U [0; 1], je peux en tirer 6 de U [0; 0,5] et 6 de U [0,5; 1] ou 4 de U [0; 1/3] + 4. de U [1/3; 2/3] + 4 de U [2/3; 1].
Y a-t-il un meilleur moyen d'obtenir cette uniformité supplémentaire dans l'uniforme? Cela ne fonctionne probablement que pour les aléas de lot (lorsque je trace un seul hasard, je dois évidemment prendre en compte toute la gamme). En particulier, je pourrai mélanger à nouveau les disques par la suite (donc ce ne sont pas les quatre premiers du premier tiers).
Pourquoi ne pas le faire progressivement? Donc, le premier est sur U [0; 1], puis deux de chaque moitié, une de chaque troisième, une de chaque quatrième? At-on enquêté sur cette question et quelle est sa qualité? Je devrais faire attention à utiliser des générateurs différents pour x et y afin de ne pas les mettre en corrélation (le premier xy serait toujours dans la moitié inférieure, le second dans la moitié gauche et le troisième en bas, le troisième au centre et le troisième en haut). Donc, au moins une certaine permutation aléatoire des bacs est également nécessaire et, à long terme, elle sera trop uniforme, je suppose.
En tant que nœud latéral, existe-t-il un test bien connu permettant de déterminer si une distribution est trop uniformément répartie pour être vraiment uniforme? Donc, tester "vrai uniforme" contre "quelqu'un a foiré les données et a distribué les articles plus équitablement". Si je me souviens bien, Hopkins Statistic peut mesurer cela, mais peut-il aussi être utilisé pour des tests? Également un test KS inverse: si la plus grande déviation est inférieure à un certain seuil prévu, les données sont trop uniformément distribuées?
la source
Réponses:
Oui , il existe de nombreuses façons de produire une suite de nombres mieux distribuée que les uniformes aléatoires. En fait, tout un domaine est dédié à cette question; c'est l'épine dorsale de quasi-Monte Carlo (QMC). Vous trouverez ci-dessous un bref aperçu des bases absolues.
Mesure de l'uniformité
La quantité est souvent appelée écart ou écart extrême de l'ensemble des points . Intuitivement, nous trouvons le "pire" rectangle où la proportion de points diffère le plus de ce à quoi nous nous attendions sous une uniformité parfaite.Dn (xi) R
C'est difficile à manier et difficile à calculer. Pour la plupart, les gens préfèrent travailler avec la discordance en étoile , La seule différence est l'ensemble sur lequel le supremum est pris. C'est l'ensemble des rectangles ancrés (à l'origine), c'est-à-dire où .
Lemme : pour tout , . Preuve . La main gauche est évidente liée depuis . La borne de droite suit parce que chaque peut être composé via des unions, des intersections et des compléments de rectangles ancrés au maximum (c'est-à-dire, dans ).D⋆n≤Dn≤2dD⋆n n d
A⊂R R∈R 2d A
Ainsi, nous voyons que et sont équivalents en ce sens que si l'un est petit comme grandit, l'autre le sera aussi. Voici une image (dessin animé) montrant les rectangles candidats pour chaque écart.Dn D⋆n n
Exemples de "bonnes" séquences
Sans surprise, les séquences avec une différence d'étoile vérifiable, sont souvent appelées séquences de divergences faibles .D⋆n
van der Corput . C'est peut-être l'exemple le plus simple. Pour , les séquences de van der Corput sont formées en développant le nombre entier en binaire, puis en "reflétant les chiffres" autour du point décimal. Plus formellement, cela se fait avec la fonction inverse radicale en base , où et sont les chiffres du développement en base de . Cette fonction constitue également la base de nombreuses autres séquences. Par exemple, en binaire est et ainsid=1 i b
Notez que parce que le bit le moins significatif de oscille entre et , les points pour les impairs sont dans , alors que les points pour les pairs sont dans .i 0 1 xi i [1/2,1) xi i (0,1/2)
Séquences de Halton . Parmi les plus classiques des séquences classiques à faible divergence, il s'agit d'extensions de la séquence de van der Corput à plusieurs dimensions. Laissez le e plus petit nombre premier. Ensuite, le ème point de la séquence de dimension dimensionale est Pour les faibles ceux-ci fonctionnent assez bien, mais ont des problèmes dans les dimensions supérieures .pj j i xi d
Les séquences de Halton satisfont à . Ils sont également intéressants parce qu’ils sont extensibles en ce sens que la construction des points ne dépend pas d’ un choix a priori de la longueur de la séquence .D⋆n=O(n−1(logn)d) n
Séquences de Hammersley . Il s’agit d’une modification très simple de la séquence de Halton. Nous utilisons plutôt Peut-être étonnamment, l’avantage est qu’ils ont une meilleure discordance entre les étoiles .
Voici un exemple des séquences de Halton et Hammersley en deux dimensions.
Séquences de Halton permuté par Faure . Un ensemble spécial de permutations (fixées en fonction de ) peut être appliqué au développement de chiffres pour chaque lors de la production de la séquence de Halton. Cela permet de remédier (dans une certaine mesure) aux problèmes évoqués dans les dimensions supérieures. Chacune des permutations a la propriété intéressante de garder et tant que points fixes.i ak i 0 b−1
Règles de treillis . Soit entiers. Prenez où désigne la partie de . Un choix judicieux des valeurs donne de bonnes propriétés d'uniformité. De mauvais choix peuvent conduire à de mauvaises séquences. Ils ne sont pas non plus extensibles. Voici deux exemples.β1,…,βd−1
Randomisation simple: rotations Cranley-Patterson . Soit une suite de points. Soit . Alors les points sont uniformément distribués dans .xi∈[0,1]d U∼U(0,1) x^i={xi+U} [0,1]d
Voici un exemple où les points bleus sont les points d'origine et les points rouges sont les points pivotés avec des lignes les reliant (et représentés, le cas échéant).
Séquences complètement uniformément distribuées . C'est une notion encore plus forte d'uniformité qui entre parfois en jeu. Soit la suite de points dans et forme maintenant des blocs superposés de taille pour obtenir la suite . Donc, si , on prend puis , etc. Si, pour tout , , alors est dit être uniformément distribué . En d' autres termes, la séquence donne un ensemble de points de toute(ui) [0,1] d (xi) s=3 x1=(u1,u2,u3) x2=(u2,u3,u4) s≥1 D⋆n(x1,…,xn)→0 (ui) dimension qui possède des propriétés souhaitables .D⋆n
A titre d’exemple, la suite de van der Corput n’est pas complètement uniformément distribuée car pour , les points sont dans le carré et les points sont dans . Il n’ya donc pas de points dans le carré ce qui implique que pour , pour tout .s=2 x2i (0,1/2)×[1/2,1) x2i−1 [1/2,1)×(0,1/2) (0,1/2)×(0,1/2) s=2 D⋆n≥1/4 n
Références standard
La monographie de Niederreiter (1992) et le texte de Fang et Wang (1994) sont des endroits à explorer.
la source
Une façon de le faire serait de générer des nombres aléatoires uniformes, puis de tester la "proximité" en utilisant la méthode de votre choix, puis de supprimer les éléments aléatoires trop proches des autres et de choisir un autre ensemble d'uniformes aléatoires pour les compenser.
Une telle distribution réussirait-elle tous les tests d'uniformité? J'espère bien que non! Ce n'est plus uniformément distribué, c'est maintenant une autre distribution.
Un aspect non intuitif de la probabilité est que la chance est volumineuse. Dans les données aléatoires, il y a plus d'essais que nous le pensons. Je pense que Tversky a fait des recherches à ce sujet (il a tellement fait des recherches qu'il est difficile de s'en souvenir).
la source
Ce processus est connu sous le nom de processus «noyau dur» de poisson - ainsi nommé par Brian Ripley dans les années 1970; vous voulez que ce soit aléatoire, mais vous ne voulez pas que les points soient trop proches les uns des autres. Le "noyau dur" peut être imaginé comme une zone tampon autour de laquelle d'autres points ne peuvent pas s'immiscer.
Imaginez que vous enregistrez la position de certaines voitures dans une ville - mais que vous enregistrez uniquement le point situé au centre nominal de la voiture. Alors qu'ils sont dans la rue, il est impossible de rapprocher deux paires car les points sont protégés par le "noyau dur" de la carrosserie - nous ignorerons la super-position potentielle dans les parkings à plusieurs étages :-)
Il existe des procédures pour générer de tels processus ponctuels - une façon consiste simplement à générer des points uniformément, puis à supprimer ceux qui sont trop rapprochés!
Pour plus de détails sur ces processus, reportez-vous à cet exemple.
la source
En ce qui concerne la génération de lots à l'avance, je générerais un grand nombre d'ensembles de variables pseudo-aléatoires, puis les tester avec un test tel que le test de Kolmogorov-Smirnov. Vous voudrez sélectionner le jeu qui a la plus haute valeur de p (ie, est idéal). Notez que cela sera lent, mais que devient plus grand, il devient probablement moins nécessaire.p≈1 N
En ce qui concerne la génération incrémentale, vous recherchez essentiellement une série avec une autocorrélation modérément négative. Je ne sais pas quelle serait la meilleure façon de le faire, car mon expérience des séries chronologiques est très limitée, mais je soupçonne qu'il existe des algorithmes pour cela.
En ce qui concerne un test "trop pair", tout test visant à déterminer si un échantillon suit une distribution spécifique (telle que la KS indiquée ci-dessus) suffit. Vous souhaitez simplement vérifier si , plutôt que le approche standard. J'ai écrit sur un exemple de cette approche alternative ici: le chi-carré est toujours un test à sens unique .p>(1−α)
la source
Je voudrais formaliser votre problème de la manière suivante: vous voulez une distribution sur telle que la densité soit pour un certain quantifiant la répulsion des points.[0,1]n f(x)∝e(1k∑ij|xi−xj|k)1k k<0
Un moyen simple de générer de tels vecteurs consiste à effectuer un échantillonnage de Gibbs.
la source