J'essaie donc de créer un script qui divisera au hasard une valeur de 4 en 12 variables différentes. Je ne peux pas penser à un bon moyen de le faire correctement. J'ai pensé à randomiser des nombres de manière à ce qu'ils soient proches de 0,33 (1/12 sur 4), mais cela conduirait souvent aux derniers chiffres en cours d'exécution. Toute personne a essayé quelque chose comme ça avant ou avoir de bonnes idées pour que cela soit aussi aléatoire et uniformément inégal que possible? P>
3 Réponses :
génère 12 numéros aléatoires de votre générateur de nombres aléatoires préféré, appelez-les Ajoutez-les tous, appelez la somme Votre première fraction aléatoire de r1..r12 code>. p>
somme code>. p>
4 code> est (r1 / somme) * 4 code>. Le reste devrait être évident. p>
Notez que cette solution ne génère pas de séries de nombres qui sont uniformément réparties de manière logique, mais c'est la solution que la plupart des gens semblent choisir parce qu'ils ne comprennent pas pourquoi il ne parvient pas à produire quelque chose de vraiment uniforme.
@woodchips: Cela aurait été utile de fournir une justification de cette critique (bien que ce soit correcte), et encore plus utile de fournir une réponse qui génère des partitions uniformément distribuées. J'ai essayé de faire ce dernier, même si je ne suis pas sûr que ce soit correct non plus.
@ici - Je pourrais faire cela, mais cela prendrait une longue réponse, pas quelque chose qui s'intégrerait dans un commentaire. Et de toute façon, je l'ai déjà fait dans des détails extrêmes. Vraiment, cette question devrait être activement fermée comme une duplication. Stackoverflow.com / Questions / 8064629 / ...
@woodchips, merci, ce lien est utile. Théoriquement, cette question diffère de la question liée car cette question est sur un domaine continu, tandis que la question liée est discrète. Bien entendu, dans la pratique, les deux sont distincts, mais la réponse dépendra de la nécessité de si la solution continue est suffisamment approximative.
Générez un nombre aléatoire supérieur à 1 et après la réalisation à la somme requise. P>
1 RÉNÉFÉRÉ À (1 * 4) / 78 P>
2 RÉNÉFÉRÉ À (2 * 4) / 78 P>
... p>
12 RÉALISÉ À (12 * 4) / 78 P>
L'algorithme suivant fournit des partitions uniformément distribuées, en supposant qu'il soit possible de générer des nombres aléatoires distribués uniformément sur une plage continue (ou, au moins, sur une plage discrète avec suffisamment de valeurs possibles que les chances de duplication sont négligeables). p>
pour produire une partition de générer triez-les et ajoutez Utilisez les différences adjacentes comme la partition. p> li>
ul> t code> dans k code> valeurs: em> p>
k-1 code> des valeurs distribuées uniformément dans la plage [0, t] code>. p> li>
0 code> au début et t code> à la fin. p> li>