Ich versuche also, ein Skript zu erstellen, das zufällig einen Wert von 4 in 12 verschiedene Variablen aufteilt. Ich kann mir keinen guten Weg vorstellen, dies richtig zu machen. Ich dachte darüber nach Zahlen zu randomisieren, so dass sie nahe an 0,33 (1/12 von 4) sind, aber das würde oft dazu führen, dass die letzten paar Zahlen unterpriorisiert werden. Hat jemand schon mal so etwas probiert oder hat er tolle Ideen, wie man das so zufällig und so ungleichmäßig wie möglich macht?
Erzeuge 12 Zufallszahlen aus deinem Lieblings-Zufallszahlengenerator, rufe sie r1..r12
auf.
Fügen Sie sie alle hinzu, rufen Sie die Summe sum
auf.
Ihre erste zufällige Fraktion von 4
ist (r1/sum)*4
. Der Rest sollte offensichtlich sein.
Generieren Sie eine beliebige Zufallszahl größer als 1 und nach der Neuskalierung auf die erforderliche Summe.
Beispiel:
1 neu skaliert auf (1 * 4) / 78
2 neu skaliert auf (2 * 4) / 78
...
12 neu skaliert auf (12 * 4) / 78
Der folgende Algorithmus stellt gleichmäßig verteilte Partitionen bereit, wobei angenommen wird, dass es möglich ist, gleichmäßig verteilte Zufallszahlen über einen kontinuierlichen Bereich (oder zumindest über einen diskreten Bereich mit ausreichend vielen möglichen Werten, dass die Wahrscheinlichkeit einer Duplizierung vernachlässigbar ist) zu erzeugen.
Um eine Partition von t
in k
-Werten zu erstellen:
Generiere k-1
gleichmäßig verteilte Werte im Bereich [0, t]
.
Sortiere sie und füge 0
am Anfang und t
am Ende hinzu.
Verwenden Sie die angrenzenden Unterschiede als Partition.