Verwerfungsmethode
Die Verwerfungsmethode (auch Acceptance-Rejection-Verfahren; engl. rejection sampling) ist eine Methode zur Erzeugung von Zufallszahlen zu einer vorgegebenen Verteilung und geht auf John von Neumann zurück. Sie kann genutzt werden, wenn die Inversion der Verteilungsfunktion nicht möglich oder zu aufwendig ist.
Idee
sei hierbei die Verteilungsfunktion
der Verteilung, zu der Zufallszahlen erzeugt werden sollen.
sei eine Hilfsverteilungsfunktion, zu der sich auf einfachem Weg – etwa
über die Inversionsmethode –
Zufallszahlen erzeugen lassen. Es seien ferner
und
die zugehörigen Dichten.
Um die Verwerfungsmethode anwenden zu können, muss zudem ein konstantes
existieren, so dass
für jedes
erfüllt ist. Das
wird benötigt, da die Fläche unter einer Dichtefunktion immer 1 ist. Ohne den
Vorfaktor
gäbe es deshalb zwangsläufig Stellen mit
.
Seien nun
Standardzufallszahlen
und
Zufallszahlen, die der
Verteilungsfunktion
genügen.
Dann genügt mit
die Zufallszahl
der Verteilungsfunktion
.
Man wartet gewissermaßen auf einen ersten Treffer, der unterhalb von
liegt.
Anders gesagt: Es werden Zufallszahlen
nach der Verteilungsfunktion
erzeugt, und die Zahl
wird jeweils mit der Wahrscheinlichkeit
akzeptiert (Acceptance), also dann, wenn erstmals
ist. Die vorhergehenden Zufallszahlen werden dagegen verworfen (Rejection).
Einfaches Beispiel
Um eine Zufallszahl aus
zu wählen, wobei jede Zahl mit der gleichen Wahrscheinlichkeit
auftreten soll, kann man einen herkömmlichen Spielwürfel
werfen. Erscheint eine 6, wirft man ein erneutes Mal. Meist wird aber
bereits beim ersten Wurf eine Zahl zwischen 1 und 5 (einschließlich) erscheinen.
Implementierung
Programmiertechnisch wird die Verwerfungsmethode allgemein wie folgender Pseudocode realisiert:
function F_verteilte_Zufallszahl()
var x, u
repeat
x := G_verteilte_Zufallszahl()
u := gleichförmig_verteilte_Zufallszahl()
until u * k * g(x) < f(x)
return x
end
Der Erwartungswert für die Anzahl der Schleifendurchläufe ist
(siehe unten, Effizienz).
Grafische Veranschaulichung

Man kann sich die Methode so vorstellen, dass in der xy-Ebene
zwischen der x-Achse
und dem Graph von
gleichmäßig auf der Fläche verteilte Zufallspunkte verstreut werden. Als
x-Koordinate des Punkts
nimmt man die G-verteilte Zufallszahl
,
und die y-Koordinate erhält man aus der standardverteilten Zahl
:
.
Von diesen Zufallspunkten werden diejenigen verworfen, die oberhalb des
Graphs von
liegen (
).
Die x-Koordinaten der übrigen Punkte sind dann nach der Dichtefunktion
verteilt.
Um eine Zufallszahl nach dieser Verteilung zu erzeugen, werden also solange
neue Zufallspunkte erzeugt, bis einer unterhalb von
liegt (im Bild der Punkt C). Dessen x-Koordinate ist die gesuchte Zufallszahl.
Effizienz
Die Fläche unter der Dichtefunktion
ist 1, und unter
ist die Fläche entsprechend
.
Deshalb müssen im Mittel
Standardzufallszahlen und
Zufallszahlen, die
genügen, verbraucht werden, bis der erste Treffer erzielt wird. Daher ist es von
Vorteil, wenn die Hilfsdichte
die Dichte
möglichst gut approximiert, damit man
klein wählen kann.



© biancahoegel.de
Datum der letzten Änderung: Jena, den: 24.06. 2021