Zufallsgenerator mit fester Verteilung erstellen?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

DU kommst über 100 % bei deinen Wahrscheinlichkeiten!

Aber vom prinzip;

Erzeuge eine Zufallszahl zwischen 1 und 100.

Ist diese Zahl

  • kleiner 40 -> 1
  • größer gleich 40 und kleiner (40+30) -> 2
  • größer gleich 70 und kleiner (70+15) -> 3
  • größer gleich 85 und kleiner (85+10) -> 4
  • usw

Der Zufallgenerator liefere Werte zwischen 0 und 1.

Dieser Wertebereich wird entsprechend der gewünschten Häufigkeiten zerlegt, der Einfachheit halbe z.B. 0-0.4 (40%) 0.4-0.7 (30%) usw.

Einzig wichtiger Faktor, der Generator der die Werte zwischen 0 udn 1 erzeugt muß entsprechend zufällig sein, bei einfachen LCGs könnte es passieren, daß erst mehrere Werte in einen Abschnitt fallen, dann in den nächsten usw. je nach genauen Parametern.

tomarte2007 
Fragesteller
 13.12.2018, 12:44

uh okay hört sich ein wenig kompliziert an, aber schon mal vielen Dank dafür.

Wie kann man das denn "erstellen"?

Ich hab leider nicht ganz so viel erfahrung in Programieren :/

0
KarlRanseierIII  13.12.2018, 12:54
@tomarte2007

Nein, überhaupt nicht, Du schaust einfach ob der Zufallswert in dem Bereich liegt, der dem entsprechenden Wert zugewiesen ist. Alternativ kannst Du ein Array mit genug Elementen nehmen und es dem Verhältnis entsprechend befüllen. Danach randomisierst Du über die Zahl der Elemente und gibst den Wert entsprechend der Arrayposition aus.

1

Schreibe in A2:A7 die Zahlen von 1 bis 6
Schreibe in B2: B7 die gewünschten Gewichtungen (müssen nicht sortiert sein)
Schreibe in C1 eine 0
Schreibe in C2:

=SUMME($B$2:$B2)/SUMME($B$2:$B$100)

und kopiere das runter bis C7.
Diese Formel sollte Dir dann eine entsprechende Zufallszahl liefern:

=INDEX($A$2:$A$7;VERGLEICH(ZUFALLSZAHL();$C$1:$C$7;1))

Teste aber mal ausführlich. Ich bin nicht sicher, ob die Gewichtung 100%ig stimmt.

Klappt es?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

Bildlich gesprochen legst du 200 Zahlen in den Topf. 80 mal die 1, 60 mal die 2, 30x3, 20x4, 15x5 und 5x6.

Aus dem Topf ziehst du dann die Zahlen, wobei die Zahlen untereinander die gleiche Wahrscheinlichkeit von 1:199 haben.

Woher ich das weiß:Studium / Ausbildung – Mathematik
tomarte2007 
Fragesteller
 13.12.2018, 12:46

Ja genau so sollte es aussehen! Nur wie kann man daraus einen Zufallsgenerator erstellen?

0
Suboptimierer  13.12.2018, 12:48
@tomarte2007

Du nimmst einen normalen Zufallsgenerator und lässt dir Zahlen von 1 bis 200 geben. Ist die Zahl zum Beispiel <=80, legst du fest, eine 1 gewürfelt zu haben.

Beachte bittel gfntoms Hinweis, dass die Prozente sich zu 100 summieren müssen.

Würde ich einen Zufallsgenerator selber bauen, der nicht für wissenschaftliche Zwecke verwendet werden soll, würde ich mit Zeitstempeln arbeiten. Ich würde den Zeitstempel in eine Zahl umwandeln und Modulooperationen die Zahl auf einen Zahlenbereich abbilden.

1

=VERGLEICH(ZUFALLSZAHL()*105;{0.40.70.85.95.102,5};1)

Dabei sind die Zahlen der Matrix die jeweils aufsummierte Wahrscheinlichkeits-Vorgabe. Also:

  1. 0 .. 40
  2. 40 .. 70 (40+30)
  3. 70 .. 85 (70+15)
  4. 85 .. 95 (85+10)
  5. 95 .. 102,5 (95+7,5)
  6. >102,5, max105=102,5+2,5, da Zufallszahl() max.1, =>Zufallszahl()*105 = max.105

für umfangreichere Vektoren empfiehlt es sich, Zellbereiche (ggf. $, damit Formel kopierbar!) zu verwenden.

Erfordert anfangs etwas Kopfrechnen, hat aber den Vorteil, dass sich alles in einer einzigen Zelle abspielt.