Die genaue Erzeugung variiert von der diskreten Potenzgesetzverteilung


8

Was sind die besten Methoden, um zufällige Ganzzahlen, die nach einem Potenzgesetz verteilt sind, genau zu erzeugen? Die Wahrscheinlichkeit, ( k = 1 , 2 , ) zu erhalten, sollte gleich p k = k - γ / ζ ( γ ) sein und die Methode sollte für jedes γ > 1 gut funktionieren .kk=1,2,pk=k- -γ/.ζ(γ)γ>1

Ich kann zwei naive Ansätze sehen:

  1. Berechnen Sie bis zu einem großen k max, so dass k max k = 1 "nah genug" an 1 ist, und generieren Sie dann ganze Zahlen gemäß diesen Wahrscheinlichkeiten. Dies funktioniert einfach nicht, wenn γ nahe bei 1 liegt, da k max sehr groß sein müsste.pkkmaxk=1kmaxγkmax

  2. Zeichnen Sie reelle Zahlen aus einer kontinuierlichen Potenzgesetzverteilung (ein einfacheres Problem, das ich zu lösen weiß) und runden Sie sie auf irgendeine Weise auf ganze Zahlen. Mit der obigen Methode ist es möglich, die genaue Wahrscheinlichkeit des Erhaltens jeder ganzen Zahl analytisch zu berechnen. Ich könnte die Zurückweisung verwenden, um diese auf zu korrigieren (was auch berechnet werden kann, vorausgesetzt, ich kann die ζ- Funktion auswerten ). (Dies wäre etwas haarig, da ich so runden müsste, dass ich ganze Zahlen mit einer höheren Wahrscheinlichkeit als p k für k erhalte, die größer als ein kleiner Wert sind, und k kleiner als das separat handhabe .)pkζpkkk

Gibt es eine bessere Methode, die auch genau ist (nicht ungefähr)?


2
Ich suche keine fertige Software. Ich suche nach Methoden.
Szabolcs

Hast du die Methoden gefunden?
Syko

Antworten:


6

Ich denke, dass (eine leicht modifizierte Version von) Methode 2 eigentlich ziemlich einfach ist

Verwendung der in Wikipedia angegebenen Definition der Pareto-Verteilungsfunktion

F.X.(x)={1- -(xmx)αxxm,0x<xm,

wenn Sie undα=γ,dann ist das Verhältnis vonpxzuqx=FX(x+1xm=12α=γpxwird beix=1maximiert, was bedeutet, dass Sie einfach um das Verhältnis beix=1skalierenund eine gerade Ablehnungsabtastung verwenden können. Es scheint einigermaßen effizient zu sein.qx=F.X.(x+12)- -F.X.(x- -12)x=1x=1

Genauer gesagt: Wenn Sie aus einem Pareto mit x m = 1 generieren undα=γund auf die nächste ganze Zahl gerundet (anstatt abgeschnitten), dann scheint es möglich zu sein, eine Zurückweisungsabtastung mitM=p1/q1 zu verwenden- jeder erzeugte Wert vonxaus diesem Prozess wird mit der Wahrscheinlichkeitpakzeptiertxxm=12α=γM.=p1/.q1x .pxM.qx

Geben Sie hier die Bildbeschreibung ein

( hier wurde leicht aufgerundet, da ich faul bin; in Wirklichkeit wäre die Passform für diesen Fall ein kleines bisschen anders, aber nicht genug, um in der Handlung anders auszusehen - tatsächlich lässt das kleine Bild es ein bisschen zu klein aussehen, wenn es ist eigentlich ein Bruchteil zu groß)M.

xmαα=γ- -einein

γ


Methode 1 kann ebenfalls genau angepasst werden, indem Methode 1 fast immer ausgeführt und dann eine andere Methode angewendet wird, um mit dem Schwanz umzugehen. Dies kann auf sehr schnelle Weise geschehen.

256p11256p22256pich<1

Der linke Rest kann dann durch eine Reihe von Ansätzen erstellt werden (auch mit beispielsweise "Quadrieren des Histogramms", wenn es automatisiert ist, aber nicht so effizient sein muss), und der rechte Schwanz kann dann mit verwendet werden so etwas wie der obige Akzeptanz-Ablehnungs-Ansatz.

Der grundlegende Algorithmus beinhaltet das Erzeugen einer ganzen Zahl von 1 bis 256 (was nur 8 Bits von der rng erfordert; wenn die Effizienz von größter Bedeutung ist, können Bitoperationen diese "von oben" entfernen und den Rest der einheitlichen Zahl belassen (am besten) links als nicht normalisierter ganzzahliger Wert bis zu diesem Punkt) kann verwendet werden, um bei Bedarf mit dem linken Rest und dem rechten Schwanz umzugehen.

2k216

Im gleichen Zeta (2) -Beispiel wie oben hätten Sie 212 1, 26 2, 7 3, 3 4, eins, 5und die Werte von 250 bis 256 würden sich mit dem Rest befassen. In 97% der Fälle generieren Sie einen der Werte in der Tabelle (1-5).


Ich habe einige Ergänzungen zu meiner Antwort vorgenommen und beabsichtige, weitere hinzuzufügen, um weitere Einzelheiten zu nennen.
Glen_b -State Monica

Danke --- Ich hatte keine Ergänzungen erwartet. Wenn Sie es mehr bearbeiten, können Sie mich bitte anpingen? Ich werde es möglicherweise nicht anders bemerken, da ich diese Seite nicht häufig besuche und die Antwort bereits als "2. ist der richtige Weg" akzeptiert habe.
Szabolcs

4

y

Andere ungefähre Ansätze zum Erzeugen von ganzen Zahlen, wie das Runden (Abschneiden) des Wertes von y, führen zu wesentlich schlechteren Ergebnissen und sollten nicht verwendet werden.

r[0,1)x=P.- -1(1- -r)P.(x)=ein=xP.(X.=ein)P.(x)P.(x)=1- -r

x=12(1- -r)- -1/.(1- -γ)+12
γ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.